django- RSS
January 28, 2018
RSS (feed)
Really Simple Syndication 또는 Rich Site Summary 또는 RDF Site Summary의 약자로 웹사이트를 일일이 방문하지 않아도 업데이트 되는 컨텐츠를 확인 할 수 있게 만드는 (자동수집이 가능하도록 하는) 기능입니다.
RSS를 제공하기 위해서는 RSS주소가 필요하다
urls.py
url(r'^blog/feed/$', views.rssfeed),
blog/feed 로 접속하면 rssfeed 라는 함수가 처리를 하도록 views.py 에 rssfeed 함수를 정의한다.
views.py
def rssfeed(request):
from django.utils import feedgenerator
fd = feedgenerator.Rss201rev2Feed(
title = u'my blog rss', #rss 제목
link = u'/blog/feed/', #rss주소
description = u'this is a rss of my blog' #설명
)
for post in Post.objects.all().order_by('published_date')[:5]:
fd.add_item(
title = post.title,
link = u'/blog/post/%d/' % post.id,
description = post.content,
published_date = post.published_date)
return HttpResponse(fd.writeString('utf-8'), content_type='application/rss+xml')
xml 자료형을 쉽게 만들 수 있는 django.utils.feeedgenerator를 이용한다. RSS자료제공(feeding)에 필요한 자료를 만들어 준다고 한다.
/blog/feed 에 들어가면
django는 RSS및 Atom 피드를 쉽게 만들 수 있는 고급 신디케이션 피드 생성 프레임 워크를 제공함으로써 feeding을 훨씬 고차원 적으로 해결하게 만든다. https://docs.djangoproject.com/en/2.0/ref/contrib/syndication/
feeds.py
blog 폴더 밑에 feeds.py파일을 생성 한다
from django.contrib.syndication.views import Feed
from django.urls import reverse
from django.utils.feedgenerator import Atom1Feed
from .models import Post
class RssFeed(Feed):
title = 'my blog rss'
link = '/blog/feed/'
description ='this is a rss of my blog'
title_template='feeds/rss_title.html'
description_template = 'feeds/rss_description.html'
def items(self):
return Post.objects.order_by('published_date')[:5]
def item_title(self, item):
return item.title
def item_content(self, item):
return item.content
# item_link is only needed if NewsItem has no get_absolute_url method.
def item_link(self, item):
return reverse('post_detail', args=[item.pk])
class AtomFeed(RssFeed):
feed_type = Atom1Feed
title_template = 'feeds/rss_title.html'
description_template = 'feeds/rss_description.html'
테스트
https://chrome.google.com/webstore/detail/rss-feed-reader/pnjaodmkngahhkoihejjehlcdlnohgmp/related 에 들어가서 rss feed reader확장 프로그램을 다운받고 url을 추가해 보았다.