15
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TwitterでAPIを使って自分のアカウントに投稿する

Last updated at Posted at 2019-12-15

久しぶりにTwitter触って、自分のアカウントに自動でツイートをPOSTする処理作ろうとしたら思いがけずはまりポイントが多かったので備忘録です。

手順1:Twitterアカウント作成する

普通のユーザのアカウント作成手順でOK。

電話番号で登録できるようになっていたりと色々昔と変わっていて、多少ドキドキする。

手順2:APIの使用申請をする

去年あたりから使用するために申請が必要になったそうで…

[Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ](Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ)

を参照させていただいてクリア。

申請ではねられないために、真面目な人に見えるよう使用目的を多少盛り気味に頑張って書いたんですが(文字数のボーダーライン超えるためにわざわざ迂遠な言い回し使うとか姑息な手段まで駆使)、申請した次の瞬間承認メールが飛んできて拍子抜け。
内容をチェックしているとしても多分絶対人力じゃなさそう。

手順3:アプリを作成し、認証キーを発行

べつにアプリを作るわけじゃないんだが…と不安になるのですが、認証キーの発行のためには必要なのでおそるおそる Create New App ボタンをクリックしてアプリを作成し認証キーを発行。
以下のページが参考になるかと。

Twitter REST APIの使い方

※上記ページで、アクセストークンについて「プログラミングなしで取得する」の手順が実行できればOK。

手順4:投稿用のAPIを呼ぶ(Python使用)

公式ドキュメントのサンプルコードを参考に、最終的にはこんな感じ。

tweet.py
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' )

もう泣いちゃうだろこんなの。

15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?