logo header
logo header
logo header
logo header
  • 2016.08.12
  • 技術ブログ

Raspberry Pi2 + Twythonでニュース bot を作ろう(step4:Raspberry Pi から Twitter へ自動投稿させる)

raspberry_twitter_ 00

短期集中連載! 電子工作初心者向けの Raspberry Pi 短期集中ブログ、第2弾です。

今回作るもの

Twython という Python 用の Twitter ライブラリを使って、 RSS フィードから取得したニュース記事を、ツイッターに自動でつぶやく bot を作ります。

目次

今回のテーマは、以下の4回に分けてブログをお届けします。

step1:Twitter API を使うための準備
step2:Twython インストールと、サンプルプログラムの実行
step3:Python で RSS データを取得
step4:Raspberry Pi から Twitter へ自動投稿させる ← 今ここ

前回ツイートした投稿を記録する

RSSの更新頻度は不定期なので、定期的に最新のニュース記事を取得した際、すでにツイート済みの記事が取得される可能性もあります。そうした場合の重複ツイートを防止するため、前回ツイートした記事の情報をファイルに記録しておきます。

こちらがニュース1記事分のRSSフィード。記事を一意に特定するには linkpubDate が良さそうですが、今回は pubDate を利用します。

Python でファイル出力

Python の open メソッド と write メソッドを利用して、ファイルを読み書きするプログラムを作成します。write メソッドは改行が付与されないため、出力内容の末尾に \n を追加してください。

上記のプログラムを3回続けて実行してみると、以下の結果に。改行もばっちりです!

ツイートした記事の pubDate を記録する

前回のブログで作成した update_status.py に、先ほどのプログラムを組み込みます。

修正した update_status.py を実行後、無事にログファイルに pubDate が記録されていることを確認できました。

ニュース記事を重複投稿しないようにする

ニュース記事を重複してツイートしないよう、前回のツイート内容をチェックするプログラムを追加します。

readline でファイルを1行ずつ読み込むと末尾の改行も含まれてしまうため、rstrip メソッドで改行を除去しています。また、ログファイルが存在しない場合は実行時エラーになるため、事前に last_pubdate.log という名前の空ファイルを作成しておきましょう(バージョンアップはおいおい…)。

定期的に自動実行させる

定期的に update_status.py を実行させるため、cron を作成します。

cron 作成

今回は、1時間おき(毎時0分)に Python スクリプトを実行するよう設定しました。

cron 動作確認

うまく動作するかドキドキしながら、0分ちょうどまで待ってみました(現在14:57)。すると15時ちょうどに新着ツイートが!
Python スクリプトも cron も、無事に動いたようでひと安心です。

raspberry_twitter_ 04_01

まとめ、残った課題

無事に「RSSフィードから取得したニュース記事を、ツイッターに自動でつぶやくbot」を作ることができました。エラー処理や実行ログなど、改善が必要な部分はたくさんありますが、基本的な動きは問題ないかと思います。

今回の目標は達成したので、この連載はいったん区切りを付けますが、せっかくRaspberry Piを使うので電子工作にもチャレンジします。次回、連載の番外編としてお届けします。

また、ツイートの投稿時間が「日本時間 - 16時間」になってしまう不具合にも対応する予定です。

4回の連載にお付き合いいただき、ありがとうございました!

ともに世界をアップグレードできる、そんな日を夢見て。
Upgrade the World!