LoginSignup
7
6

More than 1 year has passed since last update.

TwitterAPIのv1.1とv2.0で比較してみた

Posted at

2021年11月中旬以降にTwitterDevelopper申請後のAPIのデフォルトがv2.0になっていたので、GASから以下を行った場合のv1.1との違いを書いてみました。

  1. アカウントとの連携認証
  2. ツイート投稿
  3. ツイート取得

比較対象(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

v1.0
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

v2.0
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

そりゃそうだ

v1.1
https://api.twitter.com/1.1/statuses/update.json
v2.0
https://api.twitter.com/2/tweets

違うポイント2:payload内

少しだけ構造が違うようです。

v1.1
    payload: {
      status: 'Hello world by v1.1.'  //つぶやきたい内容
    }
v2.0
    payload: JSON.stringify({
      "text":'Hello world by v2.0.'  //つぶやきたい内容
    })

3. ツイート取得

#りんごで検索をした結果の内最新10個を取得する内容です。
ただし、リツイートは検索文字に-rtを入れることで除外するようにしてます。

v1.0 Standard search API

v1.0
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

ver2.0
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時点でrecentallかを選択するそうです。(不確実な情報ですが、無料ではrecentしか使えないらしい)

v1.1
https://api.twitter.com/1.1/search/tweets.json?
v2.0
https://api.twitter.com/2/tweets/search/recent?

違うポイント2:オプション

v2.0での日本語の選択方法が分からなかったです…無いのかな…?
それと、大きな違いが、レスポンスのJSON形式です。
v1.1ではすべての情報が載ったレスポンスが返ってきますが、v2.0ではレスポンスに乗せる情報を選択できるようになっています。(このコードだと、ツイートIDとツイート内容だけをレスポンスで返すようにしています)

v1.1
q='+query+'&result_type=recent&count=10&locale=ja&lang=ja
v2.0
query='+query+'&max_results=10&tweet.fields=id,text

あまりサーバーリクエストに詳しくないため大した説明にはなりませんでしたが、参考になれば幸いです。

p.s.
どうしてもリツイートがうまくいかずに困っているので、どなたかがv2.0のコードで共有してくださることを待ってます…
そしてTwitterDevelopper申請時に申請理由書いたり~待ったり~が無くなり、その場で登録完了できるようにもなりましたね。めちゃくちゃ楽。

7
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6