GAS

【GAS】Twitter API基本の使い方8選|サンプルコードあり

thumbnail
n-mukineer
にゃーミ
にゃーミ

GASを使ってTwitter Botをつくりたいニャ。Twitter APIっていうのがあるみたいだけど、どうやって使ったらいいニャ?

本記事はこのような方向けに、以下の8個のTwitter APIの使い方を説明します。

この記事でわかるTwitter APIの使い方
  1. ツイート検索(キーワード指定)
  2. 特定のユーザーのフォロワー一覧取得、フォロワー数取得
  3. 特定のユーザーのフォロー一覧取得、フォロー数取得
  4. 特定のユーザーが最近「いいね」したツイート一覧取得
  5. 特定のユーザーの最新ツイート一覧取得
  6. いいねする
  7. リツイートする
  8. フォローする

Twitter APIとGASの準備

実際にコードを記述していく前に、GASとTwitter APIを使える状態にする必要があります。以前の記事で詳しく解説していますので、以下記事をご確認いただけますと幸いです。

あわせて読みたい
【無料】GASを使い始めるための3ステップ【簡単】
【無料】GASを使い始めるための3ステップ【簡単】
あわせて読みたい
【簡単】GASでTwitter APIを使えるようにする方法【3つの手順】
【簡単】GASでTwitter APIを使えるようにする方法【3つの手順】

以下にGASでTwitter API操作の基本編と応用編を記載しています。本ブログでは、GASのTwitterライブラリ「TwitterWebService」を使って操作する方法を紹介します。

GASでTwitter API操作 基本8選

ここから、GASでTwitter API操作をする方法を、サンプルコードとともに紹介していきます。なお、Twitter APIは v2を使います。

APIのエンドポイント(URL)は、ベースURLと機能ごとのURLを合わせたものになります。APIは、使いたい機能ごとにメソッド(POST/GETなど)、エンドポイントが指定されます。

ベースURLは全API共通で、以下となっています。

https://api.twitter.com

実際にAPIにアクセスする際のURLは、上記のベースURLの後に、機能ごとのURLをくっつけて実行します。例えば、「ツイート検索」のURLは、/2/tweets/search/recentですので、

https://api.twitter.com/2/tweets/search/recent

というようになります。

より高度な使い方を知りたい場合は、公式APIリファレンスを読むとより細かいオプション指定の仕方が載っていますので、そちらも参照してもらえればと思います。

1. ツイート検索(キーワード指定)

概要

  • 直近7日間全ユーザーのツイートの中から、queryで指定した条件にマッチするツイートを取得します。

公式APIリファレンス

メソッド

  • GET

エンドポイント

  • /2/tweets/search/recent

Rate Limit

  • 450リクエスト/15分

パラメータ

  • 必須パラメータ:query
    • キーワード検索を行うには、クエリを指定する必要があります。クエリの使い方については、公式のクエリ作成ガイドを参照すると詳細がわかります。ここでは、よく使うクエリの指定方法について以下に紹介します。
      • 検索キーワード:「#影山寝ろ」「こんにちは」など指定します。
      • 言語:日本語の場合であれば「lang:ja」という形で指定します。
      • リツイートを除く場合:「-is:retweet」と指定します。(-(マイナス)をつけることで、”検索の対象から除外”ということを意味します。)
      • メンションを含むツイートを除く場合:「-has:mentions」と指定します。
    • 以上の例で指定する場合のクエリは以下の手順となります。
      • 半角スペースでつなげる⇒”#影山寝ろ -is:retweet -has:mentions lang:ja
      • URIエンコードする(URIエンコードとは、簡単に言うと「使えない文字を使える文字に変換する」処理です)⇒”%23%E5%BD%B1%E5%B1%B1%E5%AF%9D%E3%82%8D%20-is%3Aretweet%20-has%3Amentions%20lang%3Aja
  • 任意パラメータ:tweet.fileds(取得したいツイートの情報)以下のような内容を、「,」(カンマ)でつないで指定します。
    • author_id: ツイートしたユーザーのIDです。
    • id: ツイートのIDです。
    • text: ツイートの内容を表すテキストです。
    • created_at: ツイート日時です。
  • 任意パラメータ:max_results(取得したいツイートの数)
    • 10~100の間で指定します。何も指定しない場合、10となります。
  • その他の任意パラメータもさまざまありますが、上記の2つを押さえておけば基本的には問題なさそうです。

