#簡易RSSリーダーを作ってみる
何かしらなんでもいいから作り続けないと身につかないので、以前一度やったことのあるRSSをDjangoを使って取得しにいきます。過去記事を参考にデータベースに放り投げたり、テキストだけ取得してマルコフ連鎖したり色々できそうではあります。
例によってシンプル構成としてみました。
##Viewsを書いていく
myapp/views.py
import feedparser
import sys, codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
from django.http import (HttpResponse, HttpResponseRedirect,)
from django.shortcuts import (render, redirect,)
from django.core.mail import (send_mail, BadHeaderError,)
def index(request):
url = 'http://news.yahoo.co.jp/pickup/local/rss.xml'
feeder = feedparser.parse(url)
for entry in feeder['entries']:
title = entry['title']
link = entry['link']
context = {
'title':title,
'link':link,
}
return render(request,'index.html',context)
##index.htmlを書く
1件だけ表示する簡易テンプレートになっています。
templates/index.html
{% extends "base.html" %}
{% block body %}
<div class="container">
<div class="row">
<div class="col-md-6">
{{ title }}
{{ link }}
</div>
</div>
</div>
{% endblock %}
データベースに入れてガンガン処理していくのも面白い予感はします。
さて、ここからが本番。
データベースに保存していきましょう。
#カスタマイズ例
DMMのアダルト動画RSSを取得してデータベースに保存したりします。
views.py
import feedparser
import sys, codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
from django.http import HttpResponse
from django.shortcuts import (render, redirect,)
from myapp.models import Feedmodel
def index(request):
url = 'http://www.dmm.co.jp/digital/videoa/-/list/rss/=/sort=date/'
feeder = feedparser.parse(url)
for entry in feeder['entries']:
data = Feedmodel()
data.title_name = entry['title']
data.url_link = entry['link']
data.package_img = entry['package']#パッケージサムネイルを取得
data.save()
all_data = Feedmodel.objects.order_by('-id')
context = {
'all_data': all_data,
}
return render(request,'index.html',context)
models.py
from django.db import models
class Feedmodel(models.Model):
title_name = models.CharField(max_length=140)
url_link = models.CharField(max_length=140)
package_img = models.TextField(null=True)
いるかどうかは微妙ですが、管理画面用。
admin.py
from django.contrib import admin
from myapp.models import Feedmodel
class FeedmodelAdmin(admin.ModelAdmin):
list_display = ('id','title_name','url_link','package_img')
admin.site.register(Feedmodel,FeedmodelAdmin)
index.html
{% extends "base.html" %}
{% block body %}
<div class="container">
<div class="row">
<div class="col-md-12">
{% for i in all_data %}
<div class="col-md-4 clearfix">
<p><img src="{{ i.package_img }}"><a href="{{ i.url_link }}">{{ i.title_name }}</a></p>
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}
何に使えるのか、実用性はあるのかは不明です。