俺のクソレシピ

おもにプログラミングについて俺の趣味についてテキトーに書いています。

記事一覧

Pythonで名言をツイートするbotを作ってみた

だいぶ遅れてしまいましたが、今回はPythonで名言をツイートするbotを作ってみたので解説します。ちなみに、Raspberry Piを使っていて名言は名言集.comから取得しています。

名言bot
python 名言bot (@py_meigen_bot) | Twitter

名言集.com
名言集.com - 名言・ことわざ・金言・格言集めました

f:id:myprogramming:20170728192959j:plain

名言を取得する

名言を取得する方法について説明します。まず、今回は名言集.comのランダム名言から取得します。HTMLを解析して名言を取得します。まずサイトのHTMLを取得して、その中から取得したい文字列(今回の場合は名言)を取得します。ズラズラ書かれていてもわかりにくいと思うのでまずプログラムを見てもらいましょう。

Python3ではurllib.request.urlopenを使ってHTMLを取得します。ただそのままだと文字化けしてしまうのでデコードします。名言集.comは、utf-8エンコードされているのでdecode('utf-8')でokです。そして、HTMLが取得できたら正規表現で名言とその作者を取得します。

urllibとデコードについて
Python3で、urllibとBeautifulSoupを使ってWebページを読み込む - minus9d's diary

正規表現について
Pythonの正規表現の基本的な使い方 | UX MILK

Pythonでツイートする

次にPythonでツイートする方法について説明します。まずpython-twitterをインストールします。

pip install python-twitter

importするときはpython-twitterではなくtwitterなので気をつけてください。

このソースコードにある"your ..."のところは自分のキーに置き換えてください。

twitterapiキーの取得について
Twitter API Key を取得する方法 | phiary

ちなみにtwitterapiキーを取得するには電話番号をtwitterアカウントに登録しないといけないのですが、俺の場合なぜかパソコンだと登録できなくてスマホだと電話番号の登録ができました。

取得した名言をツイートする

では実際に取得した名言をツイートしてみましょう。さっきの2つのプログラムを組み合わせるだけですね。

これを実行すれば名言をツイートしてくれるプログラムの出来上がりです。・・・ん?これじゃbotじゃない!!

Pythonプログラムを定期的に実行する

botにするには自動で定期的に実行しないといけませんね。定期的に実行するにはHerokuなどがありますが制限がかかっていたり設定がめんどかったりするので、今回は眠っていたRaspberry Pi3を使ってやってみました。ちなみにRaspberry Piのバージョンはなんでもokです。Raspberry Piで定期的にプログラムを実行するにはcronを使います。今回、俺は5分ごとにツイートしようと思ったので設定は以下のようになります。

*/5 * * * * python3 /home/ユーザー名(デフォルトではpi)/meigen_bot.py

cronの使い方について
決まった時間に処理する | Make.

ちなみに近々、Raspberry Piをやったことのない人のためにRaspberry Pi入門の記事を書きたいと思っています。

まとめ

今回はPythonRaspberry Piで名言をツイートするbotを作ってみました。Raspberry Piを使ったため少しお金がかかってしまいましたが、Raspberry Piならbotをやめた後でも使えますし、そこまで高くないのでRaspberry Piを買ってやってみるのもいいのではないでしょうか。今回は名言をツイートするというほぼ無意味なbotを作ってしまいましたが、これを応用すれば天気予報をツイートする実用的なものや、Raspberry Piを使っているのでセンサーから得た情報をツイートするものを作ることだって簡単にできてしまいます。ぜひ皆さんもいろいろなbot作りをしてみてください。