Gaaaon
PR.ready_
【難解!?】Twitter APIを使って投稿データを収集する方法
AI/Tech

【難解!?】Twitter APIを使って投稿データを収集する方法

Twitter Search APIを非エンジニア向けに分かりやすく解説。データ取得には①Twitter検索、②Twitter API利用、③SaaS系サービス利用の3種類があり、API利用にはデベロッパー申請が必要。Pythonでデータを取得する具体的な手順や費用、3種類のプランの違いまで網羅的に紹介します。

SHARE

主なポイント

Twitter APIを使った投稿データの収集方法を非エンジニア向けに解説しています。データ取得には①Twitter検索、②Twitter API利用、③SaaS系サービス利用の3種類があります。API利用にはデベロッパー申請が必要で、Pythonでデータを取得できます。

2020-06-21 19:06

※Twitter APIは、今後Twitter API v2という新しい仕組みに変更される予定です。サーチAPIに関しては無料のStandard APIのみの変更であり、2020年9月の段階では今回メインで解説しているPremium APIにはまだ影響はないようです。詳細は公式アナウンスなどをご参照ください。

blog.twitter.com/…NewTwitterAPI.html

【難解?】Twitter APIを使って投稿データを収集する方法

【難解?】Twitter APIを使って投稿データを収集する方法

※無料で使える最新V2での取得方法は下記の記事などもご参照ください。

特定のツイートにいいねしたユーザーを抽出する方法【v2】

【Twitter API v2】特定のユーザーのいいね履歴を調べる方法

※取得したTwitterデータを自社サービスなどで商用利用される際はTwitter社の規約を遵守してください

Twitterでつぶやかれたデータやフォロワー数などのデータは、Twitterの検索機能から探すだけでなく、Twitter APIの中の Search APIという機能を使うことで、ツイートを検索してまとめて取得することができます。

ただし、このTwitter API機能。基本全て英語であり、事前の登録が必要なことや、プログラムのコードを書く必要があることから、データを取得したいというマーケターからは非常にとっつきにくいと思われているようです。

一方で口コミデータの取得・分析は、広報PR活動でもマストとされており、こうした機能をうまく使いこなしていく必要があります。利用方法などはWEBで多数解説されていますが、下記のような問題を感じました。

エンジニアが書く説明文章は、はっきり言って、とても分かりづらい!

Googleの検索結果にはこうした分かりづらい解説ページばかりが上位に上がってくる

Qiitaなど“やってみた系自己満コード解説”はマーケターの実務の役にはあまり役立たない

そこで当ブログでは、このTwitter Search APIを非エンジニアの方にも、なるべく分かりやすく解説し、全体概要を解説した上で、具体的なデータ取得方法まで解説していきたいと思います。

Twitterのデータを取得する方法

Twitterデータの取得には大きく3種類の方法が挙げられます。

Twitterで検索する

Twitter APIを利用する

Twitter APIを利用したWEB(SaaS系)サービスを利用する

世界中のTwitterデータは、APIデータとしてGNIPというデータ管理子会社が独占で販売しており、日本国内ではNTTデータ社がFireHose契約(最上位プラン)という全量データを利用できる独占契約を結んでいるようです。

こうしたデータは、イマツイや口コミ分析サービスである「なずきのおと」などで提供されているほか、ホットリンク社の「BuzzSpreader(旧口コミ係長)」や、それらに紐づくOEMサービスなど様々なツールで使われています。

予算がかけられるのであれば、こうしたWEBツールを活用するのがてっとり早いでしょう。ただしほとんどが月額課金のSaaSモデルで、いいね数や地理データが取れなかったりと、取得できるデータも限られているため、短期的に使うのであれば今の所APIを活用したほうがお得かもしれません。

ここからは実際にTwitter Search APIを利用して、ツイートを実際に取得するまでの流れを解説します。

Twitter Search APIとは<使い方と3つのハードル>

Twitter Search APIとは、Twitterの投稿データを検索して取得できるTwitterAPI一つで、検索するクエリを指定することで投稿データを抽出することができます。

Twitter Search API:developer.twitter.com/…ts/search/overview

Twitter Seach APIは、利用するためのデベロッパー登録、API各プランとデータ取得コードの理解の3STEPが分かれば、使いこなせます。

STEP1:デベロッパー申請

STEP2:Twitter Search APIのプランを理解

STEP3:データ取得コードを理解

それぞれ細かくみていきたいと思います。

STEP1. Twitter APIを使うための最初のハードル「デベロッパー申請」

Twitter APIを使うには、まずデベロッパー申請というものが必要になります(開発者でなくても申請すれば問題なく通ります)。これが全て英語であることや、申請目的を記載する必要があることから、最初の大きなハードルとなっているようです。

