🧵

【Dart/Flutter】twitter_api_v2でツイートにスレッドを簡単に作成する方法

2022/08/22に公開

概要

Twitterツイートは制限文字数内の短い文章を投稿できることが大きな特徴ですが、時としては長文を投稿したい場面もあります。そういった場合には、特定のツイートに紐付けて複数のツイートを追加できるスレッドが便利です。

例えば、以下のツイートがスレッドの機能を使用しています。

https://twitter.com/_kato_shinya/status/1561165898718752769

このスレッドの機能を使用することで、一つのツイートでは表現できない表現豊かなコンテンツを作成することができます。そこで、twitter_api_v2でどのようにこのツイートのスレッドを作成できるのかを簡単に紹介します。

twitter_api_v2とは

twitter_api_v2とは、DartFlutterで使用できるTwitter API v2.0をラッピングしたライブラリです。全てのエンドポイントやリクエストパラメータをサポートしているだけではなく、直感的なインターフェースや自動リトライなど、DartとFlutterでTwitter API v2.0を使用した開発を強力にサポートします。

https://github.com/twitter-dart/twitter-api-v2

https://pub.dev/packages/twitter_api_v2

このライブラリについては以前からいくつか記事を書いていますので、以下のリンクを参考にしてください。

https://zenn.dev/kato_shinya/articles/released-twitter-api-v2-dart

https://zenn.dev/kato_shinya/articles/twitter-api-v2-is-listed-in-twitter-official

ライブラリのインストール

まずは、DartまたはFlutterでお馴染みの以下のコマンドを実行してライブラリをインストールします。

Dartの場合:

dart pub add twitter_api_v2

Flutterの場合:

flutter pub add twitter_api_v2

また、必要に応じて以下のコマンドを実行しましょう。

Dartの場合:

dart pub get

Flutterの場合:

flutter pub get

実装

そして、結論から言うと以下の実装で特定のツイートにスレッドを作成できます。

import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;

Future<void> main() async {
  final twitter = v2.TwitterApi(bearerToken: '認証トークンを入力してください。');

  try {
    await twitter.tweets.createTweet(
      text: 'スレッド作成!',

      // 自分で作成したツイートにリプライをすることでスレッドを作成する。
      reply: v2.TweetReplyParam(
        inReplyToTweetId: 'スレッドを作成したいツイートのID',
      ),
    );
  } on v2.TwitterException catch (e) {
    print(e);
  }
}

上記の実装を見ていただければわかりますが、ツイートのスレッドを作成することはつまり自分が作成したツイートにリプライをすることに他なりません。そのため、twitter_api_v2を使用して特定のツイートにスレッドを作成したい場合は、ツイートを作成するcreateTweetメソッドのreply引数を利用するだけで大丈夫です。とても簡単ですね。

応用

実際にプログラムから操作する場合は、createTweetメソッドを使用して特定のツイートを作成してから、その作成したツイートに紐付けてスレッドを作成するという場面が考えられます。そのユースケースに対応するためには、以下のように実装するとうまく作れます。

import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;

Future<void> main() async {
  final twitter = v2.TwitterApi(bearerToken: '認証トークンを入力してください。');

  try {
    final parentTweet = await twitter.tweets.createTweet(
      text: 'このツイートにスレッドを作成します。',
    );

    await twitter.tweets.createTweet(
      text: 'スレッド作成!',

      // 自分で作成したツイートにリプライをすることでスレッドを作成する。
      reply: v2.TweetReplyParam(
        inReplyToTweetId: parentTweet.data.id,
      ),
    );
  } on v2.TwitterException catch (e) {
    print(e);
  }
}

または、作成したいスレッドが複数あれば以下のように実装できます。

ただし、複数のスレッドを作成する場合には、全てのツイートを一番最初に作成したツイートのIDに紐付けるのではなく、ツイートを紐付けたい一番新しいツイートのIDinReplyToTweetIdに指定する必要がある点に注意してください。例えば、次の例のように変数parentTweetIdなどを使用してスレッドの親となるツイートIDを更新する必要があります。

import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;

Future<void> main() async {
  final twitter = v2.TwitterApi(bearerToken: '認証トークンを入力してください。');

  try {
    final rootTweet = await twitter.tweets.createTweet(
      text: 'このツイートにスレッドを作成します。',
    );

    final contents = [
      'コンテンツ1',
      'コンテンツ2',
      'コンテンツ3',
    ];

    // スレッドを作成する親のツイートIDを変数として保持します。
    var parentTweetId = rootTweet.data.id;

    for (final content in contents) {
      final threadTweet = await twitter.tweets.createTweet(
        text: content,
        reply: v2.TweetReplyParam(
          inReplyToTweetId: parentTweetId,
        ),
      );

      // 作成したツイートを新しい親ツイートとして更新します。
      parentTweetId = threadTweet.data.id;
    }
  } on v2.TwitterException catch (e) {
    print(e);
  }
}

まとめ

この記事ではtwitter_api_v2を使用してツイートにスレッドを簡単に作成する方法を紹介しました。ツイートにスレッドを作成する機能はとても便利ですので、ぜひご活用ください。

また、twitter_api_v2は他にも多くのエンドポイントをサポートしていますので、Twitter API v2.0を使用したアプリケーションを作成する際にはぜひ使用してください。

貢献者の募集

twitter_api_v2オープンソースですのでどのような方でも開発に貢献することができます。開発リポジトリの公用語は英語にしていますが、日本人の方々も大歓迎ですのでお気軽にIssuePull Requestを作成してください。

また、このライブラリが役に立った場合にGitHub の開発リポジトリスターを付けることや、Pub.devいいねを付けることもよろしくお願いします。これはtwitter_api_v2の開発コミュニティを活性化するためにとても大きな意味があります。

もしなにか疑問がある場合は開発リポジトリのディスカッションにでもスレッドを立てていただければと思います。

https://github.com/twitter-dart/twitter-api-v2

https://pub.dev/packages/twitter_api_v2

スポンサーの募集

オープンソース開発をサポートしてくださるスポンサーを募集しています。少額($1)からの寄付も可能ですので、以下のリンクから是非ご支援ください。

https://github.com/sponsors/myconsciousness

また、この記事にバッジを贈っていただくことでも支援は可能です。

GitHubで編集を提案

Discussion