- 2016.07.26
- 技術ブログ
Raspberry Pi2 + Twython でニュース bot を作ろう(step3:Python で RSS データを取得する)
短期集中連載! 電子工作初心者向けの Raspberry Pi 短期集中ブログ、第2弾です。
今回作るもの
Twython という Python 用の Twitter ライブラリを使って、 RSS フィードから取得したニュース記事を、ツイッターに自動でつぶやく bot を作ります。
目次
今回のテーマは、以下の4回に分けてブログをお届けします。
step2:Twython インストールと、サンプルプログラムの実行
step3:Python で RSS データを取得 ← 今ここ
step4:Raspberry Pi から Twitter へ自動投稿させる [仮]
はじめに:RSSとは
RSSは、ニュースやブログなど各種のウェブサイトの更新情報を簡単にまとめ、配信するためのいくつかの文書フォーマットの総称である。
RSS は「RDF site summary(RSS 1.0)」「really simple syndication(RSS 2.0)」の略称で、ブログやニュース配信サイトなどで、更新情報を配信するための規格のひとつです。
RSS を活用すれば、サイトの更新情報を自動的に取得することができるので、お気に入りのサイトをひとつひとつチェックしに行く必要がなくなります。 今回は Yahoo!ニュースの RSS フィード を取得して、ツイートしてみます。
feedparser を利用して、RSS フィードを取得する
*以降の記事は RSS 2.0 を対象とします。
以下は、ブログ執筆時点の Yahoo!ニューストピック(IT)の RSS フィードです。RSS フィードは XML 形式のため、人が読みやすい形にパースしてあげる必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" version="2.0"> <channel> <title>Yahoo!ニュース・トピックス - コンピュータ</title> <link>http://headlines.yahoo.co.jp/hl?c=c_sci</link> <description>Yahoo! JAPANのニュース・トピックスで取り上げている最新の見出しを提供しています。 </description> <language>ja</language> <pubDate>Sun, 24 Jul 2016 14:54:53 +0900</pubDate> <item> <title>PS VR 予約2回目も完売続出</title> <link>http://news.yahoo.co.jp/pickup/6208650</link> <pubDate>Sat, 23 Jul 2016 18:01:15 +0900</pubDate> <enclosure length="133" url="http://i.yimg.jp/images/icon/photo.gif" type="image/gif"></enclosure> <guid isPermaLink="false">yahoo/news/topics/6208650</guid> </item> ... |
今回は Python ライブラリ feedparser を利用して、RSS フィードのパースを行います。
feedparser インストール
pip
コマンドを使ってインストールします。
1 |
$ sudo pip install feedparser |
RSS フィードの取得
feedparser.parse
メソッドの引数に RSS フィードの URL を指定すると、フィードの内容を格納したオブジェクトが取得できます。
1 2 3 4 5 6 7 |
import feedparser RSS_URL = "http://news.yahoo.co.jp/pickup/computer/rss.xml" news_dic = feedparser.parse(RSS_URL) # RSSフィードのタイトルを出力 print news_dic.feed.title |
実行結果はご覧のとおり。
1 2 |
pi@raspberrypi ~ $ python rss_test.py Yahoo!ニュース・トピックス - コンピュータ |
feedparser.parse で取得した結果、どのような構造で格納されているかは、公式ドキュメントを参照してください。
最新の1件を twitter に投稿する
次に、最新の RSS フィードを twitter に投稿してみましょう。前回作成した update_status.py
を、以下のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# coding: utf-8 from twython import Twython, TwythonError # 修正内容1: feedparser のインポート宣言を追加 import feedparser APP_KEY = "Consumer Key (API Key)" APP_SECRET = "Consumer Secret (API Secret)" OAUTH_TOKEN = "Access Token" OAUTH_TOKEN_SECRET = "Access Token Secret" # 修正内容2: RSSフィードを取得して、ツイート内容を作成 RSS_URL = "http://news.yahoo.co.jp/pickup/computer/rss.xml" news_dic = feedparser.parse(RSS_URL) latest_entry = news_dic['entries'][0] message = latest_entry.title + latest_entry.link twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) try: twitter.update_status(status=message) except TwythonError as e: print e |
twitter を確認してみると...無事に RSS フィードから取得した情報が投稿されていました!
次回は、いよいよ最終回。Raspberry Pi で RSS を定期的にチェックして、更新情報があればツイートする仕組みを作ります。