毎秒約6,000件(1分間に35万件以上、1日5億件、1年で約2000億件)のツイートがあることを考えると、興味のないツイートが雪崩のように流れてくるのではなく、特定のテーマに関連するものを検索できたら素晴らしいことです。そこで朗報です。Twitterは、ツイートの検索に最適な REST Search APIを提供しています。
この記事では、4DでTwitterのSearch APIを 使用する方法について説明します(データベースの例へジャンプします)。
Twitterのアクセストークン
TwitterのSearch APIを使用するには、アクセストークンが必要です。これは、APIにリクエストを送信するために必須です。これらのトークンを取得するためには、Twitterアプリケーションを作成する必要があります(無料ですが、必要なステップです)。
- Twitterのアカウントを作成する(まだ持っていない場合)。
- https://dev.twitter.com/apps/newにアクセスし、ログインします。
- 新しいアプリを作成」ボタンをクリックし、フォームに記入し、規約に同意して「Twitterアプリを作成」ボタンをクリックします。
- 次に、”Keys and Access Tokens” タブで、”API key” と “API secret” をコピーします。
- 下にスクロールして、「Create my access token」をクリックします。アクセストークン “と “アクセストークンシークレット “をコピーします。これで、あなたのTwitterアカウントに、このAPIを使用するためのアクセス権が与えられました。すると、こうなります。
注意:これらのトークンは、パスワードと同様に機密性が高いと考えるべきであり、信頼できない相手と共有したり配布したりしてはいけません。
認証
トークンを手に入れたので、手を動かして認証コードを書きましょう。これには、「アプリケーションのみの認証」処理を使います。これは、アプリケーションが特定のユーザーを代表してではなく、 自分自身のために認証済みリクエストを発行できるようにするものです。このプロセスでは、アプリケーションに次のことを要求します。
- コンシューマーキーとシークレットをエンコードする。
- POST oauth2 / tokenエンドポイントにリクエストを行い、これらの認証情報をベアラートークンに交換する。
- このベアラートークンを、REST API にアクセスする際の認証に使用する。
4Dで行う方法は、以下の通りです。
- コンシューマーキーとエンコードされたコンシューマーシークレットをコロン文字「:」で結合し、1つの文字列とします。
- コマンドで文字列をBLOBに変換します。 TEXT TO BLOBコマンドで文字列をBLOBに変換します。
- コマンドでBLOBをエンコードします。 BASE64 ENCODEコマンドでエンコードします。
SET BLOB SIZE(vxBlob;0)
$consumerKey :="your consumer key here"
$consumerSecret :="your consumer secret here"
TEXT TO BLOB ($consumerKey+": "+$consumerSecret;vxBlob;UTF8 text without length)
BASE64 ENCODE (
vxBlob;$authBasicTxt
)
- 結果として得られる値は、POST oauth2 / tokenへのリクエストを発行して、ベアラートークンと交換する必要があります。このリクエストは、4D HTTP RequestコマンドとHTTP POST method セレクタを使用して行われます。このリクエストには、Authorization ヘッダーと、Content-Type 、リクエストのボディを含める必要があります。grant_type=client_credentials.
$authRequestContentAPPEND:="grant_type=client_credentials"
ARRAY TEXT ($arrHeadAttr;0)
ARRAY TEXT ($arrHeadValue;0)
APPEND TO ARRAY ($arrHeadAttr; "Authorization")
APPEND TO ARRAY ($arrHeadAttr; "Content-Type")
TO ARRAY $arrHeadValue ; "Basic "+$authBasicTxt)
APPEND TO ARRAY ($arrHeadValue; "application/x-www-form-urlencoded;charset=UTF-8")
$url :="https://api.twitter.com/oauth2/token"
C_TEXT($response)
$result :=HTTP Request(HTTP POST method;$url;$authRequestContent;$response;$arrHeadAttr;$arrHeadValue;*)
- レスポンスステータスコードが200であることを確認し、HTTPリクエストが成功したことを確認します。(HTTPのステータスコードについて詳しくはこちら)
- コマンドでHTTPレスポンスをパースします。 JSON Parse コマンドでHTTPレスポンスを解析し、access_token プロパティの値を変数に格納します。
C_OBJECT($jsonResponse)
$jsonResponse:=JSON Parse($response)
$accessToken :=OB Get($jsonResponse; "access_token";Is text)
- このベアラートークンを使って、検索APIにリクエストを出します(詳しくはツイートの検索で)。コピーして大切に保管してください。
ツイートを検索する
複雑な部分はこれで終わりです。アクセストークンが手に入ったので、それを使ってGET search/tweets.jsonにリクエストを出すことができます。
$accessToken:="Your access token from the authentication section"
” )
ARRAY TEXT ($searchArrHeadAttr;0)
ARRAY TEXT ($searchArrHeadValue;0)
APPEND TO ARRAY ($searchArrHeadAttr; "Authorization")
APPEND TO ARRAY ($searchArrHeadValue; "Bearer "+$accessToken
$query:="平和"
$url :="https://api.twitter.com/1.1/search/tweets.json?q="+$query
$result :=HTTP Request(HTTP GET method;$url;$searchBody;$searchReponse;$searchArrHeadAttr;$searchArrHeadValue;*)
デバッガで 、変数 $searchResponse を Expression ウィンドウにドラッグ すると、その結果にクエリに一致するキーワードが含まれていることに気がつくでしょう。
以下は、「peace」キーワードに対する単純化されたJSONレスポンスです。
{ "statuses":[ { "created_at": "Tue Nov 21 09:51:09 +0000 2017", "id":932909235528183808, "id_str": "932909235528183808", "text": "RT @AraiEij:@pintsize73 \May your birthday and every day be filled with love, peace and joy", ... 続きを読む "retweeted_status":{ "created_at": "Sun Nov 19 05:48:49 +0000 2017", "id":932123476025946112, "id_str": "932123476025946112", "text":"@pintsize73 Happy Birthday dear Marie \nMay your birthday and every day be filled with love, peace", "truncated":true, "entities":{ "hashtags":[], "user_mentions":[ {...} ], "urls":[] }, "metadata":{ "iso_language_code": "en", "result_type": "recent" }. } } ], "search_metadata":{ ... "query": "Peace", "refresh_url":"?since_id=932909235528183808&q=Peace&include_entities=1", ...} }.
また、検索結果の UI を少し見てみましょう。
サンプルでもっと見る
アプリケーションの例をご覧ください。この例では、いくつかのステップを 踏む必要があることに注意してください。実際、デモを実行するには、Twitterのアクセストークンを取得する 必要があります。