雑学

どーも!

たかぽんです!

今回はtwitterのAPIを使ってみようかな...と思うんですが、以前より規制が厳しくなっているらしい...?です。

筆者は以前使ったことないのでこれが初めてなんですが、簡単に遊んでみようと思います...!

今回は本当に簡単なところだけやってみようかな...と思っているので、TwitterのAPIを使えるように登録後、CUI(ターミナル)でそのAPIを実行して、ツイートの取得程度を試してみようと思います!

将来的にはSwiftで書いたiosアプリやWEBアプリで使ってみる...ということもしてみたいなぁと思います。

それでは、いってみましょう!

Twitter APIとは・・・?

さて、それではtwitterのAPIってなんでしょうか...?

簡単にお伝えするとtwitterの基本的な機能(ツイートやリツイート、他人のツイート取得等)を使えるようにしてくれるやつ...です!

APIについては以下の記事を参考にしてみてください。

では、APIの中でも特にTwitter APIがどんなものかだけ確認しておこうと思います。

まず、使うためには開発者登録が必要です。

これはなぜか...?というと、僕自身twitter社で働いていないので、推測にはなりますが...

匿名の第三者が、twitter社の把握していないことにAPIを使えるようにしてしまうと、twitter社の不利益になることに使われたりする可能性があります。

また、あまりにもAPiをたくさん利用されると、そのリクエストを処理するため、twitter側のインフラコストがかかってしまいます。

また、中にはAPIを使えるようにするためにエンタープライズ契約(企業向けの高いプラン)の内容の一つとして追加しているものもあります。

実際にtwitterも有料版のものもあるようです。(premium APIというらしい。)

そういったことをtwitter側で管理する子ができるよう、あらかじめ開発者登録をしているのかなぁ...。と。

また、サービスごとにそのAPIに必要な"キー"を生成しておくことでより、サービスごとにAPIでできることをセキュアに管理できる...といった面もあるかもしれません。

大抵の企業が出しているAPIはこういった事前登録が必要で、そのAPIを使うためのキーも必要になることが多いです。

APIの制限は以下の通りのようです。

  • DMは一日1000件まで
  • ツイートは一日2400件まで
  • メールアドレスの変更は一日4回まで
  • フォローは一日400回まで
  • ただし、フォローは1アカウントで5000件超えると別途制限かかる可能性有り

通常利用でも上記のような形らしいですが、APIによる操作も同じく影響を受けるようです。

細かくは理解できていないんですが...上記の内容だと、API利用自体の制限はなく、アカウントごとの制限のみで、その制限の限度はAPIでも影響を受ける...といった形かな...?

2アカウントであればAPIでも2000件のDMが可能かも・・・?ですね。

ちょっと詳しい内容は検証してみた方が良さそうですね...

ざっくりは理解できたので、早速登録していきます!

Twitter API の登録をする

では、Twitter APIが使えるように準備をしていきましょう!

まずは以下の画面から登録をしていきます。

上記の画面にログインするとアプリの作成が可能になります。

Create an appから、Applyで開発者アカウントを適用します。

すると、以下のようにどんなものを使いたいか選択できる画面が出てきます。

上記ではどういった使い方をするんですか〜?という感じだったので、"Exploring the API"を選択しました。

これは、APIを簡単に使ってみるだけで、どんなことができるのか確認したり、ちょっと勉強してみるために使う場合の選択しです。

本格的にサービスとして使う場合は"Building consumer products"等になるかと思いますが、個人利用ならとりあえず同じ形にしていただいて大丈夫かと思います。

登録ができたら以下のような画面になるかと思います。

ここではメールアドレス等のアカウント情報が正しいかを確認されます。

最初にログインをしてもらったアカウントが出てきているはずですが、そのアカウントが開発者登録として紐付けされます。

下の方に行くと、どこ住み?なんて呼んでほしい?APIについてのメールいる?と聞かれるので、それぞれ適当に答えておきましょう。

入力したらNextを。

次は、APIやtwitterで取得したデータをなんのために使うのか...?

記述式で、英語で書いてくださいね〜と書かれています。

"In your words"にはAPI利用の目的の概要的なものを200字以上で記述します。

その後の"The specifics"では、より詳細を必要そうなら記述、不要なら記述なくてもOKという感じのようです。

