DataSpiderでTwitterのツイート検索してみた（OAuth2.0）

## はじめに
こんにちは、すぎもんです:smiley:
先日投稿した[DataSpiderでツイート投稿してみた記事](https://qiita.com/sugimon/items/c7fbe4295eb23e7b2934)の続きです。

## 今回やること

[前回の記事](https://qiita.com/sugimon/items/c7fbe4295eb23e7b2934)で、DataSpiderを使って、Twitterにツイート投稿してみました。

今回は、「自身の投稿したツイートを検索」してみます。

## 検証の流れ

＜前提＞
[DataSpiderでツイート投稿してみた記事](https://qiita.com/sugimon/items/c7fbe4295eb23e7b2934)で、Twitter設定が完了していること

＜DataSpiderの設定＞
　　　　①スクリプトの作成
　　　　②POST実行の設定
　　　　③マッピングの設定
　　　　④マッピング
　　　　⑤GET実行の設定
　　　　⑥スクリプトの作成（フローの作成）

:::note warn
ツイートの検索は、OAuth 2.0 App Onlyの権限の接続確認方式で実施します。
:::

## DataSpider設定（ツイートの検索）
##### ①スクリプトの作成
始めに、任意の名前でプロジェクトとスクリプトを作成します。（※設定画面は省略）
次に、処理内で使用するスクリプト変数を下記の通り作成します。
　　　・変数名　　：　`twitter_appkey`
　　　・変数型　　：　`文字列型`
　　　・初期値　　：　`XXXXXXXX`（Twitterの設定で取得した`App Key`）

　　　・変数名　　：　`twitter_appsecret`
　　　・変数型　　：　`文字列型`
　　　・初期値　　：　`XXXXXXXX`（Twitterの設定で取得した`App Secret`）

　　　・変数名　　：　`twitter_app_accesstoken`
　　　・変数型　　：　`文字列型`
　　　・初期値　　：　設定なし

　　　・変数名　　：　`search_query`
　　　・変数型　　：　`文字列型`
　　　・初期値　　：　`from:XXXX`（Twitterアカウント（@以降の値））

:::note info
スクリプト変数「search_query」の初期値には、自身のTwitterアカウントを検索できるように値を設定します。
<strong>例）</strong>「@abcde」がTwitterアカウントの場合、「from:abcde」と設定します。
:::

##### ②POST実行の設定
次に、デザイナ画面の右側「ツールパレット」から、
[ネットワーク]＞[REST]＞[POST実行]より、
POST実行アイコンを、デザイナ中央にドラッグ＆ドロップし設定画面を開きます。

:::note warn
POST実行処理の設定は、下記サイトの「Step2」を参考にしています。
[Twitter Developerサイト](https://developer.twitter.com/en/docs/authentication/oauth-2-0/application-only)
:::

POST実行処理の名前は、「`POST_APIアクセストークン`」としました。

「必須設定」タブの設定は、下記の通りです。
（※「接続先」は、[ツイート投稿](https://qiita.com/sugimon/items/c7fbe4295eb23e7b2934)で使用した接続先`Twitter_REST接続設定`です。）
　　　・接続先　　：　　`twitter_REST接続設定`
　　　・パス　　　：　　`oauth2/token`

<strong>クエリパラメータ</strong>は、下記の値を追加します。
　　　・名前　　　：　　`grant_type`　　　　値　：　`client_credentials`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0790b6b4-fcd6-ac35-bad8-1a6fb2758a7d.png)
「リクエスト設定」タブの設定は、下記の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d490452f-54a4-cfa2-f346-ccf12c01f0a1.png)
続いて、「レスポンス設定」は出力先を`データ`、データ形式は`JSON`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/06498fef-c704-04e2-8626-84fa9716736b.png)
出力スキーマの設定は、DataSpiderの[JSONファイルを指定して出力スキーマを設定]という機能を使用します。指定するJSONファイルは、前述した、参考サイトのレスポンス例のbody部をエディタに貼り付けて作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/28f87335-247c-8bc8-c858-f2fbf20ad172.png)
任意のJSONファイルとして、DataSpiderのエクスプローラー「`/data/twitter`」配下に「`api_token_response.json`」という名前で作成したJSONファイルを配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3847a354-7e36-fdd8-73a9-145decc0fcbc.png)
ファイルを作成後、［JSONファイルを指定して出力スキーマを設定］を押下し、作成したJSONファイルを指定します。これで出力スキーマが設定されます。