サンプルコード

const API2_BASE_URL = "https://api.twitter.com";
const URL_GET_SEARCH = "/2/tweets/search/recent";
const MAX_RESULTS = 100;

const twitter = TwitterWebService.getInstance(TWITTER_API_KEY, TWITTER_API_SECRET);

// 実行する関数
function main() {
  const keyword = "#影山寝ろ";

  //1回目はnextTokenなしで呼び出す
  const nextToken = getTweets(keyword).nextToken;

  //APIリミットに引っかからないように10秒待つ
  Utilities.sleep(10*1000);

  //2回目は1回目のnextTokenを指定したうえで呼び出す
  getTweets(keyword, nextToken);
}

// 指定したキーワードを含むツイートを取得する
function getTweets(rawKeyword, nextToken) {
  //検索キーワード(URI Encodeが必要)
  const keyword = "?query=" + encodeURIComponent(`${rawKeyword} -is:retweet -has:mentions lang:ja `)};
  //検索オプション
  let option = `&tweet.fields=author_id,id,text,created_at&max_results=${MAX_RESULTS}`;
  //nextTokenを指定した場合は追加
  if(nextToken) {
    option += `&next_token=${nextToken}`;
  }
  //検索キーワードとURL構築
  const url = API2_BASE_URL + URL_GET_SEARCH + keyword + option;

  //リクエスト実行
  const service = twitter.getService();
  const response = JSON.parse(service.fetch(url));
  const tweets = response.data;
  console.log(`${tweets.length}件の「${rawKeyword}」に関するツイートを取得しました`);
  tweets.forEach(tweet => {
    console.log(`${tweet.id}: ${tweet.text}`);
  })
  return {
    tweets: tweets,
    nextToken: response.meta.next_token
  };
}

なお、こちらの記事で実際にこのエンドポイントを使った検索機能を実装していますので、よかったら参考にしてみてくださいね。

あわせて読みたい
【GAS】Twitterキーワード検索&ツイート取得方法完全解説
【GAS】Twitterキーワード検索&ツイート取得方法完全解説

2. 特定のユーザーのフォロワー一覧取得、フォロワー数取得

概要

  • 特定のユーザーに対して、そのユーザーのフォロワー一覧を取得します。また、そのフォロワー一覧から、フォロワー数を計算することもできます。

公式APIリファレンス

メソッド

  • GET

エンドポイント

  • /2/users/:id/followers (:idはユーザーIDを指定します)

Rate Limit

  • 15リクエスト/15分

パラメータ

必須パラメータとして、エンドポイントに:idの指定が必要です。

:idにはTwitterのユーザーID(ユーザー固有の数字の羅列)を指定します。

ユーザーIDは、idtwiを使えば簡単に確認することができるのですが、たまにエラーで使えない時があります。

その場合、こちらの記事を参照してください。
» idtwiが使えないときの代替手段3選|すべて無料で使えます

サンプルコード

const TWITTER_USER_ID = "ここにTwitterのユーザーIDを指定します";
const API2_BASE_URL = "https://api.twitter.com";
const URL_GET_FOLLOWERS = `/2/users/${TWITTER_USER_ID}/followers`;

const twitter = TwitterWebService.getInstance(TWITTER_API_KEY, TWITTER_API_SECRET);

// 実行する関数
function main() {
  // フォロワーのユーザーID一覧を取得
  const follwerIds = getFollwerIds([], null);

  // フォロワー数を計算
  const followerCount = followerIds.length;
}

