Raspberry Pi(ラズベリーパイ)をTwitterのbot化して自動で写真をアップロードする

鳥

Raspberry Pi(ラズベリーパイ)をツイッターのbotにして、ついでに自動で写真を撮影してツイッターにアップロードできるようにしてみました。その方法をメモしておきます。最終的には、こんな感じで画像がアップロードされるようになります。

Raspberry Pi Twitter bot

以下のステップでbotを作っていきます。

  1. Raspberry Piの環境
  2. Twitterへのアプリケーション登録
  3. Pythonを使ったbotの作成
  4. Raspberry Piのcronの設定

Raspberry Piの環境構築

今回、Raspberry Piのbot化に使った環境は以下のとおりです。Amazon価格で合計14,617円でした。もっと安く組むことも可能と思います。例えば、撮影した場所の付近にコンセントがあるならモバイルバッテリーは不要です(代わりにACアダプタが必要になります)。

Raspberry Pi(ラズベリーパイ)を動かすために必要な周辺機器、値段、合計金額 | Androidアプリ開発@つくばの日記

ラズベリーパイ本体

OS

Raspberry PiのOSは、人気のあるRaspbianを使います。

Raspbian

Raspberry PiにOSをインストールする方法については、以下の記事を参照。

Raspberry Pi(ラズベリーパイ)にOSをインストールする方法と各OSの特徴 | Androidアプリ開発@つくばの日記

カメラモジュール

Raspberry Piにカメラモジュールを接続するする方法については、以下の記事を参照。

Raspberry Pi(ラズベリーパイ)にカメラモジュールを接続する | Androidアプリ開発@つくばの日記

ラズベリーパイのケース(カメラモジュール用の穴があるもの)

Wi-Fiドングル

Raspberry Piとの相性は確認済みです。

モバイルバッテリー(8,800mAhの大容量のもの)

モバイルバッテリーでRaspberry Piを動かすのが良いのかどうかは、ともかく。

Twitterにアプリケーションを登録

まずはTwitterにログインして、アプリケーションを登録します。以下のページにアクセスして、適当な名前で登録しておきましょう。ちなみに、わたくしは「Piカメラアップローダー」という名前で登録しました。

Twitter Application Management

アプリケーションを登録すると発行される、「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のカメラモジュールを操作する方法は以下の記事を参照。

Raspberry Pi(ラズベリーパイ)のカメラモジュールをPythonで操作する | Androidアプリ開発@つくばの日記

# 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の設定については、以下の記事の下の方に書いた内容が参考になると思います。

さくらVPSでcronを設定する(CentOS) | Androidアプリ開発@つくばの日記

Raspberry PiがTwitterのbotになった

これでRaspberry PiをTwitterのbotになりました。

Twitterにアップロードされた様子を以下にのせておきます。水槽で飼っているメダカです。画質が悪いですが、調整すれば良くなると思います。

Raspberry Pi Twitter bot

Raspberry PiをTwitterのbotにするために使ったもの一覧

Raspberry PiをTwitterのbotにするために使ったものの一覧です。

シェアしてもらえるとうれしいです。゚(´っωc`)゚。