17
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Twitter Premium Search API を使ってツイートを取得する

Twitter Premium Search API を利用することで、過去の全てのツイートから、自分の指定する条件にマッチしたツイートだけを取得することができます。このページでは、Twitter Premium Search APIの仕組み、指定できる条件、返ってくるデータ形式について解説しています。

Twitter Premium Search API は、Twitterの有料プランを契約している開発者のみが利用できます。Twitter Premium Search APIを使ったお仕事のご依頼、ご相談については、@ts_3156 までお気軽にご連絡ください。

Twitter Premium Search API とは

ツイッター社が提供する、「過去の全てのツイートから、指定した検索条件にマッチしたツイートだけを取得する機能」のことです。この機能を使うことで、直近のツイートだけでなく、大量の過去ツイートから、高度な条件を指定したツイートの抽出をAPIを介して行うことができるようになります。検索条件には、通常の検索条件に加えて、Premium Searchのより高度な条件を指定することができます。

※Twitter Premium Search APIは、Twitterの有料プランを契約している開発者のみが利用できます。

Twitter Search API の種類

ツイートの取得を行うAPIには、取得できるツイートの期間、プランの金額に応じていくつかの選択肢があります。

Standard Search API

通常のREST APIです。無料で誰でも利用できますが、取得できるツイートは直近の7日間までです。無料で手軽に使えますが、制限が厳しいため、小規模なデータ取得にしか利用できません。

Premium Search API (30 days)

有料のAPIです。直近の30日間のツイートを取得することができます。直近のツイートに限って中規模のデータ取得を行う場合に適しています。

Premium Search API (full archive)

有料のAPIです。過去の全ての期間(2006年〜)のツイートを取得することができます。過去の全ての期間から中規模のデータ取得を行う場合に適しています。

Enterprise Search API (30 days)

有料のAPIです。直近の30日間のツイートを取得することができます。Premiumプランと比較して、さらに大量のツイート取得が出来るようになっています。直近のツイートに限って大規模なデータ取得を行う場合に適しています。

Enterprise Search API (full archive)

有料のAPIです。過去の全ての期間(2006年〜)のツイートを取得することができます。Premiumプランと比較して、さらに大量のツイート取得が出来るようになっています。過去の全ての期間から大規模なデータ取得を行う場合に適しています。

PowerTrack API

有料のAPIです。リアルタイムなツイートから指定した条件にマッチしたツイートを取得することに特化しています。詳細は PowerTrack API を使ってツイートを取得する をご参照ください。

Historical PowerTrack API

有料のAPIです。過去の全ての期間(2006年〜)のツイートから、指定した条件にマッチしたツイートを取得することに特化しています。Search APIはページング、Historical PowerTrack APIはバッチ処理を使ってツイートの配列を取得します。詳細は Historical PowerTrack API を使ってツイートを取得する をご参照ください。

Twitter Premium Search API にRubyからアクセスする

Twitterが公式に提供している Ruby client for the Twitter Search APIs を利用することで、簡単にPremium Search APIにアクセスすることができます。

  1. Twitter Developers を参考にTwitter Appを1つ作成する
  2. Using Bearer Tokens を参考にBearer Tokensを作成する
  3. search-tweets-rubygit cloneする

上記の手順が完了したら、config/config.yamlを編集します。passwordaccount_nameはPremium Search APIであれば空欄のままで大丈夫です。

config/config.yaml
options:
  search_type: premium # or enterprise
  archive: 30day # or fullarchive
  max_results: 100 # sandbox
  write_mode: standard-out
  out_box: ./output
  counts_to_standard_out: true
  compress_files: false

auth:
  app_token: [Bearer Token]
  password:

labels:
  environment: dev
  account_name:

提供されているRubyクライアントを利用することで、下記の1行だけでPremium Search APIにアクセスできます。

bundle exec ruby search-app.rb -r "from:TwitterDev" -s 14d >out.json

out.jsonの中身は下記のようになります。1行ずつに分かれたJSON形式でツイートが取得できています。