// 再帰的にフォロワーを取得する関数
function getFollowerIds(followerList, paginationToken) {
  const service = twitter.getService();

  let url = API2_BASE_URL + URL_GET_FOLLOWERS;
  if(paginationToken) {
    url += `?pagination_token=${paginationToken}`;
  }
  console.log(url);

  const response = JSON.parse(service.fetch(url));
  const partialFollowerIds = response.data.map(follower => {
    return follower.id;
  })
  console.log(`partialFollowerIds: ${partialFollowerIds}`);
  console.log(`partialCount: ${partialFollowerIds.length}`);
  const nextToken = response.meta.next_token;
  console.log(`nextToken: ${nextToken}`);
  if(nextToken) {
    return [...followerList, ...getFollowerIds(partialFollowerIds, nextToken)];
  } else {
    return [...followerList, ...partialFollowerIds];
  }
}

3. 特定のユーザーのフォロー一覧取得、フォロー数取得

概要

  • 特定のユーザーに対して、そのユーザーのフォロー一覧を取得します。また、そのフォロー一覧から、フォロー数を計算することもできます。(2. のフォロワーの取得方法とほぼ同じです)

公式APIリファレンス

メソッド

  • GET

エンドポイント

  • /2/users/:id/following

Rate Limit

  • 15リクエスト/15分

パラメータ

  • 必須パラメータとして、エンドポイントに:id(ユーザーID)を指定する必要があります。

サンプルコード

const TWITTER_USER_ID = "ここにTwitterのユーザーIDを指定します";
const API2_BASE_URL = "https://api.twitter.com";
const URL_GET_FOLLOWING = `/2/users/${TWITTER_USER_ID}/following`;

const twitter = TwitterWebService.getInstance(TWITTER_API_KEY, TWITTER_API_SECRET);

// 実行する関数
function main() {
  // フォローのユーザーID一覧を取得
  const follwingIds = getFollwingIds([], null);

  // フォロー数を計算
  const followingCount = followingIds.length;
}

// 再帰的にフォロー一覧を取得する(15分で15リクエストまで)
function getFollowingIds(followingList, paginationToken) {
  const service = twitter.getService();

  let url = API2_BASE_URL + URL_GET_FOLLOWING;
  if(paginationToken) {
    url += `?pagination_token=${paginationToken}`;
  }
  console.log(url);

  const response = JSON.parse(service.fetch(url));
  const partialFollowingIds = response.data.map(following => {
    return following.id;
  })
  console.log(`partialFollowingIds: ${partialFollowingIds}`);
  console.log(`partialCount: ${partialFollowingIds.length}`);
  const nextToken = response.meta.next_token;
  console.log(`nextToken: ${nextToken}`);
  if(nextToken) {
    return [...followingList, ...getFollowingIds(partialFollowingIds, nextToken)];
  } else {
    return [...followingList, ...partialFollowingIds];
  }
}

4. 特定のユーザーが最近「いいね」したツイート一覧取得

概要

  • 特定のユーザーに対して、そのユーザーが最近「いいね」したツイートの一覧を取得することができます。

公式APIリファレンス

メソッド

  • GET

エンドポイント

  • /2/users/:id/liked_tweets

Rate Limit

  • 75リクエスト/15分

パラメータ

  • 必須パラメータとして、エンドポイントに:id(ユーザーID)を指定する必要があります。
  • 任意パラメータの例:max_results (取得件数:何も指定しない場合100件取得されます。大量に取得する必要がなければ、特に指定する必要はないでしょう。)

サンプルコード

const TWITTER_USER_ID = "ここにTwitterのユーザーIDを指定します";
const API2_BASE_URL = "https://api.twitter.com";
const URL_GET_LIKED_TWEETS = `/2/users/${TWITTER_USER_ID}/liked_tweets`;