内訳をみていくと...

"Are you planning to analyze Twitter data?"はツイッターのツイート情報などを分析するために利用するか?

ですが、ツイートはあらゆるユーザーの本音が出やすい場所で、そこからユーザーニーズなどを分析する...といった用途にAPIを使うか?といったニュアンスなのかな?と思っています。

今回は使わないので"No"に。(いつかはやってみたいですけどね...!)

使う場合はその理由を詳細に100文字以上書く必要がありそうです。

そして次が"Will your app use Tweet, Retweet, like, follow, or Direct Message functionality?"ですが、これはあなたのアプリでツイートやリツイート、フォローやDMを使いますか?という質問です。

今回は使う予定なので、"Yes"にして、適当に理由を入れておきます。

そして次が"Do you plan to display Tweets or aggregate data about Twitter content outside of Twitter?"ですが、ツイートをtwitter意外で表示することがありますか?といった内容ですね。

今回はターミナルでの表示や、将来的にiosアプリなどで表示しようと思うので、"yes"にしておきます。

ただし、webアプリでも、iosアプリでもビジネスとして使う予定はなく、実際にリリースするサービスには使用しない旨も添えておこうと思います。(あくまで検証用なので)

最後が"Will your Product, Service or analysis make Twitter content or derived information available to a goverment entity"ですが、こちらは基本的には関係ないので"No"でOKです。

一通りできたら、Nextを。問題があると押せないので見直しましょう(大体は"NO"のし忘れや文字数足りていないとかだと思います..!

ちなみに、サービスとしてリリースするつもりのない筆者の場合は以下のように回答を書きました。

ご参考程度にどうぞ。(全く一緒だともしかしたらアウトになるかもしれないので気をつけてください。)

## In your words
i want to use twitter api for my swift learning.
i won't release ios app to the appStore, just create an app localy, 
and only use the app with my phone to understands what i can do with twitter API.
i'll use it for WEB app when i finished try swift.
but i wont use it for buisiness.

#### ざっくり和訳
sfiftの学習のためにtwitterAPIを使おうと思っています。
iosアプリをリリースするつもりはなく、手元の自分の端末でのみ動作確認をして、APIでどんなことができるのかを理解するために使用する予定です。
また、swiftの学習が終わったらWebAppで使うかもしれませんが、ビジネスのためには使いません。

## Will your app use Tweet, Retweet, like, follow, or Direct Message functionality?
As i wrote before, use it for learning how to use the Twitter API, and to understand what i can do with the Twitter API.

#### ざっくり和訳
先程書いた通り、TwitterAPIの使い方や、TwitterAPIでどんなことができるのかを学ぶため、利用するつもりです。

## Do you plan to display Tweets or aggregate data about Twitter content outside of Twitter?
Yes, but display the results only localy, and just to check the API if its correctly executed.
i wont display info for other porpose.

#### ざっくり和訳
はい、公式のtwitter以外で表示する機会はありますが、あくまで自分の手元での確認と、APIが正しく実行されたかどうかを確認するためだけに利用しようと思っています。
それ以外の用途にツイートやデータの表示を行うつもりはありません。

ざっくり伝えたかった内容はそれぞれ下に"ざっくり和訳"として書いています。

英文法が正しいかどうかなんて知らないです...!が、一応通りました。

他のものに関しては全て"no"で回答の必要はありません。(APIの利用用途によりますが...)

上記が登録できたら次へ。

次は確認画面です。

問題なければそのまま次へ。

次はいつものです。

ざっくりみて問題なさそうなら"accept"にチェックをつけて次へ行きましょう。

一通り問題なければ...

上記のように確認ようのメールが送られるかと思います。

"Confirm your emal"を選択して登録をすれば完了です!

上記で確認んをしたら...以下のような画面が出てくると思います。

このAPIを使用するためのアプリ名などを入れれば良さそうです。

上記見たらわかると思いますが、すでに使われている場合は使えないようですね...

上記で被らない名前をちゃんとつけることができたら次の画面は以下のような画面が出てきます。

ここはとても大事です。

"Here are your keys"というところに3つ、"API key", "API secret key", "Bearer token"があります。

これは、そのAPIを使う上でとても大切な情報なので、大切に保管して、誰にも教えないようにしましょう。

今後、自分の登録した情報を使ってAPIを叩く際、これらのキーが必要になります。

もし他人がこれらのキーを知ってしまった場合、即座にこれらのキー情報を再生成して、他人が使えないようにする必要がありますので、大切に...大切に保管しましょう...!

ちゃんと保管したら、"Test an endpoint"を選択します。

すると、以下のようにちゃんと保存した〜もう二度と確認できないよ〜?って聞かれます。

スクリーンショットとるなり、別途自分のメモをとるなりしてあれば大丈夫なので、問題ないなら"Yes, I saved them"を選択します。

すると、お試しの画面が出てきます。

以下の"select a sample Tweet"と書かれている項目から適当なものを選択します。(今回はjackさんのツイートを選択しました。)

すると、上記のように"Request"のところに以下のような文章が出てくると思います。

curl -X GET -H "Authorization: Bearer <BEARER TOKEN>" "https://api.twitter.com/2/tweets/20"

これが、curlコマンドを利用してAPIを叩いているのですが、今回はcurlコマンドに関する解説は無しでいきます。

簡単にお伝えすると、上記のコマンドをMacのターミナルで実行をすればjackさんのツイートを取得することができます。

ただ、一点だけ、上記の"<BEARER TOKEN>"の部分を先程保存した"Bearer token"に書き換えて実行をします。

これは、Bearer Tokenという認証に使用するトークンを利用して、リクエストの認証を行うための情報です。

GETリクエストを"https://api.twitter.com/2/tweets/20"というエンドポイントに対して行うことで、先程のツイートの情報が得られるわけです。

ただし、誰でもAPIを叩けるわけではないので、先程の登録したAPIの認証情報としてトークンも付与してあげれば叩けるんですね。

上記の例のまま実行したのと、Bearer tokenを付与して実行した場合を載せておきます。

// 例のまま実行
taka@Taka ~ % curl -X GET -H "Authorization: Bearer <BEARER TOKEN>" "https://api.twitter.com/2/tweets/20"
{"title":"Unauthorized","type":"about:blank","status":401,"detail":"Unauthorized"}%

// ちゃんとtokenを設定した後に実行(tokenは隠蔽しています)
taka@Taka ~ % curl -X GET -H "Authorization: Bearer *************************" "https://api.twitter.com/2/tweets/20"
{"data":{"id":"20","text":"just setting up my twttr"}}%

一つ目に実行しているのは"<BEARER TOKEN>"のままにしていますが、これだとcurlを実行した後..."Unauthorized"というものが帰ってきているのがわかるかと思います。

つまり、認証ができていないわけです。

また、"statsu"も"401"になっており、それからも"有効な認証資格が不足している"ということがわかりますね。

そてれに対して、その後のcurlコマンドを見てみましょう。

今回は僕のbearer tokenは皆さんに知られてはいけないので、"*****"と置き換えていますが、ちゃんと設定をして実行をすると....

以下が返ってきていることがわかります。

{"data":{"id":"20","text":"just setting up my twttr"}}

ちょっとみやすくすると...

{
  "data":{
      "id":"20",
      "text":"just setting up my twttr"
  }
}

このように"just setting up my twttr"というtextが入ってきていますね。

先程例として選択したツイートをみてみると...?

ツイートの中身がtextとして入っているようですね!

では少しだけリクエストを変えてみます...!

リクエストの際のエンドポイントを'https://api.twitter.com/2/tweets/220'に変えて実行してみると...?


taka@Taka ~ % curl -X GET -H "Authorization: Bearer *************************" "https://api.twitter.com/2/tweets/220"
{"data":{"id":"220","text":"thinking about podzinger. no, my mother. the music in my headphones. wait - rabble's voice."}}%

違うツイートの情報が取得できていそうですね...!

これでtwitterのAPIを使えることが確認できました!

まとめ

さて、今回はTwitterのAPIの登録を行いました。

基本的にはAPIは登録無しで使えるものもあったりしますが、登録ありの場合も結構あります。

実際に自分で作っているサービス内で外部サービスと連携して色々行ったりする場合は必要になるので、是非いろんなサービスで提供されているAPIでどんなことができるんだろう?とアンテナを貼っておくのは大切ですね!

それでわ!

おすすめの記事