Getting activities for rule: from:TwitterDev
Retrieving data from 202003200306 to now.  ...
{"created_at":"Mon Mar 30 16:18:45 +0000 2020","id":1244660343646957568,"id_str":"1244660343646957568","text":"RT @getpostman: Those on the front lines
{"created_at":"Fri Mar 27 20:10:59 +0000 2020","id":1243631624945717248,"id_str":"1243631624945717248","text":"Update: We’re continuing to see increase
{"created_at":"Mon Mar 23 22:01:13 +0000 2020","id":1242209814706438144,"id_str":"1242209814706438144","text":"As we work to keep our employees safe du
{"created_at":"Mon Mar 23 16:26:09 +0000 2020","id":1242125490543976449,"id_str":"1242125490543976449","text":"The Tweets and recent search endpoints w
{"created_at":"Mon Mar 23 16:26:08 +0000 2020","id":1242125486844604425,"id_str":"1242125486844604425","text":"A few months ago, we added Tweet annotat
Exiting

Twitter Premium Search API で使える検索条件

ツイートテキストに対するマッチング

  • keyword
    • キーワード
  • "quoted phrase"
    • 連続したフレーズ
  • #
    • ツイートに含まれるハッシュタグ
  • @
    • ツイートに含まれるリプライ
  • url:
    • ツイートに含まれるURL
  • lang:
    • ツイートの言語

アカウントに対するマッチング

  • from:
    • ツイートの作者
  • to:
    • ツイートのリプライ先
  • retweets_of:
    • リツイート元

ツイートの属性のマッチング

  • is:retweet
  • has:mentions
  • has:hashtags
  • has:media
  • has:videos
  • has:images
  • has:links
  • is:verified

ツイートの地理情報のマッチング

bounding_box:[west_long south_lat east_long north_lat]
point_radius:[lon lat radius]
has:geo
place:
place_country:
has:profile_geo
profile_country:
profile_region:
profile_locality:

Twitter Premium Search API を使った仕事のご依頼について

Twitter Premium Search API は、Twitterの有料プランを契約している開発者のみが利用できます。Twitter Premium Search APIを使ったお仕事のご依頼、ご相談については、@ts_3156 までお気軽にご連絡ください。

具体的に何をするのかが決まっていない場合であっても、御社のニーズとこのAPIで出来ることのご相談から承っております。

Twitter PowerTrack API を使ってツイートを取得する
Twitter Historical PowerTrack API を使ってツイートを取得する
Twitter Engagement API を使ってツイートを取得する
Twitter Premium Search API を使ってツイートを取得する

Twitter Premium Search APIと類似するその他のAPI

リアルタイム

リアルタイムにデータを取得することができる。

  • PowerTrack API
    • リアルタイムなデータにルール/フィルタを適用したツイートを取得するAPI。
  • Decahose stream
    • リアルタイムデータからサンプリングされた10%のツイートを取得するAPI。キーワード等でのフィルタリング機能はない
  • Account Activity API
    • 指定したアカウントの活動を取得するためのAPI。例:ツイート、メンション、リツイート、フォロー、DMの送受信

ヒストリカル

過去の全ツイートから指定した条件にマッチするツイートのみを取得することができる。

  • 30-Days Search API
    • 過去30日の完全なツイートから条件にマッチしたツイートを取得するAPI
  • Full-Archive Search API
    • 過去の全期間のツイートから条件にマッチしたツイートを取得するAPI
  • Historical PowerTrack API
    • 過去の全期間のツイートに対してバッチジョブ形式でツイート取得を行うAPI

インサイト

ツイートに対するユーザーからの反応を取得することができる。例:ツイートのインプレッション、エンゲージメント、お気に入り、リツイート、リプライ、ビデオビュー

  • Engagement API
    • 自分のツイートのインプレッション、エンゲージメント、全てのツイートのお気に入り、リツイート、リプライ、ビデオビューを取得するAPI

Twitter APIのRubyクライアント

RubyからTwitter APIへアクセスするクライアントにはいくつかの種類がある。

twitter gem

非公式のTwitter REST APIクライアント。通常のREST APIであればほとんど全てを網羅している。

twitter gem

search-tweets-ruby

公式のPremium Search API、Enterprise Search APIに対応したライブラリ。gemではなく、通常のRubyコードとして提供されている。


search-tweets-ruby

twitter-ads gem

公式のTwitter Ads APIクライアント。

twitter-ads gem

関連リンク

Filter realtime Tweets
Get batch historical Tweets
Get Tweet engagement
Rules and filtering
Twitter Enterprise

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
17
Help us understand the problem. What are the problem?