デベロッパー登録までの具体的な方法は、テキストで解説するよりも下記You Tubeを参考にするのが断然おすすめです。

STEP2. 料金・機能・制限など3種類のプランを解説

TwitterのAPIは、大きく5つのAPI機能に分かれています。

  • キーワードを検索できる「サーチAPI」

  • アカウントプロフィールを扱う「アカウントAPI」

  • 今現在のツイートを扱う「リアルタイムAPI」

  • DM機能の「ダイレクトメッセージAPI」

  • 広告機能と連携できる「広告API」

そしてサーチAPIには、

  • Standard APIs(無料)

  • Premium APIs(一部有料)

  • Enterprize APIs(有料)

と3つのプランが用意されています。

STEP2. 料金・機能・制限など3種類のプランを解説

STEP2. 料金・機能・制限など3種類のプランを解説

ここからが複雑になり分かりづらいのですが、Standardは過去7日間のツイートデータを無料で手に入れることができ、Premiumは過去30日間/もしくは2006年過去ログ全てからの抽出(一部無料で使えるので混乱しやすい)という分類となります。

Enterprizeは企業向けの相当高額な個別メニューと思われ、WEBでも詳細は記載されていないので、詳細は省きます。

この3つのプランと3種の検索方法と費用を下記にまとめてみます。

STEP2. 料金・機能・制限など3種類のプランを解説

無料のStandardプランは過去7日間のデータを取得できますが、取得できるのは一部のサンプルデータに制限されており、完全検索を行うにはPremium以上が必要なことが分かります。

そして取得できるデータ上限数は少ないものの、PremiumプランにSandboxという、一部無料で使うことができるプランがあることが分かります。

金額を見ると分かるように、過去30日のデータ(1投稿あたり約0.05円)よりもアーカイブデータ(1投稿あたり約0.2円)のほうが割高(約4倍)に価格設定されていることが分かります。

Sandboxでは検索ボリューム(投稿数)は調べられないので、検索数を調べたい場合はPremiumプランを契約する必要があります。

なおAPIの契約はクレジットカード(オンライン/JCB不可)で可能です。

【ここまでのまとめ】

  • Twitterの口コミデータはAPI機能を使って収集できる

  • Twitter APIには無料版と有料版がある

  • 2つのPremiumプランをともに限界まで使うと合わせて月$4,400ほどかかる

  • 無料で使うにはPremiumプランのSandboxが最適(過去30日データなら月間25,000ツイート、フルアーカイブなら月間5,000ツイートまで取得可能)

STEP2. 料金・機能・制限など3種類のプランを解説

STEP2. 料金・機能・制限など3種類のプランを解説

STEP3. 実際のデータの取得方法(by Python)

ここからはデベロッパー登録が完了したことを前提で解説していきます。

データ取得に関しては、Python等のプログラム言語で取得していきます。

基本的な流れとしては、

  • Twitterの認証を通す

  • 検索したい手法(7日/30日/アーカイブ)に応じてそれぞれURLを設定する

  • パラメーターに検索したワードを設定しget関数でデータを取得

  • JsonオブジェクトとしてDLされたデータを扱いやすいデータ(辞書)等に加工

  • pandas等で集計しcsvやエクセルファイルに落としたり色々分析してみる

という流れになります。

環境構築や各ライブラリのインストールなどは一旦省き、データ取得までのコードの流れを解説していきます。

#JSONとOAuth認証用のライブラリを使用 import json from requests_oauthlib import OAuth1Session #取得した認証キーを設定 CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxx" CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxx" ACCESS_TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxx" ACCESS_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxx" twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_SECRET) #API用のURLを設定(●にはデベロッパー管理画面のDev environment labelを入力) url = "https://api.twitter.com/1.1/tweets/search/30day/●.json" #paramsに検索ワードや件数、日付などを入力 params = {'query' : 'Twitter API', #検索したいワード "maxResults" : "100"} #取得件数 #上記で設定したパラメーターをget関数を使い指定URLから取得 res = twitter.get(url, params = params)

このあとのコード自体はかなり雑なものなのですが、後でcsvで吐き出せるよう各Tweetデータをリストにいれていきます。

