APIからツイートしたい
TwitterのAPIをつかってちょっと遊んでみたくなったのでやってみた.
やったことのまとめ
Twitterの開発者アカウントの利用申請をした- APIを利用するための
Twitter appを作成した - 公式のコマンドラインツール
twurlを使ってAPI経由でツイートした- ついでに
anyenvでRubyのセットアップをした
- ついでに
つかうもの
- macOS Mojave 10.14
- twurl
- https://github.com/twitter/twurl
- version 0.9.5
- 今回入れる
- jq
- https://github.com/stedolan/jq
- jq-1.6
- インストール済み
- 必須ではないがAPIレスポンスの整形に使用
- anyenv
- https://github.com/anyenv/anyenv
- anyenv 1.1.1
- インストール済み
- rbenv
- https://github.com/rbenv/rbenv
- rbenv 1.1.2-30-gc879cb0
- twurlのために今回入れる
- Twitterのアカウント
やったこと
開発者アカウントの利用申請
以前遊んだWikipediaのAPIとかは誰でも自由に利用できるけど,
TwitterのAPIを使うには事前に開発者アカウントの利用申請が必要になるらしいので実際にやってみる.
ブラウザでTwitterにログインした状態で
https://developer.twitter.com/ja/apply-for-access を開く.
開発者アカウントに申し込む に進む.

利用目的を聞かれるので, 適当なものを選択する.
今回は Exploring the API にチェックをつけて進む.

開発者権限を申請するアカウント(@uzimihsr)の情報を確認する.

住んでる国とTwitterからのメールで呼ばれたい名前?を設定して次に進む.

APIの使いみちを聞かれるので, 200文字以上の英語 で記入する.
自分の場合は
“趣味でのアプリに使用します. Linux上のコマンドラインツールからツイートの投稿, タイムラインの取得, ツイートの削除などを行う予定です. 今の所はTwitterのデータを分析して何かする予定はありません.”
的な文章を埋めた.

用途が以下のどれかにあたる場合はさらに詳細な情報を追加しなきゃいけないらしい.
Twitterのデータ解析を行う場合- ツイート, リツイート, いいね, フォロー, DMの機能を使用する場合
- ツイートや
Twitterコンテンツの集計情報をTwitter以外の場所で公開する場合 - 用途が政府機関に関係する場合
自分は2のケースに該当するので,
“curlやjqなどのLinux上のコマンドラインツールを使ってツイートの投稿, タイムラインの取得, ツイートの検索, いいねなどを試そうと思います.”
的な文章を埋めた.
用途について記入したら次に進む.

これまでの入力内容を確認して次に進む.

最後に利用規約を読んでチェックボックスにチェックを入れて, Submit Application を押す.

確認用メールを送った旨が表示される.

申請したアカウントに紐付いたメールアドレスにこんな感じのメールが来るので, Confirm your email を押す.

利用申請が完了したことを示す画面が開く.
完了までに時間がかかることもあるみたいだけど, 自分の場合は一瞬だった.
用途とかで書いた英文をGrammarlyで文法チェックしたおかげかも?

とりあえず, これでTwitterの開発者アカウントを使えるようになった.
appの作成
Twitter APIの機能を使うには, appを作成して認証用のconsumer keyとconsumer secretを作成する必要があるらしいのでやってみる.
先程の利用完了画面か,
https://developer.twitter.com/en/account/get-started
から Create an app に進む.

以下の必須項目を埋めて Create を押す.
| 必須項目 | 詳細 |
|---|---|
| App name | appの名前(適当につける) |
| Application description | appの説明 |
| Website URL | appに関連するウェブサイトのURL(自分が管理しているものが望ましい) |
| Tell us how this app will be used | appの用途( Twitterチームがチェックするのでちゃんと書く) |

利用規約的なやつの確認モーダルが表示されるのでちゃんと確認して Create する.

app(uzimihsr-twurl)が作成されて詳細画面が開くので, Keys and tokens に進む.

表示された API key(consumer key), API secret key(consumer secret)は
後ほど使用するのでメモしておく.

これでAPIを使うためのappの準備は完了.
twurlを使ってツイート
今回はcurlっぽくTwitter APIを叩くための公式のコマンドラインツールtwurlを使って実際にツイートしてみる.
まずはtwurlをgemでインストール…
しようとしたら権限エラーでコケた.
Macに最初から入ってるシステムのRubyだとうまく行かないみたい.
# twurlのインストール...に失敗
$ gem install twurl
Fetching: oauth-0.5.4.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
...
以下の手順でRubyのセットアップを行う.
anyenvを使ったRubyのセットアップ
Ruby全然使ったことないけどanyenvは神なので簡単にセットアップできる.
公式によると現在の安定版は 2.7.1 なのでこれを入れる.
# rbenvをインストール
$ anyenv install -l | grep rbenv
rbenv
$ anyenv install rbenv
...
Install rbenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.
$ exec $SHELL -l
# 動作確認
$ rbenv --version
rbenv 1.1.2-30-gc879cb0
# Ruby(2.7.1)をインストール
$ rbenv install -l | grep 2.7.1
2.7.1
$ rbenv install 2.7.1
$ rbenv versions
* system
2.7.1
# Rubyのバージョンを選択
$ rbenv global 2.7.1
$ exec $SHELL -l
$ rbenv versions
system
* 2.7.1 (set by /Users/uzimihsr/.anyenv/envs/rbenv/version)
# 動作確認
$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin18]
$ gem -v
3.1.2
再度twurlをインストール.
今度は普通にできた.
# twurlのインストール
$ gem install twurl
...
Done installing documentation for oauth, twurl after 1 seconds
2 gems installed
# 動作確認
$ twurl -v
0.9.5
インストールができたのでさっそく使ってみる.
まずは手元のtwurlと先ほど作成したapp, そしてappを使用するアカウントを紐付ける.
twurl authorizeの引数に先程メモしたappのconsumer keyとconsumer secretを渡すと,
認証用のURLが表示される.
# 認証画面を開く
$ key='keykeykeykeykeykeykeykey' # consumer key
$ secret='secretsecretsecretsecret' # consumer secret
$ twurl authorize --consumer-key $key --consumer-secret $secret
Go to https://api.twitter.com/oauth/authorize?oauth_consumer_key=keykeykeykeykeykeykeykey...&oauth_version=1.0 and paste in the supplied PIN
# メッセージに従ってURLをブラウザで開く
指定されたURLをブラウザで開くとアカウントにappを連携させるための確認画面が表示されるので,
Authorize app を選択して自分のアカウントとappを連携させる.
連携に成功すると7桁のPINが表示されるので,
これをtwurlのメッセージに従って入力する.

