久しぶりにTwitter触って、自分のアカウントに自動でツイートをPOSTする処理作ろうとしたら思いがけずはまりポイントが多かったので備忘録です。
手順1:Twitterアカウント作成する
普通のユーザのアカウント作成手順でOK。
電話番号で登録できるようになっていたりと色々昔と変わっていて、多少ドキドキする。
手順2:APIの使用申請をする
去年あたりから使用するために申請が必要になったそうで…
[Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ](Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ)
を参照させていただいてクリア。
申請ではねられないために、真面目な人に見えるよう使用目的を多少盛り気味に頑張って書いたんですが(文字数のボーダーライン超えるためにわざわざ迂遠な言い回し使うとか姑息な手段まで駆使)、申請した次の瞬間承認メールが飛んできて拍子抜け。
内容をチェックしているとしても多分絶対人力じゃなさそう。
手順3:アプリを作成し、認証キーを発行
べつにアプリを作るわけじゃないんだが…と不安になるのですが、認証キーの発行のためには必要なのでおそるおそる Create New App
ボタンをクリックしてアプリを作成し認証キーを発行。
以下のページが参考になるかと。
※上記ページで、アクセストークンについて「プログラミングなしで取得する」の手順が実行できればOK。
手順4:投稿用のAPIを呼ぶ(Python使用)
公式ドキュメントのサンプルコードを参考に、最終的にはこんな感じ。
def tweet(text):
url = "https://api.twitter.com/1.1/statuses/update.json?status={}".format(text)
consumer = oauth2.Consumer(key='手順3で取得できるConsumer API keys の API key', secret='手順3で取得できるConsumer API keys の API secret key')
token = oauth2.Token(key='手順3で取得できるAccess token', secret='手順3で取得できるAccess token secret')
client = oauth2.Client(consumer, token)
resp, content = client.request( url, method="POST")
return content
tweet("test")
実はここが最大のハマりポイントでした。できあがったものはとても簡単だったのですが、簡単なのにというかそれゆえにというか、これについてさくっと解説しているようなページというのがなかなか見つかりませんでした。
そもそも、ツイートの投稿が「statuses/update」というパスなのがちょっと意外でそこにもしばらくはまっていたのですが、なによりもTwitterが公開している公式ドキュメントでも検索してヒットするページも 「第三者に認証させてそのユーザのアカウントに投稿する」サービスが前提という感じで、**シングルユーザで使いたいだけ、というのは、あまりに簡単すぎて逆にないがしろにされている感(※)**すらありました。(被害妄想中)
ともあれこれにてツイート成功です。
以上、お役に立ちましたら幸いです。
※余談
なおシングルユーザでのAPI使用がどれくらいないがしろにされているかといえば、Twitterが公開している公式ドキュメントのサンプルコードにシンタックスエラーが混入しているレベルです。
以下は上記ページのUsing Python-OAuth2 library
からコピペしたコードですが、引数post_body
あたりに注目してください。
def oauth_req(url, key, secret, http_method="GET", post_body=””, http_headers=None):
consumer = oauth2.Consumer(key=CONSUMER_KEY, secret=CONSUMER_SECRET)
token = oauth2.Token(key=key, secret=secret)
client = oauth2.Client(consumer, token)
resp, content = client.request( url, method=http_method, body=post_body, headers=http_headers )
return content
home_timeline = oauth_req( 'https://api.twitter.com/1.1/statuses/home_timeline.json', 'abcdefg', 'hijklmnop' )
もう泣いちゃうだろこんなの。