En el artículo, veremos cómo extraer fuentes y publicar detalles utilizando fuentes RSS para un blog de Hashnode. Aunque lo vamos a usar para blogs en Hashnode, también se puede usar para otras fuentes.
RSS significa Rich Site Summary y utiliza formatos web estándar para publicar información que cambia con frecuencia, como publicaciones de blog, noticias, audio, video, etc. Los documentos RSS a menudo se conocen como fuentes que consisten en texto y metadatos, como la hora y el nombre del autor.
Instalación del analizador de feeds:
Usaremos la biblioteca de python Feedparser para analizar la fuente RSS del blog. Es una biblioteca bastante popular para analizar fuentes de blogs.
pip install feedparser
Entendamos esto paso a paso:
Paso 1: Obtener fuente RSS
Utilice la función feedparser.parse() para crear un objeto de fuente que contenga un blog analizado. Toma la URL del feed del blog.
Python3
# url of blog feed feed_url = "https://vaibhavkumar.hashnode.dev/rss.xml" blog_feed = feedparser.parse(feed_url)
Paso 2: Obtener detalles del blog.
Python3
# returns title of the blog site blog_feed.feed.title # returns the link of the blog # and number of entries(blogs) in the site. blog_feed.feed.link len(blog_feed.entries) # Details of individual blog can # be accessed by using attribute name print(blog_feed.entries[0].title) print(blog_feed.entries[0].link) print(blog_feed.entries[0].author) print(blog_feed.entries[0].published) # Getting lists of tags and authors. tags = [tag.term for tag in blog_feed.entries[0].tags] authors= [author.name for author in blog_feed.entries[0].authors]
A continuación se muestra la implementación completa: ahora use el código anterior para escribir una función que tome el enlace de la fuente RSS y devuelva los detalles.
Python3
def get_posts_details(rss=None): """ Take link of rss feed as argument """ if rss is not None: # import the library only when url for feed is passed import feedparser # parsing blog feed blog_feed = blog_feed = feedparser.parse(rss) # getting lists of blog entries via .entries posts = blog_feed.entries # dictionary for holding posts details posts_details = {"Blog title" : blog_feed.feed.title, "Blog link" : blog_feed.feed.link} post_list = [] # iterating over individual posts for post in posts: temp = dict() # if any post doesn't have information then throw error. try: temp["title"] = post.title temp["link"] = post.link temp["author"] = post.author temp["time_published"] = post.published temp["tags"] = [tag.term for tag in post.tags] temp["authors"] = [author.name for author in post.authors] temp["summary"] = post.summary except: pass post_list.append(temp) # storing lists of posts in the dictionary posts_details["posts"] = post_list return posts_details # returning the details which is dictionary else: return None if __name__ == "__main__": import json feed_url = "https://vaibhavkumar.hashnode.dev/rss.xml" data = get_posts_details(rss = feed_url) # return blogs data as a dictionary if data: # printing as a json string with indentation level = 2 print(json.dumps(data, indent=2)) else: print("None")
Producción: