Twitter APIを触る 【Recent Search/Trends】/ dabbling with Twitter API 【Dart】
Twitter API
Twitter API docs -> https://developer.twitter.com/en/docs/twitter-api
あまり人気のないTwitter APIですが、触ってみようと思います。
今回は Recent Search/Trends の2つの機能です。
Twitter API key取得に関しては下記のブログを参考にしました。 意外とすんなり取得できたのでやってみてください!
Recent Search
- GET /2/tweets/search/recent
- cached_network_image
ニュースアプリとかで、【Twitterの反応】みたいなロジック、よく見ますよね? こんなの。
...... ところで、
みんなのガッキーがお嫁に行きましたね ;)
おめでとう!ガッキー!!!!!!!
Twitterキーワード検索のなんちゃってクライアントアプリみたいなものを作ります。
通常は
という流れだと思うのですが、今回はフロントでAPI叩いて整形しています。
センシティブなアカウントの情報を取得しようとすると、パラメータを設定しても、nullが帰ってくるようですね。;)
下記のようにほしいデータをクエリに仕込んでUriオブジェクトを作成します。ほしいデータはenumでまとめました。
userID、 tweetID、 名前、ユーザーネーム(@以下)、Tweet本文、いいね数、リツイート数、リプライ数、アイコンのurlくらいあればそれっぽく作れるはずです。
final url = Uri.https( 'api.twitter.com', '/2/tweets/search/recent', <String, dynamic>{ 'query': searchWords, 'expansions': RecentSearchParams.authorId.asString, 'tweet.fields': [ RecentSearchParams.createdAt.asString, RecentSearchParams.text.asString, RecentSearchParams.publicMetrics.asString, ].join(','), 'user.fields': [ RecentSearchParams.id.asString, RecentSearchParams.name.asString, RecentSearchParams.userName.asString, RecentSearchParams.profileImageUrl.asString, ].join(','), 'start_time': yesterday, }, );
先程のUriと認証情報を仕込んでhttp GETします。
final result = await http.get( url, headers: {'Authorization': 'Bearer ${oauthToken.accessToken}'}, ).catchError((dynamic e) { print('ERROR:$e'); });
あとはかえってきたjsonをほぐして、欲しいデータを抜き出します。
いろいろいじったところ、ざっくり下記のようになりました。
Twitter Trends by Location and Webview
- GET trends/place
- flutter_web_view
Trendsのほうは設定できるパラメータはほとんどありません。
必須のパラメータはwoied
です。
- WOIED(Where On Earth IDentifier) 32ビットの一意の参照識別子、らしいです。
これで地域を指定します。 Recent Search 同様にUriオブジェクトを作成します。パラメータに受け取ったwoiedをあてます。
final url = Uri.https( 'api.twitter.com', '/1.1/trends/place.json', <String, dynamic>{ 'id': woied, }, );
Trends画面の流れとしては、地域を選択して、上位50のトレンドを取得、タップするとそのトレンド検索の画面(webview)に移行します。
Trendsのほうはこんなかんじで、地域選択してトレンドをタップするとwebview画面に移行します。 webview機能はそこまで充実していない感じですが、表示するだけとか、表示してひと手間とかだったら、さっくりいけそうな感じはしますね :)
以上の内容はGitHubに公開してあります。:)