Skip to main content

はじめに

このチュートリアルでは、プログラミング言語 R と X API v2 を使い始めるために必要なことを順を追って説明します。R を使って user lookup エンドポイントに接続し、X API から返される JSON をどのように扱うかを紹介します。User lookup は GET メソッドで、ユーザー ID または ユーザー名で指定された 1 人または複数のユーザーに関する情報を返します。 R に馴染みがない場合、R は時系列解析、モデリング、可視化、そのほかのデータ分析といった一般的なデータサイエンスのタスクに広く用いられる代表的な言語の 1 つであり、X API と組み合わせて利用されることもよくあります。user lookup エンドポイントを使用すると、 user object を利用して、 ある人が持つフォロワー数と、その人の自己紹介文 (bio) のセンチメントスコアとの相関関係を調べることができます。user object はまた、プロフィールに公開されている所在地情報に基づいてアカウントのグループをマッピングするためにも使用できます。

X API を使い始める

X API v2 を利用する前に、まず 登録 して開発者アカウントを作成する必要があります。 開発者アカウントが承認されたら、最初に Project を作成する必要があります。Project を使用すると、X API をどのように利用するかに基づいて作業を整理できるため、API へのアクセスを効率的に管理し、利用状況を監視できます。 各 Project には App が含まれており、X API を利用するために必要な認証情報をそこで生成できます。X API の使い始め方の詳細については、ドキュメント内の Getting started セクションを参照してください。

R 環境のセットアップ

まず最初に、R をダウンロードする必要があります。これは CRAN のサイトから行えます。 その後、R で作業するための環境を整えるには、 RStudioVisual Studio Code 用の R 拡張パック、 あるいは Python に慣れている場合は Jupyter notebook を利用できます。

環境変数の設定

これから紹介するコード例を実行するために、ベアラートークン用の 環境変数を作成しておく必要があります。ベアラートークンは、X API に対して 認証を行い、リクエストを送信できるようにするためのものです。まず最初に、 “your-bearer-token” をご自身のベアラートークンに置き換えてください。これは、 開発者コンソールの App の「Keys and tokens」セクションから取得できます。 スクリプトを書き始める前に、この 1 行のコードをコンソールで実行しておく必要があります。
Sys.setenv(BEARER_TOKEN = "your-bearer-token")

リクエストの送信

パッケージ httr を使用して X API への HTTP リクエストを送信できます。まだインストールしていない場合は、 コンソールからこのパッケージをインストールしてください。さらに、 JSON オブジェクトを扱うための jsonlite と、 データ操作用の dplyr の各パッケージもインストールしておく必要があります。
install.packages("httr")
install.packages("jsonlite")
install.packages("dplyr")
API に接続するための R スクリプトの作成を始めましょう。ファイルの先頭で、 httr、jsonlite、dplyr パッケージを読み込みます。
require(httr)
require(jsonlite)
require(dplyr)
コードサンプルの最初のステップは、X API に対する認証の準備を行うことです。 App から取得した ベアラートークン を用意し、それを認証用としてヘッダーに渡します。以下の例では、$BEARER_TOKEN を自身のトークンに置き換えてください。
bearer_token <- Sys.getenv("$BEARER_TOKEN")
headers <- c(`Authorization` = sprintf('Bearer %s', bearer_token))
認証の設定が完了したら、リクエストのパラメータを定義します。 デフォルトでは、取得する各ユーザーについて、その id、name、username が返されます。 このペイロードは、追加のフィールドexpansions を指定することで調整できます。 この例では、user.fields=description を使ってユーザーのプロフィールの自己紹介文を要求し、 さらにユーザーの固定ポストを含めるように expansions を指定します。
params <- list(`user.fields` = 'description', `expansions` = 'pinned_tweet_id')
これで、より詳しい情報を取得したい対象である X のハンドル (アカウント名) を使って URL を組み立てる準備ができました。readline メソッドを使用して、このサンプルを再利用可能にしましょう。調べたいハンドルを入力したら、$USERNAME を目的の X ハンドルに置き換えて、指定したハンドルを含むように URL を構成します。
handle <- readline('$USERNAME')
url_handle <- sprintf('https://api.x.com/2/users/by?usernames=%s', handle)
ここまで来たら、先ほど作成した URL に対して GET リクエストを送るために httr パッケージを使用し、ヘッダーで認証情報を渡し、さらに定義したパラメータも指定します。レスポンスはテキストオブジェクトとして変数 obj に保存し、これを出力することで実行したリクエストの結果を確認できます。
response <-
  httr::GET(url = url_handle,
    httr::add_headers(.headers = headers),
    query = params)
obj <- httr::content(response, as = "text")
print(obj)

JSON ペイロードの扱い方

JSON を扱ううえでおすすめの方法のひとつは、データフレームを使うことです。データフレームを使うと、複雑にネストされたデータにも簡単にアクセスできます。これを行うには、jsonlite パッケージの fromJSON メソッドを使ってファイルをフラット化し、フィールドが同じオブジェクトとして扱えるようにします。その後、そのオブジェクトをデータフレームに渡します。これで、このデータフレームを確認する準備が整いました。
json_data <- fromJSON(obj, flatten = TRUE) %>% as.data.frame View(json_data)
データフレームからデータのフィールドにアクセスし、それらをハンドル、ユーザー名、自己紹介文を含む文字列として組み立てることができます。
final <-
  sprintf(
    "Handle: %s\nBio: %s\nPinned Post: %s",
    json_data$data.username,
    json_data$data.description,
    json_data$includes.tweets.text
  )
取得している各フィールドごとに改行してオブジェクトを表示するには、print ではなく cat を使用してください。
cat(final)
複数のハンドルに対してリクエストを行っている場合は、ループを使うことで各データフレームの要素に簡単にアクセスできます。

結論

このチュートリアルが、R と X API を使い始めるための出発点となれば幸いです。次のステップとして、最近の検索、ポストのルックアップ、ユーザーのルックアップ向けの R サンプルについて、弊社の v2 サンプルコード を確認してみてください。途中で問題が発生した場合は フォーラム からお知らせいただくか、このチュートリアルから着想を得て何かを作成された場合は @XDevelopers へポストしてください。