Twitter API V2
温度、湿度、気圧、二酸化炭素濃度のツイッターへの投稿が不安定です。
4月から5月にかけてツイッターへの投稿ができなくなっていました。このときの原因は、多分光回線の契約をドコモ光からNURO光に変更したことに伴い、我が家の機器のIPアドレスが変わってしまったためのトラブルだと思っていました。このときは、APIキーとシークレットを再設定して復旧しました。
今回は、7月18日以来、ツイートができていないことに気づきました。原因を調べているうちに、今年の1月にTwitter API のプランが整備され、Standard(v1.1)APIを利用している場合は正式にv2へ移行するよう勧告があったようです。そこでV2に対応させるため少しパソコンの前で格闘しました。
Twitterは外部プログラムから利用可能なAPIが公開されており、ツイートすることができます。
この機能を使って自作の百葉箱に設置した温度センサ、湿度センサ、気圧センサ、二酸化炭素濃度センサから取得したデータをRaspberryPiを使って、6時間ごとにTwitterやLINEに投稿していました。
このときtwitterに投稿するしくみに、Twitter APIを使っていたのですが、そのバージョンが1.1から2に変更になったようです(2021年11月)。
Developer portal
TwitterのDeveloper portalにアクセスし、
- Consumer Keys(API Key and Secret)と Access Token and Secret を OAuth1.0a認証で使うため再発行する
- Access Token を発行しただけでは Read only 権限であるため、User authentication settings を有効としてアプリ権限を Read and write にする
この2点の変更を行いました。このサイトが、私にはわかりにくく、試行錯誤の連続でした。
Tweepy
Pythonのコードを書き換えます。これまでTwythonを使っていたのですが、ネット上で情報量の多いTweepyに変更することにしました。書き換えたコードは非常にシンプルです。
従来のコードの一部
twitter = Twython( consumer_key, consumer_secret, access_token, access_token_secret ) image = open('/home/XXXXXXXXXXXXXXX/graph.png','rb') response = twitter.upload_media(media=image) twitter.update_status(status=message, media_ids=[response['media_id']])
書き換えたコードの一部
content = message client = tweepy.Client(bearer_token=bt,consumer_key=ck, consumer_secret=cs, access_token=at, access_token_secret=ats) media=api.media_upload(filename='/home/XXXXXXXXXXXXXXX/graph.png') client.create_tweet(text=content,media_ids=[media.media_id])
ここでも、tweepyのバージョンが新しいものでないとtweepy.Clientのところで下記のエラーが出ます。
Attributeerror:module 'tweepy' has no attribute 'Client'
インストールしたtweepyが正しく読み込まれているか確認する必要があります。古いバージョンのtweepyがインポートされていることがあるようです。パスを確認にする必要があります。
CRONTABの設定
CRONTABを書き換えて終了と思っていたのですが、ここで思わぬ落とし穴がありました。
2 3,6,9,12,15,18,21 * * * sudo python3 /home/XXXXXXXXX/line_twitter_send4.py 55 23 * * * sudo python3 /home/XXXXXXXXX/line_twitter_send4.py
エラーがでるのです。 Attributeerror:module 'tweepy' has no attribute 'Client' いままでエラーがでることはなかったのに・・・。すこし途方に暮れました。 Thonny Python IDEでは、問題なく作動するのですが、ターミナルからはエラーがでます。 そこでターミナルからpython3を起動して
import sys print(sys.path)
次に管理者権限でパイソンを起動して sudo python3
import sys print(sys.path)
表示しされるパスを比較すると一部異なっていることがわかりました。新しくインストールしたtweepyにパスが通っていません。
結局、管理者権限で実行するのをやめて、crontabを以下のように書き換えました。
2 3,6,9,12,15,18,21 * * * python3 /home/XXXXXXXXX/line_twitter_send4.py 55 23 * * * python3 /home/XXXXXXXXX/line_twitter_send4.py
恥ずかしながら、このことに気づくのに一晩かかりました。久しぶりの貫徹でした。
ツイッターが安定してツィートできるようになったら、このWEBサイトのサイドバーのツイッタの表示も復活しました。
TwitterからXへ
突如、TwitterからXへ、アプリの名称が変更されたようです。Xになっても今のところ運用に支障はありません。(いろいろ勝手に変えなで)