「ヘッダ設定」は、「リクエストヘッダ」に下記の通り設定します。
　　　・名前　：　`content-type`　　
　　　・値　　：　`application/x-www-form-urlencoded;charset=UTF-8`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/7a96ea47-f0b4-abad-9792-79f508f9be84.png)
最後に、「認証設定」タブは、下記の通り設定します。
　　　・認証　　　　：　　`ベーシック認証`
　　　・ユーザ　　　：　　`${twitter_appkey}`
　　　・パスワード　：　　`${twitter_appsecret}`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/419a8e19-a4f6-8808-c0d1-df9d9c894b97.png)

:::note info
DataSpiderの変数は、${スクリプト変数名}と記載します。
:::

##### ③マッピングの設定
POST実行処理の入力データのマッピングをします。
右側のメニューから、[変換]→[基本]→マッピングをスクリプトにドロップします。
Mappingアイコンをダブルクリックして、設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/006ef2d5-ec84-6e91-c776-27f4a76b6ad8.png)
[ツイート投稿の記事]()と同様に設定します。まずは、出力先の出力データの設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/cf9b7ea3-f407-0759-7021-57e677c25012.png)
出力データを右クリックして、「仮スキーマを設定」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/55473160-e70b-3eec-fc8c-9e8bca29e785.png)
「仮スキーマ」を右クリックして、「ルート要素の追加」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/61bf2506-4ca0-6334-2981-076ab641b71b.png)
作成された「root」を右クリックし、[追加]→[属性]を押下し、`type`と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/bf6ffedc-1626-b091-2e1c-274d6ceda8ac.png)
同様に「root」を右クリックし、[追加]→[子要素]を押下し、`grant_type`と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/67eda785-0130-e2ec-3b42-d263777ad728.png)
下記の通り、「`type`」と「`grant_type`」が出力スキーマに追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/833bd42f-e336-4577-a917-9de40f55530b.png)
下記の通り、各入力元と各出力先をドラック＆ドロップでつないでマッピングします。
| 入力元 | 出力先 |
|:-----------|:------------|
| 単一文字列定数 | rootのtype |
| 単一文字列定数　object| root要素のgrant_type |

マッピングイメージは下記の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1be610f1-53c8-2a91-99d7-ebc694d15593.png)

##### ④マッピング
POST実行処理の出力結果をデータで受け取るので、出力のマッピング設定をします。
デザイナ画面右側のツールパレットメニューから[変換]→[基本]→「マッピング」をデザイナ画面中央にドラッグ＆ドロップします。POST実行処理のレスポンス設定で、出力スキーマの設定をしたので、下記の様にPOST実行処理のアイコンとマッピングアイコンをつなぐと、マッピングの入力元の入力データが、自動的に設定されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b24459bd-34a5-e77e-b35e-7767ae56a5bd.png)
マッピングアイコンをダブルクリックして、設定内容に問題がないか確認しましょう。下記の通り、自動的に入力データにスキーマが設定されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/130c7e42-071c-fe71-9b68-67f6e2275b3f.png)
自動マッピングの内容を確認したら、入力データ「access_token」を出力先のスクリプト変数「twitter_app_accesstoken」にマッピングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ef835089-6f76-c231-8f69-e81c07445e65.png)
以上で、マッピング設定は完了です。

