【GAS】Twitter API基本の使い方8選|サンプルコードあり
GASを使ってTwitter Botをつくりたいニャ。Twitter APIっていうのがあるみたいだけど、どうやって使ったらいいニャ?
本記事はこのような方向けに、以下の8個のTwitter APIの使い方を説明します。
- ツイート検索(キーワード指定)
- 特定のユーザーのフォロワー一覧取得、フォロワー数取得
- 特定のユーザーのフォロー一覧取得、フォロー数取得
- 特定のユーザーが最近「いいね」したツイート一覧取得
- 特定のユーザーの最新ツイート一覧取得
- いいねする
- リツイートする
- フォローする
Twitter APIとGASの準備
実際にコードを記述していく前に、GASとTwitter APIを使える状態にする必要があります。以前の記事で詳しく解説していますので、以下記事をご確認いただけますと幸いです。
以下に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
};
}
なお、こちらの記事で実際にこのエンドポイントを使った検索機能を実装していますので、よかったら参考にしてみてくださいね。
2. 特定のユーザーのフォロワー一覧取得、フォロワー数取得
概要
- 特定のユーザーに対して、そのユーザーのフォロワー一覧を取得します。また、そのフォロワー一覧から、フォロワー数を計算することもできます。
公式APIリファレンス
- https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/get-users-id-followers
メソッド
- 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リファレンス
- https://developer.twitter.com/en/docs/twitter-api/users/follows/api-reference/get-users-id-following
メソッド
- 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リファレンス
- https://developer.twitter.com/en/docs/twitter-api/tweets/timelines/api-reference/get-users-id-tweets
メソッド
- 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を作ることができそうですね!
- ツイート検索(キーワード指定)
- 特定のユーザーのフォロワー一覧取得、フォロワー数取得
- 特定のユーザーのフォロー一覧取得、フォロー数取得
- 特定のユーザーが最近「いいね」したツイート一覧取得
- 特定のユーザーの最新ツイート一覧取得
- いいねする
- リツイートする
- フォローする
参考になれば幸いです。お読みいただきありがとうございました!