# 先程のつづき
$ twurl authorize --consumer-key $key --consumer-secret $secret
Go to https://api.twitter.com/oauth/authorize?oauth_consumer_key=keykeykeykeykeykeykeykey...&oauth_version=1.0 and paste in the supplied PIN
1234567 # PINを入力
Authorization successful
# 認証に成功したアカウントの確認
$ twurl accounts
uzimihsr
keykeykeykeykeykeykeykey (default)
これでtwurlと自分のアカウントが紐付いた.
次にツイート投稿APIを叩いてツイートしてみる.
twurlを使ってhttps://api.twitter.com/1.1/hoge/huga.json
のようなエンドポイントを叩く場合は,twurl /1.1/hoge/huga.jsonのようにすればいいみたい.
# APIからツイートしてみる
# レスポンスがJSONで返ってくるのでjqでパースする
$ twurl -X POST -d 'status=そとちゃんかわいい' /1.1/statuses/update.json | jq
{
"created_at": "Mon May 18 10:09:54 +0000 2020",
"id": 1262324524051075000,
"id_str": "1262324524051075074",
"text": "そとちゃんかわいい",
"truncated": false,
"entities": {
"hashtags": [],
"symbols": [],
"user_mentions": [],
"urls": []
},
"source": "<a href=\"https://uzimihsr.github.io/\" rel=\"nofollow\">uzimihsr-twurl</a>",
"in_reply_to_status_id": null,
"in_reply_to_status_id_str": null,
"in_reply_to_user_id": null,
"in_reply_to_user_id_str": null,
"in_reply_to_screen_name": null,
"user": {
"id": 1146420174272073700,
"id_str": "1146420174272073733",
"name": "ずみし",
"screen_name": "uzimihsr",
"location": "日本 東京",
"description": "超絶かわいい元保護猫そとちゃんのしもべです",
"url": "https://t.co/mM0q9F0x2t",
"entities": {
"url": {
"urls": [
{
"url": "https://t.co/mM0q9F0x2t",
"expanded_url": "https://instagram.com/uzimihsr",
"display_url": "instagram.com/uzimihsr",
"indices": [
0,
23
]
}
]
},
"description": {
"urls": []
}
},
"protected": false,
"followers_count": 35,
"friends_count": 52,
"listed_count": 0,
"created_at": "Wed Jul 03 14:07:23 +0000 2019",
"favourites_count": 32,
"utc_offset": null,
"time_zone": null,
"geo_enabled": true,
"verified": false,
"statuses_count": 227,
"lang": null,
"contributors_enabled": false,
"is_translator": false,
"is_translation_enabled": false,
"profile_background_color": "F5F8FA",
"profile_background_image_url": null,
"profile_background_image_url_https": null,
"profile_background_tile": false,
"profile_image_url": "http://pbs.twimg.com/profile_images/1220189466368692224/VkTo35n4_normal.jpg",
"profile_image_url_https": "https://pbs.twimg.com/profile_images/1220189466368692224/VkTo35n4_normal.jpg",
"profile_banner_url": "https://pbs.twimg.com/profile_banners/1146420174272073733/1584881012",
"profile_link_color": "1DA1F2",
"profile_sidebar_border_color": "C0DEED",
"profile_sidebar_fill_color": "DDEEF6",
"profile_text_color": "333333",
"profile_use_background_image": true,
"has_extended_profile": false,
"default_profile": true,
"default_profile_image": false,
"following": false,
"follow_request_sent": false,
"notifications": false,
"translator_type": "none"
},
"geo": null,
"coordinates": null,
"place": null,
"contributors": null,
"is_quote_status": false,
"retweet_count": 0,
"favorite_count": 0,
"favorited": false,
"retweeted": false,
"lang": "ja"
}
実際に投稿されたツイートがこちら.
連携したapp(uzimihsr-twurl)から投稿されている.
そとちゃんかわいい
— ずみし (@uzimihsr) May 18, 2020
https://twitter.com/uzimihsr/status/1262324524051075074
やったぜ.
コマンドラインからTwitter APIを使ってツイートすることができた.
おわり
以上の手順で開発者アカウントの利用申請からTwitter APIを用いたツイートまでをやってみた.Twitter大好き芸人なのでtwurlのコード読んだりAPIリファレンス読んだりしていろいろ遊んでみたい.
おまけ

