7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Djangoで作る簡易RSSリーダー

Last updated at Posted at 2016-11-18

#簡易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 %}

何に使えるのか、実用性はあるのかは不明です。

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?