見出し画像

古いの使ってて勝手に勘違いしていた話。

技術っぽい内容がメインの記事になります。


定期的に動かしているプログラムがあります。

記事の中では何回か書いていますが、note で書いた記事の内容を、はてなブログに同期して、個人的なデータベースに書き込んで、それからTwitter や マストドンに「こんな記事書いたよ!」と自動投稿させています。

詳細は以下ご参照。
https://note.com/furokun/m/md1994df308b3


で、そのプログラムが、あるときエラーになっていました。ログを確認するとこのようなメッセージが出ていました。


正直「あー、またTwitterが仕様変えてきたのかなぁ」なんて思っていたのですが、少し調べたらそうではないようでした。疑っちゃってすみません。

原因は、そのプログラム内で使用している方法がどうやら古いものであることが判明。

このプログラム内で使っていたのは、v1.1 というのものでしたが、それは現在制限されてしまっていて、本来なら v2 というものを使わなくてはならなかったと。

Twitter の開発者向けポータルを見ると、自動投稿のプログラム(プロジェクト)が、いつの間にやらこんなんになってました。

「LIMITED」って書いてある。制限されてるってことらしい。


ログのほうに出ていたメッセージも、もう一回きちんと訳して読んでみます。

403 Forbidden
453 - You currently have access to a subset of Twitter API v2 endpoints and limited v1.1 endpoints (e.g. media post, oauth) only. If you need access to this endpoint, you may need a different access level. You can learn more here: https://developer.twitter.com/en/portal/product

403禁止します
453 - 現在、Twitter API v2 エンドポイントのサブセットと限定された v1.1 エンドポイント (メディア投稿、oauth など) のみにアクセスできます。このエンドポイントにアクセスする必要がある場合は、別のアクセス レベルが必要になる場合があります。詳細については、こちらをご覧ください: https://developer.twitter.com/en/portal/product

翻訳すると分かりにくいけどたしかに書いてある。


ここからちょっと込み入った話します。

解釈はちょっと難しいところがありますけど、要するに原因は、今回私がプログラム内では、 Python というプログラム言語を用いて「tweepy」というライブラリを使用していましたが、どうやらその時にツイートするメソッドが古かった模様。

コード載せると、今まではこう書いてました。

def post_tweet(consumer_key, consumer_secret, access_token, access_token_secret, msg):
  auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
  auth.set_access_token(access_token, access_token_secret)
  api = tweepy.API(auth)
  api.update_status(msg)


ですが、このapiクラス内の「update_status」メソッドが、内部的にはv1.1のエンドポイントを差していて、現在は(私の環境だと)もう使えない。なので、これを新たにv2のエンドポイントに対応したメソッドに書き直すことにします。

先に書いてしまうと、これです。

def post_tweet(ck, cs, at, ats, msg):
  client = tweepy.Client(consumer_key=ck, consumer_secret=cs, access_token=at, access_token_secret=ats)
  client.create_tweet(text=msg)

新しいほうは、clientクラス内の「create_tweet」メソッドで投稿します。

念のため、tweepyのソースを読んで、APIのリファレンスも突き合わせてみます。

左が「api.py」の「update_status」メソッド。
右が「client.py」の「create_tweet」メソッド。
Twitter の開発者向けポータルにあるマイグレーションの手引き
v1.1とv2の比較。


こう見比べると、新しいほうのメソッドは、たしかにエンドポイントがv2に対応しているので大丈夫そうです。

ただよくよくライブラリの説明を読むときちんと書いてあるんですよね。

v1.1のエンドポイントは「API」で、
v2のエンドポイントは「Client」ですよ、と。
https://docs.tweepy.org/en/stable/getting_started.html


どうにも抜けていましたね。恥ずかしながら。

何事も、可能ならよく確認してから使った方がいい。そう学びました。

ましてや、「どうせまたTwitter側で勝手に仕様を変えてAPI使えなくしたんでしょ」的な邪推をしてしまったりして、結局は自分の使っていた道具が間違っているというオチ。

いやほんと、お恥ずかしい限りです。やはり何事も落ち着いて目の前のものをよく確認してから使うに越したことは無いですね。そうしていれば突然「聞いてないよー」って言わなくて済むかも。そんなことを思いました。短いですが以上です。おしまい。

この記事が気に入ったらサポートをしてみませんか?