const twitter = TwitterWebService.getInstance(TWITTER_API_KEY, TWITTER_API_SECRET);

// いいねリストを取得(最新100件)
function getLikedTweets() {
  const service = twitter.getService();
  const url = API2_BASE_URL + URL_GET_LIKED_TWEETS;
  const response = JSON.parse(service.fetch(url));
  return response.data.map(tweet => {
    console.log(tweet.text);
    return tweet.id;
  })
}

5. 特定のユーザーの最新ツイート一覧取得

概要

  • 特定のユーザーに対して、そのユーザーの最新ツイート(リツイート含む)の一覧を取得します。

公式APIリファレンス

メソッド

  • GET

エンドポイント

  • /2/users/:id/tweets

Rate Limit

  • 1500リクエスト/15分(アプリ当たり)
  • 900リクエスト/15分(ユーザー当たり)

パラメータ

  • 必須パラメータとして、エンドポイントに:id(ユーザーID)を指定する必要があります。
  • 任意パラメータの例:max_results (取得件数:何も指定しない場合10件(100件じゃなくて10件となることに注意!)取得されます。大量に取得する必要がなければ、特に指定する必要はないでしょう。)

サンプルコード

const TWITTER_USER_ID = "ここにTwitterのユーザーIDを指定します";
const API2_BASE_URL = "https://api.twitter.com";
const URL_GET_TWEETS = `/2/users/${TWITTER_USER_ID}/tweets`;

const twitter = TwitterWebService.getInstance(TWITTER_API_KEY, TWITTER_API_SECRET);

// ユーザーの最新ツイートを取得(100件)
function getRecentTweets() {
  const service = twitter.getService();
  const url = API2_BASE_URL + URL_GET_TWEETS + "?max_results=100";
  const response = JSON.parse(service.fetch(url));
  return response.data.map(tweet => {
    console.log(tweet.text);
    console.log(tweet.id);
    return tweet;
  });
}

6. いいねする

概要

  • 任意のツイートに対して「いいね」することができます。

公式APIリファレンス

メソッド

  • POST

エンドポイント

  • /2/users/:id/likes

Rate Limit

  • 50リクエスト/15分

パラメータ

  • エンドポイントにユーザーIDを含める必要があります。
  • リクエストボディの必須パラメータ:tweet_id(いいねしたいツイートのID)

サンプルコード

const API2_BASE_URL = "https://api.twitter.com";
const URL_POST_LIKE = `/2/users/${TWITTER_USER_ID}/likes`;
const TWEET_ID = "ここにいいねしたいツイートのIDを指定します";

const twitter = TwitterWebService.getInstance(TWITTER_API_KEY, TWITTER_API_SECRET);

// 実行する関数
function main() {
  if(postLike(TWEET_ID)) {
    console.log("いいね成功!");
  } else {
    console.log("いいね失敗!");
  }
}

// いいねする
function postLike(tweetId) {
  try {
    const service = twitter.getService();
    const url = API2_BASE_URL + URL_POST_LIKE;
    const payload = {
      "tweet_id": tweetId
    };
    const response = JSON.parse(
        service.fetch(url, {
        'method': 'POST',
        'contentType': 'application/json',
        'payload': JSON.stringify(payload)
      })
    );
    console.log(response.data);
    return response.data.liked; //成功したらtrueが返る
  } catch(e) {
    console.error(e);
  }
}

7. リツイートする

概要

  • 任意のツイートをリツイートすることができます。

公式APIリファレンス

メソッド

  • POST

エンドポイント

  • /2/users/:id/retweets

Rate Limit

  • 50リクエスト/15分

パラメータ

  • エンドポイントにユーザーIDを含める必要があります。
  • リクエストボディの必須パラメータ:tweet_id(いいねしたいツイートのID)

サンプルコード

const API2_BASE_URL = "https://api.twitter.com";
const URL_POST_RETWEET = `/2/users/${TWITTER_USER_ID}/retweets`;
const TWEET_ID = "ここにリツイートしたいツイートのIDを指定します";