#ステータスコードが正常値(200)だった場合の処理 if res.status_code == 200: #後でpandasで処理するためリスト化 created_at = [] text = [] retweet_count = [] favorite_count = [] name = [] followers_count = [] friends_count = [] statuses_count = [] #100件を超えるデータ用に繰り返し処理で対応 while True: res = twitter.get(url, params = params) tweets = json.loads(res.text) tweet_list = tweets["results"] for tweet in tweet_list: created_at.append(tweet["created_at"]) #投稿日時 text.append(tweet["text"]) #投稿本文 retweet_count.append(tweet["retweet_count"]) #リツイート数 favorite_count.append(tweet["favorite_count"]) #いいね数 user = tweet["user"] name.append(user["name"]) #名前 followers_count.append(user["followers_count"]) #フォロワー数 friends_count.append(user["friends_count"]) #フォロー数 statuses_count.append(user["statuses_count"]) #投稿数 #対象Tweetが101件以上となりnextページがある場合 if "next" in tweets.keys(): #nextの値をパラメータに追加する params['next'] = tweets["next"] print(params) tweet_list = tweets["results"] #nextページがない場合(100件以内の場合と最終ページ用) else: print("最終ページなので取得終了") break else: print("ERROR: %d" % res.status_code)

Twitter Search APIで取得できる情報

Twitter Search APIで取得できる情報

上記は上のコードで検索キーワードを「ツイッター API」と設定して取得してみたものです。

リツイート情報は頭に「RT」が、メンションの場合は頭に「@」が付いた状態でテキストデータが出力されています。

パラメーター(params = {●●●}の箇所)に設定すれば、フォロワーやリツイート数などはもちろんのこと、これまでの投稿数や場所データ、ハッシュタグなど様々な情報を取得することができます。

100件を超える情報の取得方法

1点面倒なのが、取得データが100件(または500件)を超える場合です。

standardプランとpremium(sanbox)プランでは、リクエスト1回あたりの取得キーワードは100件、Premiumプランでは500件と制限があり、複数に渡ってリクエストをかける必要があります。

101件以上データがある場合は、落としてきたデータ(JSON)の後半部分に、新たに"next"というキーが表示されます。

#リクエストで落としてきたJSONデータ #(省略) 'matching_rules': [{'tag': None}]}], 'next': 'eyJtYXhJZCI6MTI3MjMyM●●●', #←ここにnextという値が現れる 'requestParameters': {'maxResults': 100,

#(省略)

このnextの値が、いわゆる次ページの指定であり、100(500)ページごとに新たに加わり、この値を次ページを読み込むために、パラメーターに指定し、これを最終ページまで繰り返します。

#パラメータに次ページの情報(next)を新たに追加し、これを最終ページまで繰り返す {'query': 'ツイッター API', 'maxResults': '100', 'next': 'eyJtYXhJZCI6MTI3MjMyM●●●'} #"next"を新たに追加

データをどう使うか

ここまで具体的なデータ取得方法を解説してきましたが、Twitterなどの口コミデータ(過去データ)は、グラフ化してみると、それだけで何となく見た目が様になってしまいます。

そのため、データを抽出してまとめるだけで、それなりの分析ができた気になってしまうケースが非常に多いように感じます。

しかし大事なのは、未来への打ち手としてどう活用するかです。

朝日新聞は先日、新型コロナウイルスに関するツイートデータを分析しました。

(新型コロナ)感染拡大、何をつぶやいた? ツイート1.8億件を分析:朝日新聞デジタル  新型コロナウイルスは、人々の感情にどのような影響を与えてきたのか。1月から6月初旬までにツイッターに投稿された新型コロナ関連の約1億8600万件の内容を分析したところ、「怖」や「厭(いや)」などの負… 朝日新聞デジタル

鳥海准教授は「2月末の一斉休校呼びかけで感染が自分事となり、3月末の志村さん死去で非常な恐怖となった。二つの出来事が大きな節目になったと思われる」と分析する。

一方で、3月20~22日の3連休は東京都内で桜が満開になり、全国的にも外出する人が増えたとされる。コロナ関連のツイートも一時的に減少。内容も「怖」の感情がその前後と比べて顕著に減り、「不安」「心配」などの単語の出現数も少なくなっていた。

鳥海准教授は「実際に一種の気の緩みが生じていたことを表すのではないか」とし、「人々の緊張感の緩みをSNS上でいち早くつかむことは、感染防止対策を講じるうえで有効だろう」とする。

記事の中では、志村けんさん死亡のニュースタイミングで恐怖感情のピークとなり、Twitterデータから心の緩みを掴むことで、今後の感染防止対策に繋げられるのでは、とまとめられています。

こうしたデータを行動データと結びつければ、今週のツイートデータから次週の人手を予測できるモデルを作れるかもしれません。

このように過去のデータはただの過去の歴史であり、効果検証には良いかもしれませんが、未来の打ち手となって初めて価値が上がるものです。

データ収集・分析は、ある程度仮説を作ってから取り掛かることがより重要となってくるでしょう。

※当社ではTwitterやInstagramなどのデータ抽出や、データスクレイピングの代行も行っています。ご依頼の際は、お問い合せフォームよりお気軽にお問い合せください。

データをどう使うか

SHARE