2021年11月中旬以降にTwitterDevelopper申請後のAPIのデフォルトがv2.0になっていたので、GASから以下を行った場合のv1.1との違いを書いてみました。
- アカウントとの連携認証
- ツイート投稿
- ツイート取得
##比較対象(Twitter API Doc)
- Twitter API - Standard v1.1
- Twitter API v2: Early Access
##1. アカウントとの連携認証
連携認証部分はv1.1とまるまる一緒で特に問題ありませんでした。
//認証用インスタンスの生成
var twitter = TwitterWebService.getInstance(
'*************************',//Consumer Key
'**************************************************'//Consumer secret key
);
//アプリを連携認証する
function authorize() {
twitter.authorize();
}
//認証を解除する
function reset() {
twitter.reset();
}
//認証後のコールバック
//ちなみに、これはこの関数名じゃないと通らない~
function authCallback(request) {
return twitter.authCallback(request);
}
##2. ツイートを投稿
単純につぶやくだけの機能です。
endPointUrlもそうですが、payload内の書き方が結構変わっていました。
###v1.1 POST status/update
function postTweet() {
var service = twitter.getService();
var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json';
var response = service.fetch(endPointUrl, {
method: 'post',
payload: {
status: 'Hello world by v1.1.' //つぶやきたい内容
}
});
}
###v2.0 POST /2/tweets
function postTweet() {
var service = twitter.getService();
var endPointUrl = 'https://api.twitter.com/2/tweets';
var response = service.fetch(endPointUrl, {
method: 'post',
contentType:"application/json",
payload: JSON.stringify({
"text":'Hello world by v2.0.' //つぶやきたい内容
})
});
}
####違うポイント1:URL
そりゃそうだ
https://api.twitter.com/1.1/statuses/update.json
https://api.twitter.com/2/tweets
####違うポイント2:payload内
少しだけ構造が違うようです。
payload: {
status: 'Hello world by v1.1.' //つぶやきたい内容
}
payload: JSON.stringify({
"text":'Hello world by v2.0.' //つぶやきたい内容
})
##3. ツイート取得
#りんご
で検索をした結果の内最新10個を取得する内容です。
ただし、リツイートは検索文字に-rt
を入れることで除外するようにしてます。
###v1.0 Standard search API
function getTweet() {
var service = twitter.getService();
//クエリはUTF8にする必要があります
var query="%23りんご -rt"; //検索ワード #りんご(単純なRTは除外)
//最新10ツイート&日本語
var endPointUrl = 'https://api.twitter.com/1.1/search/tweets.json?q='+query+'&result_type=recent&count=10&locale=ja&lang=ja';
//リクエスト
var response = service.fetch(endPointUrl, {
method: 'get',
headers: {
'Content-Type': 'application/json',
'authorization': 'Bearer ' + 'AAAAAAAAAAAAAAAAAAAAA*******************************************************************************************',
}
});
var data = JSON.parse(response.getContentText());
//ログ出力
for(var i=0;i<10;i++){
Logger.log(data["statuses"][i]["text"]);
Logger.log(data["statuses"][i]["id"]);
}
return data["statuses"];
}
###v2.0 GET /2/tweets/search/recent
function getTweet() {
var service = twitter.getService();
//クエリはUTF8にして入れないとエラーでるから気をつけて!
var query="(%23りんご -rt) lang:ja"; //検索ワード #りんご(単純なRTは除外)
//最新10ツイート(日本語の設定の仕方は分からなかった…)
var endPointUrl = 'https://api.twitter.com/2/tweets/search/recent?query='+query+'&max_results=10&tweet.fields=id,text';
//リクエスト
var response = service.fetch(endPointUrl, {
method: 'get',
contentType: "application/json",
headers: {
'authorization': 'Bearer ' + 'AAAAAAAAAAAAAAAAAA*********************************************************************************',
}
});
var targets = JSON.parse(response.getContentText());
//ログ出力
for(var i=0;i<10;i++){
Logger.log(data["text"]);
Logger.log(data["id"]);
}
return targets["data"];
}
####違うポイント1:URL
v2.0では、URL時点でrecent
かall
かを選択するそうです。(不確実な情報ですが、無料ではrecentしか使えないらしい)
https://api.twitter.com/1.1/search/tweets.json?
https://api.twitter.com/2/tweets/search/recent?
####違うポイント2:オプション
v2.0での日本語の選択方法が分からなかったです…無いのかな…?
それと、大きな違いが、レスポンスのJSON形式です。
v1.1ではすべての情報が載ったレスポンスが返ってきますが、v2.0ではレスポンスに乗せる情報を選択できるようになっています。(このコードだと、ツイートIDとツイート内容だけをレスポンスで返すようにしています)
q='+query+'&result_type=recent&count=10&locale=ja&lang=ja
query='+query+'&max_results=10&tweet.fields=id,text
あまりサーバーリクエストに詳しくないため大した説明にはなりませんでしたが、参考になれば幸いです。
p.s.
どうしてもリツイートがうまくいかずに困っているので、どなたかがv2.0のコードで共有してくださることを待ってます…
そしてTwitterDevelopper申請時に申請理由書いたり~待ったり~が無くなり、その場で登録完了できるようにもなりましたね。めちゃくちゃ楽。