Raspberry Pi(ラズベリーパイ)をツイッターのbotにして、ついでに自動で写真を撮影してツイッターにアップロードできるようにしてみました。その方法をメモしておきます。最終的には、こんな感じで画像がアップロードされるようになります。
以下のステップでbotを作っていきます。
- Raspberry Piの環境
- Twitterへのアプリケーション登録
- Pythonを使ったbotの作成
- Raspberry Piのcronの設定
この記事の目次
Raspberry Piの環境構築
今回、Raspberry Piのbot化に使った環境は以下のとおりです。Amazon価格で合計14,617円でした。もっと安く組むことも可能と思います。例えば、撮影した場所の付近にコンセントがあるならモバイルバッテリーは不要です(代わりにACアダプタが必要になります)。
ラズベリーパイ本体
OS
Raspberry PiのOSは、人気のあるRaspbianを使います。
Raspberry PiにOSをインストールする方法については、以下の記事を参照。
カメラモジュール
Raspberry Piにカメラモジュールを接続するする方法については、以下の記事を参照。
ラズベリーパイのケース(カメラモジュール用の穴があるもの)
Wi-Fiドングル
Raspberry Piとの相性は確認済みです。
モバイルバッテリー(8,800mAhの大容量のもの)
モバイルバッテリーでRaspberry Piを動かすのが良いのかどうかは、ともかく。
Twitterにアプリケーションを登録
まずはTwitterにログインして、アプリケーションを登録します。以下のページにアクセスして、適当な名前で登録しておきましょう。ちなみに、わたくしは「Piカメラアップローダー」という名前で登録しました。
アプリケーションを登録すると発行される、「Consumer Key(API Key)」「Consumer Secret(API Secret)」「Access Token」「Access Token Secret」をメモしておきます。APIをとおすために必要です(後述)。
PythonでTwitterのbotを実装
TwitterのbotをPythonで作っていきます。Raspberry Piのエディタを使ってもいいですが、わたくしは他のPCで書いてRaspberry Piに保存しました。どちらの場合でもcronを動かす時にファイルのフルパスが必要になりますので、覚えておきましょう。
PythonからTwitterのAPIにアクセスするには、「Twython」というモジュールを使うのが良さそうです。
Actively maintained, pure Python wrapper for the Twitter API. Supports both normal and streaming Twitter APIs
(出典:Twython — Twython 3.1.2 documentation)
Twythonを使ってbotを実装していきます。まずはおまじないとモジュールのインポートを行います。
picameraはRaspberry Piのカメラモジュールにアクセスするためのモジュール、timeはPythonの時間関係のモジュール、twythonはTwitterのAPIにアクセスするためのモジュール(上述)です。
Pythonを使ってRaspberry Piのカメラモジュールを操作する方法は以下の記事を参照。
# coding: utf-8
import picamera
import time
import twython
次に、前述の「Twitterにアプリケーションを登録する。」で取得したキーワードを使って、TwitterのAPIにアクセスするためのオブジェクトを作成します。「xxxxx〜」となっているところは、各自で読み替える必要があります。apiとして作成しているのが、TwitterのAPIにアクセスするためのオブジェクトです。
CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxx'
ACCESS_KEY = 'xxxxxxxxxxxxxxxxxxxx'
ACCESS_SECRET = 'xxxxxxxxxxxxxxxxxxxx'
api = twython.Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
さらに、botからツイートする内容をプログラムで記述します。今回は、撮影時刻と撮影した画像をツイートしてみます。Raspberry Piの記憶容量が限られているので、画像は撮影ごとに上書きします。time.time()で現在時刻を取得、camera.capture()で撮影を行います。
tweetTime = time.time()
camera = picamera.PiCamera()
camera.capture('tmpImage.jpg')
tweetImage = ('tmpImage.jpg','rb')
最後に、twythonのupdate_status_with_mediaメソッドを使ってTwitterのAPIにアクセスし、先ほど作成した現在時刻と撮影した写真をTwitterにアップロードします。
api.update_status_with_media(status=tweetTime,media=tweetImage)
cronの設定
cronから先ほど作ったプログラムを定期的に叩いて、Twitterへのアップロードを自動化します。今回は、10分おきにアップロードを行うよう設定してみます。
Raspberry Piのターミナルにcrontab -eとコマンドして、cronの設定を行います。末尾に以下の内容を追加します。パスの部分は、プログラムファイルの場所を指定します。
*/10 * * * * python /home/pi/PiCameraUploader/PiCameraUploader.py
cronの設定については、以下の記事の下の方に書いた内容が参考になると思います。
Raspberry PiがTwitterのbotになった
これでRaspberry PiをTwitterのbotになりました。
Twitterにアップロードされた様子を以下にのせておきます。水槽で飼っているメダカです。画質が悪いですが、調整すれば良くなると思います。
Raspberry PiをTwitterのbotにするために使ったもの一覧
Raspberry PiをTwitterのbotにするために使ったものの一覧です。