Raspberry Π

Raspberry Piでいろんなことをやってみようというブログです。

mincraft

ラズパイとTwitter(ツイッター)を連携

ラズパイを使った野菜栽培のプロジェクトにて、日々の移り変わりをTwitter上にbotとしてつぶやければと思いました。

ということで、ラズパイとTwitterツイッター)を連携してみたいと思います。

f:id:taka230035:20170522085408j:plain:w300

ラズパイで野菜栽培=ラズ菜プロジェクトは以下となります。

rasp0035.hatenablog.com



Twitterに登録

今回の連携でTwitterAPIを使うので、Twitterにアプリとして登録する必要があります。
PCなどから、Webブラウザ上で行います。登録用のURLは以下です。

apps.twitter.com



上記サイトより"Create New App"ボタンを押下すると、以下画面となります。


f:id:taka230035:20170522085913p:plain:w400

・アプリ名やサイト名や連携名
・使用用途などの説明
・Webサイト名(持ってない場合は仮のものでOKで後ほど変更可能)

等を設定し、規約にチェックを入れ、登録します。



登録後の画面にて、"Keys and Access Tokens"タブより
まず、Access Token の新規作成ボタンを押下します。

・Consumer Key (API Key)
・Consumer Secret (API Secret)
Access Token
Access Token Secret

を画面上より取得します。上記4つの値が連携で必要です。




Twitterライブラリのインストー

これ以降はラズパイのターミナルにて実装を行います。

以下コマンドより、twitterのライブラリをインストールします。
今回はpython3用のライブラリを使用します。

$ sudo apt-get update
$ sudo pip3 install twython --upgrade

(以下コマンドは不要な可能性あり)
$ sudo pip install requests requests_oauthlib


Errorが表示されなければ、問題ないと思われます。

筆者の環境では問題なくできましたが、既存環境での構築ですので、もしかしたら他にコマンドが必要かもしれません。

また、最後の
$ sudo pip install requests requests_oauthlib
は不要かもしれません。機会があれば、後日確認いたします。




botスクリプトの作成

次にbot用のプログラムファイルを作成します。

今回はtweetbot.pyという名前にして、bot用のテンプレートがあるので、それを少し修正しました。
API変数を個別設定にしたり、今回はpython3なのでprintの記載を修正したりした程度です。
プログラム内の各種認証キーは仮で明記しております。

# coding: utf-8#----------1
from twython import Twython, TwythonError#----------2

#api
APP_KEY = "aaaabbbb"#----------3
APP_SECRET = "CCCCCCCDDDDDDD"
OAUTH_TOKEN = "1111-2222"
OAUTH_TOKEN_SECRET = "33334444"

# Requires Authentication as of Twitter API v1.1
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)#----------4

try:
twitter.update_status(status='こんにちは。ツイッターbotです。')#----------5
except TwythonError as e:
print(e)#----------6





スクリプトの解説

上記スクリプトの解説となります。
〜〜〜〜〜〜〜〜〜〜
1について
ファイル内に日本語を含めたかったので、その明記となります。必要な処理です。

2について
Twitterライブラリを読み込む処理です。

3について
TwitterAPIを使用するための認証キーを設定します。
WebブラウザでのTwitterに登録にて、4つのキーを取得したので、それぞれ記載します。上のプログラムのものは仮です。
それぞれの環境によって変更する必要があります。

4について
APIを使用し、Twitter側と認証をして、ユーザ情報を取得している処理です。

5について
TwitterAPIを使用して、つぶやきます。ここに、つぶやきたい文言を入力します。

6について
問題があった場合のエラーを表示する処理となります。

〜〜〜〜〜〜〜〜〜〜




つぶやいてみる

それでは、以下コマンドでつぶやいてみたいと思います。

$ sudo python3 tweetbot.py



実行すると、つぶやけました!!



ちなみにですが、短期間での連続した同じ文言はつぶやけないようです。
エラーとなります。

$ sudo python3 tweetbot.py
Twitter API returned a 403 (Forbidden), Status is a duplicate.


つぶやき文言を変えると、短期間でも投稿できます。


連続してつぶやくつもりはないので、特に問題ありませんが、
連続したい場合は時刻などを入れたほうが良いと思いました。(未検証)




画像を付けてつぶやく

今度は画像付きでつぶやきたいと思います。
ファイル名をtweetbotImage.pyとして、上のプログラムを少し修正しました。

# coding: utf-8
from twython import Twython, TwythonError

#api
APP_KEY = "aaaabbbb"
APP_SECRET = "CCCCCCCDDDDDDD"
OAUTH_TOKEN = "1111-2222"
OAUTH_TOKEN_SECRET = "33334444"

# Requires Authentication as of Twitter API v1.1
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

# Image
image = open('./image.jpg', 'rb')#----------7

try:
mediaId = twitter.upload_media(media=image)#----------8
twitter.update_status(status='おはようございます。', media_ids=mediaId['media_id'])#----------9
except TwythonError as e:
print(e)


解説となります。
〜〜〜〜〜〜〜〜〜〜
7について
ここまでは、上の画像無しのものと同じプログラムで、ここから違ってきます。
まず、つぶやきに付けたい画像ファイルを記載します。
ファイル名を各々で変更してください。
今回は、ラズパイのカメラモジュールで撮影した画像を選択しております。
カメラモジュールを使って写真を撮る - Raspberry Π

8について
先にTwitterAPIを使用して画像をアップロードします。
そして、mediaIdにアップロード情報を保存します。

9について
文言と画像情報を付けて、APIでつぶやきます。
〜〜〜〜〜〜〜〜〜〜


うまくいけば、画像つきのものがつぶやけます。



Twiiterとの連携メモは以上です。


今すぐ使えるかんたんmini Twitter ツイッター 基本&便利技 [改訂4版]

今すぐ使えるかんたんmini Twitter ツイッター 基本&便利技 [改訂4版]