RaspberryPi2からつぶやく その2

前回。katosunmemo.hatenablog.com

仕様変更

・制作するものを研究室で飼っているメダカを愛でるための「おさかなbot」に変更。

部室人いるbotのつもりで開発をしていたものの、「部室にネット回線が来ていない」という重大な欠陥が発覚したため。

Twitterライブラリをtwythonからtweepyに変更。

ストリーム取得の実装がtweepyだと楽だったため(結局ストリームを監視するのではなく時限式に変更してしまいましたが...)
参考までに↓no6.hatenablog.com

・トリガーをリプライではなく時限式に変更。

リプライを受け取る→撮影→返信をするためにTLストリームを監視するようにしていたが、研究室の回線ではなぜか数分経つとストリームの取得が出来なくなってしまったため。

以上です。
3番目の実装に関しては後ほど。



写真を撮影しツイートに添付して投稿する

今回は今後画像解析とかしたいからという建前のもと、使い慣れているopenCVを使いました。
カメラから画像を取得して、jpegで保存します。
保存した画像をtweepyを使ってつぶやく簡単なプログラムです。

#get picture and tweet
def upload_picture(message):
    api = tweepy.API(auth_handler=auth)
    capture=cv2.VideoCapture(0)
    capture.set(3,640)
    capture.set(4,480)
    if not capture:
        print "Could not open camera"

    ret, im = capture.read()
    cv2.imwrite('cap.jpg', im)

    api.update_with_media('cap.jpg', status=message)

pythonで全角文字を使用する

pythonのデフォルトの文字コードはASCIIとなっており、このままだとツイートの内容を日本語にすることができない。
そこで、文字列の直前にuを付け加えることでpythonユニコード文字だと教えて日本語でツイートの内容を記述します。
d.hourは現在の時間です。

 upload_picture(str(d.hour)+u"時のようすだよ!")

時限式でつぶやく

今回、毎時0分につぶやくためにcronを使用します。
ターミナルに「crontab -e」と入力し、実行タイミングと実行プログラムを登録します。

* */1 * * * python (.pyファイルの絶対パス)

ちなみに、

分 時 日 月 曜日 コマンド

の並びになっています。
参考
cron の設定ガイド




こうして毎時0分に写真付きでツイートが投稿されるようになりました!
f:id:katosunmemo:20151104024502j:plain


さらに自動エサやり機能も付けたいと思いますが、これは卒論が終わってから気が向いたらやると思います...