宮沢賢治のオールナイトニッポン

アプリ開発/プログラミング学習における厄介事を垂れ流します。flutter/dart/python...

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取得に関しては下記のブログを参考にしました。 意外とすんなり取得できたのでやってみてください!

www.itti.jp

Recent Search

ニュースアプリとかで、【Twitterの反応】みたいなロジック、よく見ますよね? こんなの。

f:id:teruponn56:20210522213926j:plain f:id:teruponn56:20210522213909j:plain

...... ところで、

みんなのガッキーがお嫁に行きましたね ;)

おめでとう!ガッキー!!!!!!!

Twitterキーワード検索のなんちゃってクライアントアプリみたいなものを作ります。

通常は

  • バックエンドでAPI叩いてデータをフロント用に整形
  • -> DB保存
  • -> リクエストを受け取りフロントに流す
  • -> 時間経過トリガーとかでバックエンド側で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をほぐして、欲しいデータを抜き出します。

いろいろいじったところ、ざっくり下記のようになりました。

f:id:teruponn56:20210522214028g:plain

Twitter Trends by Location and Webview

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機能はそこまで充実していない感じですが、表示するだけとか、表示してひと手間とかだったら、さっくりいけそうな感じはしますね :)

f:id:teruponn56:20210522214205g:plain

以上の内容はGitHubに公開してあります。:)

これから Twitter APIのマイクロプロジェクト含め、更新していくので見てやってください。:)

github.com