How to fetch medium articles/stories automatically to your django site using RSS feeds

Jordan Mungujakisa
Django Unleashed
Published in
3 min readApr 19, 2024
Photo by Howard Bouchevereau on Unsplash

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

  1. 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 👋

--

--

Jordan Mungujakisa
Django Unleashed

Mobile app alchemist who is trying to transmute elegant designs, into elegant code, into beautiful mobile app experiences.