GIGAZINEのRSSをPythonで読み込む

毎日読んでいるGIGAZINEをなんとかもっと効率的に読めないかと常日頃思ってる。 とりあえず、PythonRSSだけでも読み込んでみようとした記録を書いておく。

feedparserでRSSを取得

feedparserを使うとRSSから記事を取得してくれる。 各記事については、次のメタデータが格納されている。記事の本文はないが冒頭(summary)はある。

  • 'summary_detail'
  • 'updated_parsed'
  • 'links'
  • 'title'
  • 'tags'
  • 'updated'
  • 'summary'
  • 'guidislink'
  • 'title_detail'
  • 'link'
  • 'id'

feedparser.parse()にrssのリンクを渡すとrssを取得してくれる。 今回は、更新日(updated)、タイトル(title)、リンク(link)だけ取得した。 またidはlinkと同じだったため、リンクのラストパスをidとした。

def get_rss(self):
    rss_url = 'http://feed.rssad.jp/rss/gigazine/rss_2.0'
    articles = feedparser.parse(rss_url)

    rss = []
    for e in articles.entries:
        dic = {
            'updated': e.updated,
            'title': e.title,
            'link': e.link,
            'id': e.link.split('/')[-2]
        }
        rss.append(dic)

    return rss

MongoDBにRSSを書き込み

呼び出すとコレクションを上書きするメソッド。 co.drop()を呼び出すことでコレクションがクリアされる。 取得したRSSをdictのlistのまま全て保存できる。

def save_db(self, data):
    client = pymongo.MongoClient('localhost', 27017)
    db = client['my_database']
    co = db['my_collection']
    co.drop()

    co.insert(data)

MongoDBからRSSを読み込み

RSSを後で加工する予定なので、 保存したRSSを再度dictのlistの形式で呼び出すメソッドも書いた。

def read_db(self):
    client = pymongo.MongoClient('localhost', 27017)
    db = client['my_database']
    co = db['my_collection']

    data = [d for d in co.find()]

    return data

まとめ

3つのメソッドを順に実行すると、最新のGIGAZINERSSがDBに保存されていることを確認できる。

# RSSを取得
rss = self.get_rss()

# RSSをDBに書き込み
self.save_db(rss)

# RSSをDBから読み込み
rss = self.read_db()
for article in rss:
    print article['updated']
    print article['title']
    print article['link']
    print article['id']
    print

以下が結果。上手く行った。

2016-09-28T23:00:00+09:00
ただ起こしてくれるだけじゃなく早起きの習慣を体に叩き込んでくれるスマート目覚まし時計「Kello」
http://gigazine.net/news/20160928-kello/
20160928-kello

2016-09-28T22:00:00+09:00
「ごはんですよ」に柚子こしょうを加えた「柚子とうがらしのり」を炊きたてご飯や焼き鳥に付けて食べてみた
http://gigazine.net/news/20160928-momoya-yuzutogarashi/
20160928-momoya-yuzutogarashi

2016-09-28T21:00:00+09:00
リンカーンからトランプまで共和党は160年かけてどのように変化してきたのか?
http://gigazine.net/news/20160928-republican-party-lincoln-trump/
20160928-republican-party-lincoln-trump

...