const twitter = TwitterWebService.getInstance(TWITTER_API_KEY, TWITTER_API_SECRET);

// 実行する関数
function main() {
  if(postRetweet(TWEET_ID)) {
    console.log("リツイート成功!");
  } else {
    console.log("リツイート失敗!");
  }
}
// リツイートする
function postRetweet(tweetId) {
  try {
    const service = twitter.getService();
    const url = API2_BASE_URL + URL_POST_RETWEET;
    const payload = {
      "tweet_id": tweetId
    };
    const response = JSON.parse(
        service.fetch(url, {
        'method': 'POST',
        'contentType': 'application/json',
        'payload': JSON.stringify(payload)
      })
    );
    console.log(response.data);
    return response.data.retweeted; //成功したらtrueが返る
  } catch(e) {
    console.error(e);
  }
}

8. フォローする

概要

  • 任意のユーザーをフォローすることができます。

公式APIリファレンス

メソッド

  • POST

エンドポイント

  • /2/users/:id/following

Rate Limit

  • 50リクエスト/15分

パラメータ

  • エンドポイントにユーザーIDを含める必要があります。(ここで指定するユーザーIDは、フォローする側のユーザーIDです。)
    例:AさんがBさんをフォローしたい場合、AさんのユーザーID)
  • リクエストボディの必須パラメータ:target_user_id(フォローしたいユーザーのID)

サンプルコード

const TWITTER_USER_ID = "ここにフォローする側のユーザーIDを指定します。";
const TARGET_USER_ID = "ここにフォローされる側のユーザーを指定します。";
const API2_BASE_URL = "https://api.twitter.com";
const URL_POST_FOLLOWING = `/2/users/${TWITTER_USER_ID}/following`;

const twitter = TwitterWebService.getInstance(TWITTER_API_KEY, TWITTER_API_SECRET);

// 実行する関数
function main() {
  if(postFollowing(TARGET_USER_ID)) {
    console.log("フォロー成功!");
  } else {
    console.log("フォロー失敗!");
  }
}

// フォローする
function postFollowing(userId) {
  try {
    const service = twitter.getService();
    const url = API2_BASE_URL + URL_POST_FOLLOWING;
    const payload = {
      "target_user_id": userId
    };
    const response = JSON.parse(
        service.fetch(url, {
        'method': 'POST',
        'contentType': 'application/json',
        'payload': JSON.stringify(payload)
      })
    );
    console.log(response.data);
    return response.data.following; //成功したらtrueが返る
  } catch(e) {
    console.error(e);
  }
}

まとめ

以下の8つの機能に関して、サンプルコードつきで紹介させていただきました。これらを使いこなして、必要に応じて組み合わせることで、簡単にTwitter Botを作ることができそうですね!

  1. ツイート検索(キーワード指定)
  2. 特定のユーザーのフォロワー一覧取得、フォロワー数取得
  3. 特定のユーザーのフォロー一覧取得、フォロー数取得
  4. 特定のユーザーが最近「いいね」したツイート一覧取得
  5. 特定のユーザーの最新ツイート一覧取得
  6. いいねする
  7. リツイートする
  8. フォローする

参考になれば幸いです。お読みいただきありがとうございました!

あわせて読みたい
GASでTwitter API応用編①~フォローバックする~
GASでTwitter API応用編①~フォローバックする~
このブログを書いている人
えぬ
えぬ
N日後にムキムキになるエンジニア
WebアプリエンジニアとしてIoTシステムを開発中。30代折り返し。 趣味(モノづくり、プログラミング、筋トレ)や子育てのことを主に記事にします。 TOEIC: 900点/第一級陸上無線技術士/第3種電気主任技術者/技術士一次試験合格/基本情報技術者/第2種電気工事士/デジタル技術検定2級(情報・制御)
記事URLをコピーしました