SolitonNKを使ってオープンデータを活用するぞ　ステップ３

「SolitonNKを使ってオープンデータを活用するぞ　ステップ３」では蓄積したデータを抽出して分かりやすく示す例として、twitterで自身や自社商品などの話題のツイートを検索し、SolitonNKに蓄積する方法を紹介します。

twitterは、twitterのユーザ操作をAPIとして提供しているので、twitter APIを活用してSolitonNKに取り込みます。twitter APIを利用するにあたっては、twitterにdeveloper登録し、twitter APIへアクセスするには、その都度OAuthによる認証が必要となります。

ということで、今回はSolitonNKの使い方より、twitter APIの利用方法についての記述が多くなります。

# twitterアカウントの用意

developer登録する前に、SolitonNKでの分析用にtwitterアカウントが必要になります。個人のtwitterアカウントではなく、SolitonNK用に専用アカウントを用意する方が好ましいでしょう。本記事では執筆者のアカウント kakawai18 を使っています。

そして、そのアカウントをチームで使えるアカウントとして設定します。

twitterのアカウント設定の[「プライバシーとセキュリティ」](https://twitter.com/settings/safety)設定を選び、

![twitter_アカウント_プライバシーとセキュリティ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/68d79439-7306-07c1-f8e6-fc8e1a2dff87.png)

「チームでの使用」をオンにしてください。

![twitter_チームでの使用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/fdf766d6-f187-5ca4-566d-7cab39576936.png)

# developer登録

developer登録するには、https://developer.twitter.com/ から行います。ページの言語設定を日本語に変えることはできますが、殆どのページは日本語リソースが用意されておらず、英語に対処することになります。

![Twitter_Developerサイト入り口.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/bea38c6a-3cd7-d235-ba2d-98895b95c084.png)

未ログインの時は、右上の「Sign in」をクリックして、利用twitterアカウントでツイッターにログインしてください。

![Twitter_ログイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/4b4f5d10-aeb0-cef3-c2d9-2adb4186bef6.png)

ログインすると、上部右上に自身のtwitterアイコンが表示されるようになります。これからdeveloper登録申請を始めます。

![Twitter_Developerサイトログイン後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/045b3200-57e7-6883-ac15-76754a1d7c46.png)

ページの右上部の「Apply」をクリックすると次の図のようなページに遷移します。

![Twitter_アカウントのApply.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/27d2530f-9893-4ccb-d37b-0e607c65fcd9.png)

次に、ページ中段左の「Apply for a developer account」をクリックすると次の図のようなページに遷移します。

![Twitter_開発の主な理由.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/4fd55c4d-2a18-2f96-b475-682218c76fc4.png)

ここで、どのような目的でtwitter APIを使うのかという選択をします。
ここではSolitonNKでツイッター分析して社内で利用するということを想定し、「Building customized solutions in-house」を選んでチェックを入れ、次へボタンを押しました。

![Twitter_電話番号を聞かれる.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/831f6f6d-bc4a-42cc-c4a3-4f952aaab135.png)

おっとっと、赤字で警告されているのは、ちょっとした失敗で、電話番号が登録されていないという内容です。「Add a valid phone number」をクリックして、

![Twitter_電話番号入力.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/be59155e-1081-8b7c-de11-6c8ff34c627c.png)

電話番号を登録します。

![Twitter_アカウント確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/291c005c-17aa-ab1b-d108-25a676af770b.png)

電話番号を登録してアクセスしなおすと赤字の警告は消えていました。ここで、開発者登録するアカウント内容を再確認して右下の「Next」ボタンを押します。

![Twitter_素性と目的を問われる.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/601e8312-b46f-87d3-c415-99d495e10823.png)

開発チームの名前、所属組織名、組織のツイッターアカウント、顧客向け開発かどうかを回答して、「Next」ボタンを押して次のページに遷移します。

![Twitter_データの活用方法についての質問.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/215c93fd-75a9-a5fa-0d02-a25a286fea5b.png)

このページで、Twitter API を使って、どのような目的でどのような利用をするつもりなのかを英語で回答しなければなりません。この記述が詳細であればあるほど、レビューしやすくなり、承認が早くなると書かれています。ここが最も大きな山場といってよいでしょう。

参考のために、私がどのように記述したかを記しておきます。なお、「In your words」、つまり自分の言葉でと書かれているので、私のサンプルを丸写しするのは止めておいた方がよいと思います。手抜きすると承認されない可能性があります。

	Q. In English, please describe how you plan to use Twitter data and/or APIs. The more detailed the response, the easier it is to review and approve.
	A. We have developed and sold a data analysis tool named "SolitonNK" as a product. We are trying to make an example of how to utilize SolitonNK.
	The example should be described how SolitonNK with twitter can be used, and how to search and store the tweets about one's products or services, and analyze the the stored tweets to know and how well people rate the products and services with SolitonNK.

	Q. Are you planning to analyze Twitter data?
	A. Yes

	Q. Please describe how you will analyze Twitter data including any analysis of Tweets or Twitter users.
	A. Searching Tweets with the keyword of one's product or service name, and storing all of the results from that search to SolitonNK, and finding and counting tweets stored including the words about the product's rating, e.g., "excellent".

	Q. Do you plan to display Tweets or aggregate data about Twitter content outside of Twitter?
	A. Yes

	Q. Please describe how and where Tweets and/or data about Twitter content will be displayed outside of Twitter.
	A. Displaying how many tweets do we have that contain words that rate a particular product or service. The content of the tweet is not displayed.

![Twitter_入力内容確認画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/1c2cdbde-00d0-449c-60c7-3dee7cab2c87.png)

ツイッターAPIの利用目的を記入したら、アカウントと組織について再確認の画面が表示されます。間違いがないことを確認したら「looks good!」ボタンで進みます。

![Twitter_ライセンス確認画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/33db3e66-63c2-0b50-cc49-7ee70448cd67.png)

開発者規約が表示されますので、内容を確認してから、「Submit Application」を押して登録申請完了です。

![Twitter_申請後の画面（この後コンファームのメールが来る）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/8a7b2e89-e044-660d-ddc1-3a380462bf0d.png)

開発者登録申請が承認されるには、数時間から数日間を要するので待ってください。承認されると、Twitter Developer Accounts から「Verify your Twitter Developer Account」というタイトルの利用者のメールの到達性確認のメールが来ます。

![twitter_メール確認メール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/75e99268-1778-3b58-82d3-eb8974a4ca12.png)

このメールの中に示されたURLにアクセスすると、APIkeyとAPI_secretkeyとBearer_tokenが表示されます。

![Twitter_APIkeyとAPI_secretkeyとBearer_token（マスク済）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/92ced8e2-b5f8-0cb6-3893-759c3bcfd5b4.png)

このページにも注意が掲載されていますが、APIkeyとAPI_secretkeyとBearer_tokenは秘密情報ですので他者には絶対に示さないようにしてください。一方、これらの情報は一定時間経つと表示されなくなりますので、必ずコピーして手元に保存しておいてください。なお、万一これらの情報を紛失したり、他者に知られてしまった場合には、このページから別のKey類を発行し直すことができます。

これで twitter APIを使う準備が整いました。

# OAuth 2.0

[twitterは、OAuth 1.0a と OAuth 2.0 の認証をサポートしています。](https://developer.twitter.com/ja/docs/basics/authentication/overview/oauth)技術的に正確なところはおいといて、httpリクエストでtwitterの検索APIを使うには、OAuth 2.0のBearer_tokenを使う認証方式が最も簡便で、それはhttpヘッダに

	Authorization: Bearer "自身のbearer token"

を入れるだけで済みます。（Bearer_tokenの情報はdeveloper登録して入手済ですよね）

OAuthは、FacebookやLineなどのメジャーなSNSのAPIや、OpenIDなどにも採用されており、そうした認証が必要なサイトの情報を収集するのにも、本記事で説明する方法が活用できます。

# twitterの検索API

現在twitterのAPIには、[API v1.1 と、API v2 の2つのバージョン系列](https://developer.twitter.com/en/docs/api-reference-index)がありますが、検索APIは、アクセス頻度制限が緩いv2の[GET /2/tweets/search/recent](https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-recent)を使うのが良いです。

検索ワードは query= の形で指定しますが、日本語で検索する場合、検索ワードはURLエンコードして指定します。「ソリトンシステムズ」のワードで検索したい時、twitterのウェブページに行って、検索窓に「ソリトンシステムズ」と入れて検索し、

![twitter_「ソリトンシステムズ」で検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/84ef752b-9da7-ca10-b88e-2cab34f795c6.png)

そのURLをEditorなどにコピーペーストすると、

	https://twitter.com/search?q=%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%BA&src=typed_query

となりますが、この q= の後に続く、%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%BA が、「ソリトンシステムズ」をURLエンコードしたものになります。APIで「ソリトンシステムズ」を検索するときのアクセス先（エンドポイント）は、

	https://api.twitter.com/2/tweets/search/recent?query=%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%BA

になります。

# twitterで検索した結果をhttpインジェストするAnkoスクリプト

上記の内容を踏まえて、「ソリトンシステムズ」の検索ワードでtwitter検索した結果をSolitonNKにhttpインジェストするAnkoスクリプトは次のようになります。

	var http = import("net/http")
	var url1 = "https://api.twitter.com/2/tweets/search/recent?query=%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%BA"
	var url2 = "http://solitonNK.example.jp/snk"
	var bearer_token = "自身のbearer token"
	req, _ = http.NewRequest("GET", url1, nil)
	req.Header.Add("Authorization", "bearer "+ bearer_token)
	resp_get, _ = http.DefaultClient.Do(req)
	req, _ = http.NewRequest("POST", url2, resp_get.Body)
	req.Header.Add("Content-Type", "application/json")
	resp_post, _ = http.DefaultClient.Do(req)
	resp_post.Body.Close()
	resp_get.Body.Close()

このAnkoスクリプトをSolitonNKの「スケジュール検索」に登録すれば、twitter検索の結果をインジェストすることができます。

# 結果

上記のAnkoスクリプトを実行させた結果をSolitonNKで tag=http limit 1 として検索すると次のように確認できます。

![twitter_「ソリトンシステムズ」で検索_インジェスト結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480441/5e9297f4-9a83-34bd-7e6c-7aafabbd0095.png)

このようにして、自社や自社製品の評判について、twitterのツイートから抽出することが可能になります。

# レファレンス

Soliton NKを試したい人はの下の Soliton NK 公式サポートサイトでお申し込み下さい。

https://www.solitonnk.com/

Soliton NK について、今後記事を追加していく予定です。