How to fetch medium articles/stories automatically to your django site using RSS feeds
I have been working on building my portfolio website using Django as the backend and the front end is HTML and Bootstrap CSS. I needed to populate the recent blogs section on my portfolio because I write quite a lot on Medium and I really wanted to showcase that on my portfolio and the challenge was to automatically fetch my medium blog articles to display on my portfolio site.
So the first thing I had to do was check if Medium supported RSS feeds for their articles and luckily for me they did. Medium supports the use of RSS feeds for profiles, publications and topics.
You can read more: https://help.medium.com/hc/en-us/articles/214874118-Using-RSS-feeds-of-profiles-publications-and-topics
Please note that stories behind the Medium paywall are not available as full articles in any of the RSS feeds.
For my usecase, I wanted to automatically fetch my articles from medium to django. The feed for each profile can be retrieved using the following URL schema: medium.com/feed/@username
or username.medium.com/feed
In my case, the URL to fetch my feed was https://medium.com/@jordan-mungujakisa/feed
Here is a step-by-step walkthrough of how I achieved my goal
- Install the
feedparser
by running the following command in your terminal
pip install feedparser
2. Get the URL to your feed and save it as a variable in your view.
rss_url = 'https://example.com/feed'
3. In your view
, get the parsed feed using the feedparser
library by adding the following code
feed = feedparser.parse(rss_url)
4. We can then iterate over the feed and extract the fields we need to use in our site
for entry in feed.entries:
title = entry.title,
link = entry.link
Then you can create an object from the fields, create a list of them and pass it as part of the HTML context.
Here is how your view should look like after adding the above code
def rss_feed(request):
# Parse the RSS feed
rss_url = 'https://example.com/feed'
feed = feedparser.parse(rss_url)
# Extract relevant information from the feed entries
posts = []
for entry in feed.entries:
post = {
'title': entry.title,
'link': entry.link,
'published': entry.published_parsed
}
posts.append(post)
# Sort the posts by published date (newest first)
posts.sort(key=lambda x: x['published'], reverse=True)
return render(request, 'rss_feed.html', {'posts': posts})
Then you can iterate over the posts in your django template and present the posts in your HTML
<div class="card-group gx-5">
{% for post in posts %}
<div class="card">
<img src="{{ post.image }}" alt="{{ post.image }}" class="card-img-top">
<div class="card-body">
<h5 class="card-title">{{ post.title }}</h5>
<p class="card-text h6"><small class="text-muted h6">{{ post.published }}</small></p>
</div>
</div>
{% endfor %}
</div>
I hope you found this post useful, if so please follow me to be updated when I publish new articles.
You can also follow me on
X (formerly Twitter) : https://twitter.com/JakisaJordan
LinkedIn : https://www.linkedin.com/in/jordanmungujakisa/
Thanks for reading my article!
Tschüss 👋