##### ⑤GET実行の設定（ツイート検索API実行）
続いて、ツイート検索API実行の処理をスクリプトに追加します。
デザイナ右側のツールパレットメニューから、[ネットワーク]＞[REST]＞[GET実行]を、デザイナ画面中央にドラッグ＆ドロップします。設定画面が開きますので、設定していきましょう。

GET実行処理で呼び出す「ツイート検索API」の仕様詳細は、下記をご参照ください。
過去7日間の投稿から条件にマッチする投稿を取得します。
[ツイート検索APIの仕様について](https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-recent)

「必須設定」タブは、「`GET_ツイート検索`」という名前で、下記の通り設定します。
　　　・接続先　　　　：　　`twitter_REST接続設定`
　　　・パス　　　　　：　　`2/tweet/search/recent`
　　　・エンコード　　：　　`UTF-8`
「クエリパラメータ」に、下記を追加します。
　　　・名前　　　　　：　`query`　　　・値　　　：　`${search_query`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/cfd13c2e-4fd7-81cb-8955-7e01c7ddcadf.png)
queryは今回呼び出すAPIの必須パラメータです。記載方法は下記サイトで確認します。
[Twitter Developerサイト（ツイート検索APIの必須パラメータ）](https://developer.twitter.com/en/docs/twitter-api/tweets/search/integrate/build-a-query)

今回は、「自身の投稿したツイート」という条件で検索します。具体的には、スクリプト変数「search_query」に設定した「`from:Twitterアカウント`」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1b6e41bf-2751-1407-cd51-52baa85007cf.png)
「レスポンス」タブは下記の通り、設定します。
　　　・データ出力先　　　：　　`ファイル`
　　　・ファイルパス　　　：　　`/data/twitter/search_recent_response.json`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1c164280-a2ba-52c1-7302-ca9a7569bb15.png)
「ヘッダ設定」タブは、リクエストヘッダに下記を追加します。
　　　・名前　　　　　　　：　　`Authorization`
　　　・値　　　　　　　　：　　`Bearer ${twitter_app_accesstoken}`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9eb92e14-db65-e689-9f51-6d5585a283a3.png)
以上で、GET実行処理の設定は完了です。

##### ⑥スクリプトの作成（フロー作成）
POST実行処理（アクセストークン取得）と、GET実行処理（ツイート検索）やマッピングなど作成したアイコンを、StartアイコンからEndアイコンまでつなげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/58186dcd-cf30-8536-5d26-1cf3c881d504.png)
Start　⇒　POST実行の入力データMapping　⇒　POST実行（アクセストークン取得）　⇒　POST実行の出力データMapping　⇒　GET実行（ツイート検索）　⇒　End

:::note warn
<strong>マッピングアイコンの名称を変更してスクリプトの可読性Upも可能です！</strong>

アイコンをクリックし「プロパティインスペクタ」から簡単に変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/fbb154e1-e5e8-491c-df95-0725d9a3b10f.png)

:::

## スクリプトの実行
スクリプトのテスト実行をして、自身のツイートを検索してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b62d622c-114b-e975-923b-18202f7126f2.png)
スクリプトが完了したら、GET実行のレスポンス設定で指定したファイルが作成されていることを確認しましょう。レスポンスファイル「`search_recent_response.json`」を開くと、ツイートのIDや自身のアカウントから投稿したテキストなどの情報が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6fbf5c14-86f0-ba33-20b8-9d360d02263b.png)
DataSpiderでのTwitterのツイート検索に成功です！

## 最後に
いかがでしたでしょうか。
[前回のTwitter投稿記事](https://qiita.com/sugimon/items/c7fbe4295eb23e7b2934)に続いて、今回は「自身のアカウントでのツイートを検索」してみました。つながるサービスへのアクション（今回でいう[Twitter投稿](https://qiita.com/sugimon/items/c7fbe4295eb23e7b2934)）はもちろんのこと、今回の記事の様に、つながったサービスの情報をDataSpiderで取得して、分析や新たな取り組み検討など、更なる活用が実現できそうですね。
ここまで読んでいただいた皆さん、ありがとうございました。それでは、また！