10分でできる！Twitterの検索結果をSpreadsheet出力方法

#手順

1. Twitter Developerの設定
2. Google App Scriptの記述

# 1. Twitter Developerの設定

1.Twitter Developer Portal を開きます。

https://developer.twitter.com/en/portal/dashboard

2.プロジェクトを作成する
![twitter portal 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/8a8caecc-3683-0cfc-8035-c2d284c4f360.png)


3.プロジェクト作成完了後の `API key` と `API secret key` をコピーする
![twitter portal 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/ca4b0ffc-0f4e-1077-620b-203556ed3501.png)

(2022年12月追記)
上記の設定に加えて、Elevated Accessの利用申請が必要になります。

https://qiita.com/mayobimu/items/a99b146256a17ce82d87

# 2. Google App Scriptの記述

1.出力したいスプレッドシートから、`ツール` > `スクリプトエディタ` を開く

![スクリーンショット 2021-01-09 14.20.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/40bf8277-fdd4-1121-9044-a0a06f95e887.png)

2.以下のようにスクリプトを記述する

![スクリーンショット 2021-01-09 14.34.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/746e1d8c-2ec3-1c9e-752a-d5aac64c1738.png)

 
以下をコピーして貼り付けてください。
一部修正が必要になります。

* オレンジ枠の `api_key` は上でコピーした `API key` を貼り付けてください
* オレンジ枠の `api_secret_key` は上でコピーした `API secret key` を貼り付けてください
* 緑枠の `search_keyword` は検索したいキーワードを入力してください
* 青枠の `spreadsheetId` は出力したいスプレッドシートのIDを入力してください

　（https://docs.google.com/spreadsheets/d/1U*************U4 の最後のまとまりがIDです）
* 8行目の`master`にはインポートしたいシート名を入力してください

``` collectLatestTweets.js
var api_key = 'bv*****************KS';
var api_secret_key = 'Of******************************lx';
var search_keyword = 'NLP -RT -rt';

function setupSheet() {
  var spreadsheetId = '1U******************************U4';
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName('master')
  return sheet;
}

function collectLatestTweets() { 
  var blob = Utilities.newBlob(api_key + ':' + api_secret_key);
  var credential = Utilities.base64Encode(blob.getBytes());
  var formData = {
    'grant_type': 'client_credentials'
  };
  var basic_auth_header = {
    'Authorization': 'Basic ' + credential
  };
  var options = {
    'method': 'post',
    'contentType': 'application/x-www-form-urlencoded;charset=UTF-8',
    'headers':  basic_auth_header,
    'payload': formData,
  };
  var oauth2_response = UrlFetchApp.fetch('https://api.twitter.com/oauth2/token', options);  
  var bearer_token = JSON.parse(oauth2_response).access_token; 
  var bearer_auth_header = {
    'Authorization': 'Bearer ' + bearer_token
  };
  var search_response = UrlFetchApp.fetch(
    'https://api.twitter.com/1.1/search/tweets.json?q=' + search_keyword + '&lang=ja&result_type=recent&count=100',
    { 'headers': bearer_auth_header });
  result = JSON.parse(search_response);
  var sheet = setupSheet();

  result.statuses.forEach(function(status) {
    var rowData = [status.user.id_str, status.user.name, status.created_at, status.text];
    sheet.appendRow(rowData);
  });
}
```


# 出力確認

1.実行する関数を `collectLatestTweets` に変更して、実行を押します。

![スクリーンショット 2021-01-09 14.44.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/f2dc46b5-3179-bdce-c532-97835e99be44.png)


2.スプレッドシートに出力されることが確認されます。
![スクリーンショット 2021-01-09 14.47.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/1b9d9c25-9db1-8fec-4a4f-5560c11b6cad.png)


以上です。


# 備考

1. GASを実行する際に権限を承認する必要があります。

ポップアップで出てくるので、許可を押してください。

![Group 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/74db9ff4-fae2-99e7-276c-1574a902ed19.png)