GIGAZINEのRSSをPythonで読み込む
毎日読んでいるGIGAZINEをなんとかもっと効率的に読めないかと常日頃思ってる。 とりあえず、PythonでRSSだけでも読み込んでみようとした記録を書いておく。
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つのメソッドを順に実行すると、最新のGIGAZINEのRSSが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 ...