ご注意: X API v2 で search Posts と Post counts の新バージョンをリリースしました。X API v2 の新機能をご確認ください。 これらの endpoint は、Post の編集 metadata を含むように更新されています。詳細は「“Edit Posts” の基礎」ページをご覧ください。
概要
Enterprise
Enterprise API は、当社のマネージドアクセスレベルでのみご利用いただけます。これらの API を使用するには、まず当社の Enterprise セールスチームとのアカウント設定が必要です。詳細はこちらをご覧ください。
X API における検索向けの Post 提供一覧はこちらでご確認いただけます。
Enterprise 検索 API は 2 種類あります:
- 30-Day Search API は、直近 30 日間のデータを提供します。
- Full-Archive Search API は、2006 年 3 月の最初の Post まで遡る X の全データコーパスへ完全かつ即時にアクセスできます。
リクエストの種類
検索リクエスト(data)
カウントリクエスト(Post 数)
利用可能なオペレーター
Post コンテンツでのマッチング: | 対象アカウントでのマッチング: | Post の属性: | 地理空間オペレーター: |
* キーワード * “引用フレーズ” * “keyword1 keyword2”~N * # * @ * $ * url: * lang: | * from: * to: * retweets_of: | * is:retweet * has:mentions * has:hashtags * has:media * has:videos * has:images * has:links * has:symbols * is:verified * -is:nullcast(否定専用オペレーター) | * 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: |
データの可用性/重要な日付
- 最初の Post: 2006/3/21
- 最初のネイティブリツイート: 2009/11/6
- 最初のジオタグ付き Post: 2009/11/19
- フィルタリングのために URL が初めてインデックス化: 2011/8/27
- 拡張 URL 展開 metadata(ウェブサイトのタイトルと説明): 2014/12/1
- プロファイル Geo エンリッチメント metadata とフィルタリング: 2015/2/17
データの更新と可変性
- ユーザーオブジェクトの metadata:
- ユーザーの @handle(数値の id は変わりません)
- Bio(自己紹介)
- カウント: statuses、followers、friends、favorites、lists
- プロフィールの位置情報
- タイムゾーンや言語などのその他の詳細
- Post の統計値 — すなわち、ユーザーの操作によってプラットフォーム上で変更されうるもの(以下の例):
- Favorites 数
- リツイート数
シングルスレッド vs. マルチスレッドのリクエスト
リトライ ロジック
- 対象期間を短くしてリクエストを再試行します。改善しない場合は、最短で 6 時間の時間枠になるまで段階的に短縮して繰り返します。
- 多数の語句を OR で結合している場合は、別々のルールに分割し、それぞれ個別に再試行します。
- ルールで多数の除外条件を使用している場合は、否定条件の数を減らして再試行します。
クイックスタート ガイド
Enterprise Search Posts: 30-Day API の始め方
- Enterprise アカウント — https://developer.x.com/en/products/x-api/enterprise
- ユーザー名、パスワード、アカウント名
- console.gnip.com に表示される、検索 endpoint に関連付けられたラベル
data endpoint へのアクセス
from:
と lang:
演算子を使って、@XDevelopers 由来の英語の Posts を検索します。他の演算子については こちらをご参照ください。
- cURL
- cURL example
cURL は、URL 構文を用いてファイルを取得または送信するためのコマンドラインツールです。以下の項目を編集したうえで、次の cURL リクエストをコマンドラインにコピーしてください。
-
Username
<USERNAME>
例:email@domain.com
-
Account name
<ACCOUNT-NAME>
例:john-doe
-
Label
<LABEL>
例:prod
-
fromDate と toDate 例:
"fromDate":"201811010000", "toDate":"201811122359"
Data endpoint のレスポンスペイロード
counts endpoint へのアクセス
day
ごとに集計して取得します。
- cURL
- cURL example
cURL は、URL 構文を用いてファイルを取得・送信するためのコマンドラインツールです。以下の項目を必要に応じて置き換えたうえで、次の cURL リクエストをコマンドラインにコピーしてください。
-
Username
<USERNAME>
例:email@domain.com
-
Account name
<ACCOUNT-NAME>
例:john-doe
-
Label
<LABEL>
例:prod
-
fromDate と toDate 例:
"fromDate":"201811010000", "toDate":"201811122359"
Counts endpoint のレスポンスペイロード
参照記事
Enterprise Search Posts: Full-Archive API の開始方法
- [Enterprise アカウント]https://developer.x.com/en/products/x-api/enterprise
- ユーザー名、パスワード、アカウント名
- console.gnip.com に表示される検索 endpoint に関連付けられたラベル
data endpoint へのアクセス
from:
と lang:
オペレーターを使って、英語の @XDevelopers 発の Posts を検索します。 ほかのオペレーターについては こちらをご覧ください。
- cURL
- cURL example
cURL は、URL 構文を用いてファイルを取得または送信するコマンドラインツールです。次の項目を必要に応じて変更し、以下の cURL リクエストをコマンドラインにコピーしてください。
-
Username
<USERNAME>
例:email@domain.com
-
Account name
<ACCOUNT-NAME>
例:john-doe
-
Label
<LABEL>
例:prod
-
fromDate と toDate 例:
"fromDate":"201802010000", "toDate":"201802282359"
Data endpoint のレスポンス・ペイロード
counts endpoint へのアクセス
day
単位で取得します。
- cURL
- cURL example
cURL は、URL 構文を使用してファイルを取得または送信するコマンドラインツールです。以下の項目を変更したうえで、次の cURL リクエストをコマンドラインにコピーしてください。
-
Username
<USERNAME>
例:email@domain.com
-
Account name
<ACCOUNT-NAME>
例:john-doe
-
Label
<LABEL>
例:prod
-
fromDate と toDate 例:
"fromDate":"201802010000", "toDate":"201802282359"
Counts endpoint のレスポンスペイロード
参考記事
ガイド
検索クエリの作成
Enterprise のオペレーター
- Enterprise 30 日間検索 API
- Enterprise 全アーカイブ検索 API
演算子 | 説明 |
---|---|
keyword | Postの本文またはURL内のトークン化されたキーワードにマッチします。これはトークン化マッチであり、キーワード文字列がPostの本文のトークン化されたテキストと照合されます。トークン化は句読点、記号、区切り文字のUnicode基本平面文字に基づいて行われます。例えば、「I like coca-cola」というテキストのPostは、次のトークンに分割されます:I、like、coca、cola。これらのトークンが、ルールで使用されるキーワード文字列と比較されます。句読点(例:coca-cola)、記号、または区切り文字を含む文字列をマッチさせるには、以下で説明する引用符による完全一致を使用する必要があります。 注意: Search APIでは、アクセント記号や特殊文字は標準的なラテン文字に正規化されるため、外国語での意味が変わったり、予期しない結果が返される可能性があります: 例えば、「músic」は「music」にマッチし、その逆も同様です。 例えば、スペイン語の「Feliz Año Nuevo!」のような一般的なフレーズは「Feliz Ano Nuevo」としてインデックス化され、フレーズの意味が変わってしまいます。 注意: この演算子は、Post内のURLと展開されたURLの両方にマッチします。 |
emoji | Postの本文内の絵文字にマッチします。絵文字はトークン化マッチであり、絵文字がPostの本文のトークン化されたテキストと照合されます。トークン化は句読点、記号/絵文字、区切り文字のUnicode基本平面文字に基づいて行われます。例えば、「I like 」というテキストのPostは、次のトークンに分割されます:I、like、。これらのトークンが、ルールで使用される絵文字と比較されます。絵文字にバリアントがある場合は、ルールに追加するために「引用符」を使用する必要があります。 |
“exact phrase match” | Postの本文またはURL内のトークン化され順序付けられたフレーズにマッチします。これはトークン化マッチであり、キーワード文字列がPostの本文のトークン化されたテキストと照合されます。トークン化は句読点、記号、区切り文字のUnicode基本平面文字に基づいて行われます。 注意: 句読点はトークン化されず、代わりに空白として扱われます。 例えば、引用符付きの「#hashtag」は「hashtag」にマッチしますが、#hashtagにはマッチしません(実際のハッシュタグにマッチさせるには、引用符なしでハッシュタグ#演算子を使用してください)。 例えば、引用符付きの「cashtagにはマッチしません(実際のキャッシュタグにマッチさせるには、引用符なしでキャッシュタグ$演算子を使用してください)。 例えば、「Love Snow」は「#love #snow」にマッチします 例えば、「#Love #Snow」は「love snow」にマッチします 注意: この演算子は、Post内のURLと展開されたURLの両方にマッチします。 |
“keyword1 keyword2”~N | 一般的に近接演算子と呼ばれ、キーワード間の距離がNトークン以下のPostにマッチします。 キーワードが逆順の場合、N-2トークン以下の距離である必要があります。引用符内に任意の数のキーワードを含めることができます。Nは6を超えることはできません。 この演算子は enterprise 検索APIでのみ利用可能です。 |
from: | 特定のユーザーからのPostにマッチします。 値は、ユーザーのX数値アカウントidまたはユーザー名(@文字を除く)である必要があります。X数値アカウントidを検索する方法については、こちらまたはこちらを参照してください。 |
to: | 特定のユーザーへの返信であるPostにマッチします。 値は、ユーザーの数値アカウントidまたはユーザー名(@文字を除く)である必要があります。X数値アカウントidを検索する方法については、こちらを参照してください。 |
url: | Postの展開されたURLに対してトークン化された(キーワード/フレーズ)マッチを実行します(url_containsと同様)。句読点や特殊文字を含むトークンやフレーズは二重引用符で囲む必要があります。例:url:“/developer”。一般的には推奨されませんが、特定のプロトコルにマッチさせたい場合は、二重引用符で囲んでください:url:“https://developer.x.com"。 注意: PowerTrackまたはHistorical PowerTrackを使用する場合、この演算子は引用Postの元のPostに含まれるURLにマッチします。例えば、ルールにurl:“developer.x.com”が含まれ、PostにそのURLが含まれている場合、そのPostの引用Tweetも結果に含まれます。これはSearch APIを使用する場合には当てはまりません。 |
# | 指定されたハッシュタグを含むPostにマッチします。 この演算子は完全一致を実行し、トークン化マッチではありません。つまり、ルール「2016」は正確なハッシュタグ「2016」を含むPostにマッチしますが、ハッシュタグ「2016election」を含むPostにはマッチしません 注意:ハッシュタグ演算子は、本文自体からハッシュタグを抽出するのではなく、Xのエンティティ抽出に依存してハッシュタグをマッチさせます。XエンティティのJSON属性の詳細については、こちらを参照してください。 |
@ | 指定されたユーザー名をメンションするPostにマッチします。 to:演算子は@mention演算子のサブセットマッチを返します。 |
$ | 指定された「キャッシュタグ」(トークンの先頭文字が「$」文字)を含むPostにマッチします。 キャッシュタグ演算子は、本文自体からキャッシュタグを抽出しようとするのではなく、Xの「symbols」エンティティ抽出に依存してキャッシュタグをマッチさせます。XエンティティのJSON属性の詳細については、こちらを参照してください。 この演算子は enterprise 検索APIでのみ利用可能です。 |
retweets_of: | 利用可能なエイリアス:retweets_of_user: 指定されたユーザーのリツイートであるPostにマッチします。ユーザー名とX数値アカウントidの両方を受け入れます(Postステータスidではありません)。X数値アカウントidを検索する方法については、こちらを参照してください。 |
lang: | Xによって特定の言語として分類されたPostにマッチします(Postが分類されている場合のみ)。各Postは現在1つの言語としてのみ分類されるため、複数の言語をANDで結合しても結果は得られないことに注意することが重要です。 注意: 言語分類ができない場合、提供される結果は「und」(未定義)です。 以下のリストは、現在サポートされている言語とそれに対応するBCP 47言語識別子を示しています: |
アムハラ語: am | ドイツ語: de | マラヤーラム語: ml | スロバキア語: sk |
アラビア語: ar | ギリシャ語: el | ディベヒ語(モルディブ語): dv | スロベニア語: sl |
アルメニア語: hy | グジャラート語: gu | マラーティー語: mr | ソラニー・クルド語: ckb |
バスク語: eu | ハイチ・クレオール語: ht | ネパール語: ne | スペイン語: es |
ベンガル語: bn | ヘブライ語: iw | ノルウェー語: no | スウェーデン語: sv |
ボスニア語: bs | ヒンディー語: hi | オディア語(オリヤー語): or | タガログ語: tl |
ブルガリア語: bg | ヒンディー語(ラテン文字): hi-Latn | パンジャーブ語: pa | タミル語: ta |
ビルマ語(ミャンマー語): my | ハンガリー語: hu | パシュトー語: ps | テルグ語: te |
クロアチア語: hr | アイスランド語: is | ペルシア語: fa | タイ語: th |
カタルーニャ語: ca | インドネシア語: in | ポーランド語: pl | チベット語: bo |
チェコ語: cs | イタリア語: it | ポルトガル語: pt | 繁体字中国語: zh-TW |
デンマーク語: da | 日本語: ja | ルーマニア語: ro | トルコ語: tr |
オランダ語: nl | カンナダ語: kn | ロシア語: ru | ウクライナ語: uk |
英語: en | クメール語: km | セルビア語: sr | ウルドゥー語: ur |
エストニア語: et | 韓国語: ko | 簡体字中国語: zh-CN | ウイグル語: ug |
フィンランド語: fi | ラオス語: lo | シンド語: sd | ベトナム語: vi |
フランス語: fr | ラトビア語: lv | シンハラ語: si | ウェールズ語: cy |
ジョージア語: ka | リトアニア語: lt |
place: | 指定した場所名 または X の place ID(例参照)のタグが付いた Posts に一致します。複数語の地名(“New York City”、“Palo Alto”)は引用符で囲んでください。 注: X の place ID の取得方法は、公開 API endpoint の GET geo/search を参照してください。 注: このオペレーターはリツイートには一致しません。リツイートの place は元の Post に付与されるためです。引用ツイートの元の Post に付与された place にも一致しません。 |
place_country: | タグ付けされた place に関連付けられた国コードが、指定の ISO アルファ2文字コードに一致する Posts に一致します。 有効な ISO コードはこちらを参照してください: http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 注: このオペレーターはリツイートには一致しません。リツイートの place は元の Post に付与されるためです。引用ツイートの元の Post に付与された place にも一致しません。 |
point_radius:[lon lat radius] | 存在する場合は Post の厳密な位置(x,y)に対して一致し、また X では「Place」のジオポリゴンに対して、Place が定義された領域内に完全に含まれる場合に一致します。 * サポートされる半径の単位はマイル(mi)とキロメートル(km)です。 * 半径は 25mi 未満である必要があります。 * 経度は ±180 の範囲です。 * 緯度は ±90 の範囲です。 * すべての座標は 10 進数の度です。 * ルール引数は角括弧内に入れ、空白区切りにします。 注: このオペレーターはリツイートには一致しません。リツイートの place は元の Post に付与されるためです。引用ツイートの元の Post に付与された place にも一致しません。 |
bounding_box:[west_long south_lat east_long north_lat] | 利用可能なエイリアス: geo_bounding_box: 存在する場合は Post の厳密な位置(long, lat)に対して一致し、また X では「Place」のジオポリゴンに対して、Place が定義された領域内に完全に含まれる場合に一致します。 * west_long と south_lat はバウンディングボックスの南西端を表し、west_long はその点の経度、south_lat は緯度です。 * east_long と north_lat はバウンディングボックスの北東端を表し、east_long はその点の経度、north_lat は緯度です。 * バウンディングボックスの幅と高さは 25mi 未満である必要があります。 * 経度は ±180 の範囲です。 * 緯度は ±90 の範囲です。 * すべての座標は 10 進数の度です。 * ルール引数は角括弧内に入れ、空白区切りにします。 注: このオペレーターはリツイートには一致しません。リツイートの place は元の Post に付与されるためです。引用ツイートの元の Post に付与された place にも一致しません。 |
profile_country: | Profile Geo エンリッチメントの「address」オブジェクトにある「countryCode」フィールドの厳密一致。 ISO-3166-1-alpha-2 仕様に基づく正規化された2文字の国コードを使用します。簡潔にするため、「address」オブジェクトの「country」フィールド用オペレーターの代替として提供されています。 |
profile_region: | Profile Geo エンリッチメントの「address」オブジェクトにある「region」フィールドに一致します。 これは完全一致の厳密な文字列マッチです。バックスラッシュでエスケープする必要はありません。例えば、スラッシュを含むものに一致させる場合は「one/two」を使用し、「one/two」は使用しません。空白や句読点を含む部分文字列に一致させるには二重引用符を使用してください。 |
profile_locality: | Profile Geo エンリッチメントの「address」オブジェクトにある「locality」フィールドに一致します。 これは完全一致の厳密な文字列マッチです。バックスラッシュでエスケープする必要はありません。例えば、スラッシュを含むものに一致させる場合は「one/two」を使用し、「one/two」は使用しません。空白や句読点を含む部分文字列に一致させるには二重引用符を使用してください。 |
注意: Search API を使用する場合、is: および has: 演算子は単独では使用できず、必ず他の句と組み合わせて使用する必要があります。例: @XDeevelopers has:links
has:geo | Xから提供されたPost固有の地理的位置データを持つPostsにマッチします。これは「geo」緯度経度座標、またはX “Place”の形式での「location」(対応する表示名、地理的ポリゴン、その他のfieldsを含む)のいずれかです。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
has:profile_geo | 利用可能なエイリアス: has:derived_user_geo 実際の値に関係なく、Profile Geo metadataを持つPostsにマッチします。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
has:links | この演算子は、メッセージ本文にリンクを含むPostsにマッチします。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
is:retweet | ルールにマッチする明示的なリツイートのみを配信します。ルールにマッチするリツイートを配信から除外し、オリジナルコンテンツのみを配信するために否定することも可能です。 この演算子は、Xのリツイート機能を使用する真のリツイートのみを検索します。Xのリツイート機能を使用しない引用TweetsやModified Postは、この演算子ではマッチしません。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
is:reply | PostsがPostsへの返信であるかどうかに基づいてPostsをフィルタリングする演算子です。ルールにマッチする明示的な返信のみを配信します。ルールにマッチする返信を配信から除外するために否定することも可能です。 この演算子は有料のプレミアムおよびEnterprise検索で利用可能であり、Sandbox開発環境では利用できないことにご注意ください。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
is:quote | Postペイロードの”is_quote_status”:trueで識別される、別のPostを参照するPostsである引用Tweetsのみを配信します。引用Tweetsを除外するために否定することも可能です。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
is:verified | 作成者がXによって「認証済み」であるPostsのみを配信します。作成者が認証済みであるPostsを除外するために否定することも可能です。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
has:mentions | 別のXユーザーをメンションするPostsにマッチします。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
has:hashtags | ハッシュタグを含むPostsにマッチします。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
has:media | 利用可能なエイリアス: has:media_link Xによって分類されたメディアURLを含むPostsにマッチします。例:pic.x.com。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
has:images | Xによって分類されたメディアURLを含むPostsにマッチします。例:pic.x.com。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
has:videos | 利用可能なエイリアス: has:video_link Xに直接アップロードされたネイティブXビデオを含むPostsにマッチします。これはVine、Periscope、または他のビデオホスティングサイトへのリンクを含むPostsで作成されたビデオにはマッチしません。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
has:symbols | キャッシュタグシンボル(先頭に「tag)を含むPostsにマッチします。この演算子はEnterprise 検索APIでのみ利用可能であることにご注意ください。 注意: Search APIを使用する場合、この演算子は is: またはhas: を含まない他の演算子と組み合わせて使用する必要があります。 |
製品概要
メタデータのタイムライン
to:
や in_reply_to_status_id:
といった PowerTrack Operators に依存するのではなく、Post 本文を精査する必要があります。
ここに示す詳細は、Full-Archive Search(数百件の検索を通じて得られた成果)を用いて作成しました。このタイムラインは 100% 完全でも厳密でもありません。ユースケースにとって重要となる、別のフィルタリングやメタデータの「発生日」を確認された場合は、ぜひお知らせください。
なお、基盤となる Search インデックスは再構築される可能性があります。したがって、これらのタイムラインの詳細は変更される場合があります。
2006
- 3月26日 -
lang:
。Search インデックス生成時に Post の metadata がバックフィルされる例。 - 7月13日 -
has:mentions
のマッチングが開始。 - 10月6日 -
has:symbols
。株式の銘柄記号について議論するための slang)だった。 - 10月26日 -
has:links
のマッチングが開始。 - 11月23日 -
has:hashtags
のマッチングが開始。
2007
- 1月30日 - 初の本格的な @reply(in_reply_to_user_id)。
reply_to_status_id:
のマッチングが開始。 - 8月23日 - トピックや会話を整理する一般的な慣習としてハッシュタグが登場。1週間後に初の本格的な利用例が現れる。
2009
- 5月15日 -
is:retweet
。このオペレーターは、公式リツイートのベータ版リリースおよび「Via @」パターンの導入時点からマッチし始めます。ベータ期間中は、Post の動詞は「post」で、元の Post はペイロードに含まれません。 - 8月13日 - 公式リツイートの最終版が、「RT @」パターン、動詞「share」の設定、そして元の Post を含む
retweet_status
属性とともにリリースされました(その結果、JSON ペイロードのサイズはおおよそ2倍になります)。
2010
- 3月6日 -
has:geo
、bounding_box:
、point_radius:
のジオ演算子によるマッチングを開始。 - 8月28日 -
has:videos
(2015年2月まで、この演算子は youtube.com、vimeo.com、vivo.com など特定の動画ホスティングサイトへのリンクを含む Posts にマッチします)。
2011
- 7月20日 -
has:media
とhas:images
の一致が開始。ネイティブ写真は2010年8月9日に正式発表。
2014
- 12月3日 - (概ね)一部の Enhanced URL metadata が、HTML の title と description を含む形でペイロードに含まれ始めました。強化されたメタデータは 2016年5月に、より充実した形で本格的に導入されました。
2015
- 2月10日 -
has:videos
はXのネイティブ動画に一致します。 - 2月17日 -
has:profile_geo
、profile_country:
、profile_region:
、profile_locality:
Profile Geo オペレーターのマッチングが開始されます。 - 2月17日 -
place_country:
およびplace:
のPostジオオペレーターのマッチングが開始されます。
2016
- 5月1日 - Enhanced URL metadata が広く利用可能になり、2016年8月の Gnip 2.0 のローンチ の一部として正式に発表されました。Search API には、これらの metadata に対応する Operators はありません。
2017
- 2月22日 - 投票のmetadataが拡張ネイティブ形式で利用可能になりました。これらのmetadataに対応する演算子(Operator)はありません。
2022
- 9月27日 - この日以降に作成されたすべての Post オブジェクトでは、編集済み Post の metadata が利用可能になりました。Post オブジェクトを返すすべての Enterprise endpoint は、この日から当該 metadata を提供するよう更新されました。提供される編集 metadata には、edit_history と edit_controls のオブジェクトが含まれます。これらの metadata は、2022年9月27日以前に作成された Posts については返されません。現在、これらの metadata に対応する Enterprise Operators は提供されていません。Edit Post metadata の詳細は、Edit Posts fundamentals ページをご覧ください。
2022
- 9月29日 - この日以降に作成されたすべての Post オブジェクトで、編集済み Post のメタデータが利用可能になりました。Post オブジェクトを提供するすべての Enterprise endpoint は、この日から当該メタデータを提供するよう更新されました。提供される編集メタデータには、edit_history と edit_controls の各オブジェクトが含まれます。これらのメタデータは、2022年9月27日以前に作成された Posts には返されません。現在、これらのメタデータに対応する Enterprise Operators は提供されていません。Edit Post メタデータの詳細は、Edit Posts fundamentals ページをご覧ください。
フィルタリングのヒント
- 一部の metadata には「適用開始日」があるため、フィルターによっては偽陰性が発生する場合があります。これは、検索期間の全部または一部で存在していなかった metadata に依存する Operator を使った検索に当てはまります。たとえば、
has:images
Operator で Posts を検索する場合、2011年7月より前の期間には一致はありません。これは、その Operator が「ネイティブ」写真(X の UI を使って Post に添付された写真)にのみ一致するためです。写真共有の Posts をより網羅的に取得するには、2011年7月以前を対象とするフィルターに、一般的な写真ホスティングの URL に一致するルール句を含める必要があります。 - 一部の metadata は、X に Post された時点より後に得られた情報でバックフィルされています。
- X Profiles
- オリジナルの Post か共有された Post か
- Post の言語分類
- ジオリファレンスされた Posts
- 共有リンクのメディア
X プロフィール
オリジナルのPostsとリツイート
_is:retweet_
演算子を使うと、リツイートを含めるか除外するかを指定できます。この演算子を利用する場合、2009年8月以前のデータについては、リツイートの判定(含める/含めない)に関して2つの戦略が必要です。2009年8月以前は、Post本文に対して厳密なフレーズ一致で “@RT ” パターンがあるかを確認する必要があります(実際には、2009年5月〜8月の期間のリツイートをフィルタリングする場合は “Via @” パターンも含める必要があります)。2009年8月以降は、_is:retweet_
演算子が利用可能です。
Post の言語分類
Posts のジオリファレンス
- Post メッセージ内の地理的参照。 Post メッセージ内の地理的参照に基づいて一致(マッチ)させる方法は、地域知識に依存するため最も難しい手法になりがちですが、Post アーカイブ全体に対して利用可能な選択肢です。サンフランシスコ地域を対象に「golden gate」フィルターに基づいた、2006年のジオリファレンス済み一致例はこちらです。
-
ユーザーによってジオタグが付与された Posts。 検索 APIs では、いくつかの Geo Operators による Posts のマッチング機能が2010年3月に、その他が2015年2月に利用可能になりました。
- 2010年3月6日:
has:geo
、bounding_box:
、point_radius:
- 2015年2月17日:
place_country:
、place:
- 2010年3月6日:
-
ユーザーが設定したアカウントプロフィールの「home」ロケーション。 Profile Geo Operators は Historical PowerTrack と Search APIs の両方で利用可能です。Search APIs では、これらの Profile Geo metadata は2015年2月から利用可能です。Profile Geo metadata が利用可能になる前に投稿された Posts については、正規化されていないユーザー入力に対してマッチングできる
bio_location:
Operator を使用できます。
- 2006年10月26日 -
has:links
- 2011年7月20日 -
has:images
およびhas:media
- 2011年8月 -
url:
と Expanded URLs enrichment。2006年9月の早い時期から、(url:"spotify.com" OR url:gnip OR url:microsoft OR url:google OR url:youtube)
は http://x.com/Adam/statuses/16602 にマッチします。これは、twitter_entities と gnip オブジェクトに urls[] metadata が存在しない場合でも同様です。「youtube.com」は、urls[] metadata がまったくなくても url:youtube にマッチするメッセージ内容の例です。 - 2015年2月10日 - ネイティブ動画向け
has:videos
。2010/08/28 から 2015/02/10 の間、この Operator は youtube.com、vimeo.com、vivo.com などの特定の動画ホスティングサイトへのリンクを含む Posts にマッチします。 - 2016年5月1日 - Enhanced URLs enrichment に基づく
url_title:
とurl_description:
が一般提供。最初の Enhanced URL metadata は2014年12月に出現し始めました。
よくあるご質問(FAQ)
Search Post API に関する一般的な質問
data endpoint で取得できる Posts の数が、counts endpoint で示される Posts の数と一致しません。これはなぜですか?
data endpoint で取得できる Posts の数が、counts endpoint で示される Posts の数と一致しません。これはなぜですか?
counts endpoint と data endpoint が返す結果には既知の差があります。counts endpoint は配信前のコンプライアンス適用前(削除された Posts や位置情報のスクラブなどを反映しない)であるのに対し、data endpoint は配信時点でコンプライアンスに準拠し、すべてのコンプライアンスイベントを反映するため、結果に食い違いが生じる場合があります。
query に一致するはずの Post が受信できません。なぜですか?
query に一致するはずの Post が受信できません。なぜですか?
これが起き得る理由はいくつか考えられます。たとえば、次のような場合です。
- 期待していたPostが保護アカウントの投稿である
- data endpointがすべてのコンプライアンスイベントを考慮するため(つまり、削除されたPostsやスクラブされた位置情報などはレスポンスに含まれません)
自分のqueryはPostに一致しましたが、否定したキーワードも含まれていました。なぜこうなるのですか?
自分のqueryはPostに一致しましたが、否定したキーワードも含まれていました。なぜこうなるのですか?
これは、Premium のルールとフィルタリングの不適切な使用が原因である可能性があります。ドキュメントはこちらを確認し、ルール作成に関する制限事項を十分に理解してください。
Search Post API を使い始めるにあたって利用できるライブラリはありますか?
Search Post API を使い始めるにあたって利用できるライブラリはありますか?
はい、以下が含まれます。
- Tweepy - 標準の検索/Posts プロダクトの利用に適しています(Python)
- X API - 標準の Search Post API の利用に適しています(Python)
- Search Posts Python および Search Posts Ruby - Enterprise(および v2)向けの Search Post API に利用できる有用な 2 つのツールです
data endpoint へのリクエストで `maxResults` に設定した値よりも少ない件数の Posts しか受け取れないことはありますか?
data endpoint へのリクエストで `maxResults` に設定した値よりも少ない件数の Posts しか受け取れないことはありますか?
はい。data endpoint では、指定した
maxResults
に達するか、30 日が経過した時点でページネーションが行われます。たとえば、ある 30 日間に 800 件の Posts がある場合、完全な結果を取得するには 2 回のリクエストが必要です。1 回のリクエストで返せる Posts の最大数は 500(maxResults
)であるためです。また、1 か月目に 400 件の Posts、2 か月目に 100 件の Posts がある場合でも、完全な結果を取得するには 2 回のリクエストが必要です。これは、最初のリクエストの返却数が指定した maxResults
未満であっても、ページネーションは 30 日の期間後に実行されるためです。一致する Posts はどの順序で返されますか?
一致する Posts はどの順序で返されますか?
Posts は新しい順(逆時系列)で返されます。たとえば、最初のページには query に一致する最新の Posts が表示され、ページネーションは結果の投稿日時が最初にリクエストした
fromDate
に到達するまで続きます。Edit Postsは、使用状況および課金にどのような影響がありますか?
Edit Postsは、使用状況および課金にどのような影響がありますか?
請求の対象となるのは元のPostのみです。以降の編集は無視され、全体のアクティビティ件数には反映されません。
Enterprise
Enterprise版のSearch Post APIの料金について詳しく知りたいのですが、このオファリングへの申請方法も併せて教えてください。どのように進めればよいですか?
Enterprise版のSearch Post APIの料金について詳しく知りたいのですが、このオファリングへの申請方法も併せて教えてください。どのように進めればよいですか?
当社のEnterpriseソリューションは、貴社のビジネスニーズに合わせてカスタマイズされ、予測可能な料金でご提供します。詳細はこちらからお申し込みください。
自分のユースケースに合致するルールセットはどう構築すればよいですか?
自分のユースケースに合致するルールセットはどう構築すればよいですか?
今月のリクエスト上限/制限を超過してしまいましたが、さらにdataへアクセスする必要があります。どうすればよいですか?
今月のリクエスト上限/制限を超過してしまいましたが、さらにdataへアクセスする必要があります。どうすればよいですか?
この件については、Xのアカウントマネージャーまでご連絡ください。対応いたします。
エラーのトラブルシューティングガイド
- 各 endpoint で適切なパラメータを使用しているか確認してください(例:
buckets
フィールドは counts endpoint でのみ使用でき、data endpoint では使用できません) :product
、:account_name
、:label
の各 fields が正しいか再確認してください。:label
フィールドは GNIP Console(Enterprise 顧客のみ)で確認できます。
API リファレンス
Enterprise search APIs
- 30-Day Search API - 直近 30 日間に投稿された Tweet を提供します。
- Full-Archive Search API - 2006 年 3 月に投稿された最初の Tweet から、2006 年まで遡る Tweet を提供します。
- Tweet データおよび件数を取得する方法
- 認証
- ページネーション
- API リクエストパラメータとリクエスト例
- API レスポンスの JSON ペイロードとレスポンス例
- HTTP レスポンスコード
Methods
https://gnip-api.x.com/search/
です。
Method | Description |
---|---|
POST /search/:product/accounts/:account_name/:label | 指定した PowerTrack ルールに一致する過去 30 日間の Tweet を取得します。 |
POST /search/:product/accounts/:account_name/:label/counts | 指定した PowerTrack ルールに一致する過去 30 日間の Tweet の件数を取得します。 |
:product
は、リクエスト先の検索 endpoint を示し、30day
またはfullarchive
のいずれかです。:account_name
は、console.gnip.com に表示される、アカウントに関連付けられた(大文字小文字を区別する)名前です。:label
は、console.gnip.com に表示される、検索 endpoint に関連付けられた(大文字小文字を区別する)ラベルです。
- Data endpoint: https://gnip-api.x.com/search/30day/accounts/TwitterDev/prod.json
- Counts endpoint: https://gnip-api.x.com/search/30day/accounts/TwitterDev/prod/counts.json
:product
、:account_name
、:label
を含む URL を使用しています。これらの例を利用する際は、URL を必ずご自身の情報に更新してください。
認証
リクエスト/レスポンスの動作
fromDate
と toDate
パラメータを使用すると、API がサポートする任意の期間をリクエストできます。30-Day search API は直近31日分の Tweet を提供します(「30-Day」API と呼称されていますが、完全な月単位のリクエストを可能にするため31日分を利用できます)。Full-Archive search API は最初の Tweet(2006年3月21日)まで遡って提供します。ただし、1 回のレスポンスは、指定した ‘maxResults’ と 31 日のうち小さい方に制限されます。マッチする data や指定した期間が maxResults または 31 日を超える場合、残りの期間をページネートするために使用する ‘next’ トークンが返されます。
例えば、Full-Archive search を使用し、2017年1月1日から2017年6月30日までの間で、query にマッチするすべての Tweet を取得したいとします。fromDate
と toDate
パラメータで、その 6 か月間の全期間をリクエストに指定します。search API は最初の「ページ」の Tweet を、maxResults
パラメータ(デフォルトは 100)に一致する件数で返します。さらに Tweet が存在する場合(多くの場合、存在します)、API は次の「ページ」の data をリクエストできるようにする ‘next’ トークンも返します。このプロセスは、API が ‘next’ トークンを返さなくなるまで繰り返されます。詳細は次のセクションをご覧ください。
ページネーション
データのページネーション
maxResults
パラメータの既定値は 100 で、10〜500 の範囲で設定できます。リクエストで指定した ‘maxResults’ を超える数の Tweet が query に一致した場合、レスポンスには(ルートレベルの JSON 属性として)‘next’ トークンが含まれます。この ‘next’ トークンは、次のリクエストでその query に一致する Tweet の次の部分(つまり次の「ページ」)を取得するために使用されます。‘next’ トークンは、その query の結果の最後の「ページ」に到達し ‘next’ トークンが返されなくなるまで提供され続けます。
次の「ページ」のデータを要求するには、(使用している場合は)query
、toDate
、fromDate
パラメータを含め、元のものとまったく同一の query を実行し、さらに前回のレスポンスで返された値を設定した ‘next’ リクエストパラメータも含める必要があります。これは GET または POST のいずれのリクエストでも利用できます。ただし、GET リクエストの場合は ‘next’ パラメータを URL エンコードする必要があります。
query で対象とする期間内のすべての Tweet を取得し終えるまで、前回のレスポンスで返された ‘next’ 要素を引き続き渡せます。‘next’ 要素を含まないレスポンスを受け取った場合は、最後のページに到達しており、指定した query と時間範囲に対して利用可能な追加データはありません。
カウントのページネーション
追記事項
- 検索リクエストで fromDate または toDate を使用する場合、指定した時間範囲内の結果のみが返されます。時間範囲内の最後の結果グループに到達すると、“next” トークンは返されません。
- “next” 要素は、10〜500 の任意の maxResults 値で使用できます(デフォルト値は 100)。maxResults は各レスポンスで返される Tweet の数を決定しますが、最終的にすべての結果を取得することは可能です。
- “next” 要素には有効期限がありません。同じ “next” query を使用した複数のリクエストは、リクエストの実行タイミングに関係なく同じ結果を受け取ります。
- “next” パラメータで結果をページングする際、query の境界付近で重複が発生する場合があります。これらに対してアプリケーションは許容できるようにしておいてください。
Data endpoint
POST /search/:product/:label
endpoint パターン:
データリクエストのパラメータ
パラメータ | 説明 | 必須 | サンプル値 |
---|---|---|---|
query | 1つの PowerTrack ルールに相当し、最大 2,048 文字まで(肯定・否定の節の数に制限はありません)。 このパラメータには演算子を含む PowerTrack ルールの全要素をすべて含めてください。ルールの一部を分割して query の別のパラメータに渡さないでください。 注: すべての PowerTrack 演算子がサポートされているわけではありません。サポートされる演算子はこちらに一覧があります。 | はい | (snow OR cold OR blizzard) weather |
tag | ルールおよびその一致データを、論理的なグループに分けるために使用できるタグです。ルールタグが指定された場合、そのタグは ‘matching_rules’ 属性に含まれます。 クライアント側で望ましいマッピングを維持できるよう、ルールごとの UUID をタグに割り当てることを推奨します。 | いいえ | 8HYG54ZGTU |
fromDate | Tweets が提供される最も古い UTC タイムスタンプ(Full-Archive 検索では 2006/3/21 まで遡れます)。タイムスタンプは分単位で、包含的です(例: 12:00 は 00 分を含みます)。 指定あり: fromDate のみを指定し、toDate を指定しない場合、結果は now() から過去に遡って fromDate までの query の結果が返されます。 未指定: fromDate を指定しない場合、API は now() または toDate(指定されている場合)から過去 30 日分のすべての結果を返します。 fromDate と toDate のいずれも使用しない場合、API はリクエスト時点から過去に遡る形で、直近 30 日間のすべての結果を返します。 | いいえ | 201207220000 |
toDate | Tweets が提供される最新の UTC タイムスタンプ。タイムスタンプは分単位で、非包含的です(例: 11:59 はその時間の 59 分を含みません)。 指定あり: toDate のみを指定し、fromDate を指定しない場合、toDate より前の直近 30 日分のデータが返されます。 未指定: toDate を指定しない場合、API は now() から過去に遡って fromDate までの query のすべての結果を返します。 fromDate と toDate のいずれも使用しない場合、API はリクエスト時点から過去に遡る形で、30 日インデックス全体のすべての結果を返します。 | いいえ | 201208220000 |
maxResults | リクエストで返される検索結果の最大件数。10 からシステム上限(現在 500)までの数値。既定では、レスポンスは 100 件の結果を返します。 | いいえ | 500 |
next | このパラメータは、こちらに記載のとおり、次の「ページ」の結果を取得するために使用します。パラメータの値は API のレスポンスからそのまま取得し、変更しないでください。 | いいえ | NTcxODIyMDMyODMwMjU1MTA0 |
追加詳細
利用可能な期間 | 30-Day: 直近31日間 Full-Archive: 2006年3月21日〜現在 |
query の形式 | PowerTrack ルール1件分に相当し、最大2,048文字まで(肯定・否定の節の数に制限はありません)。 注: すべての PowerTrack 演算子がサポートされているわけではありません。サポート対象の演算子は Available operators を参照してください。 |
レートリミット | パートナーには、分単位および秒単位の両方の粒度でレートリミットが適用されます。1分あたりのレートリミットは契約で指定されたとおりパートナーごとに異なります。ただし、これらの1分あたりのレートリミットを単一のバーストで使うことは想定していません。1分あたりのレートリミットにかかわらず、すべてのパートナーは、data および/または counts へのすべてのリクエストを合算して、1秒あたり最大20リクエストに制限されます。 |
コンプライアンス | Full-Archive Search API で配信されるすべての data は、配信時点でコンプライアンスに準拠しています。 |
リアルタイム可用性 | データは、Twitter プラットフォーム上で生成後30秒以内にインデックスで利用可能になります |
data フィールドのリクエストとレスポンス例
POST リクエストの例
- POST リクエストのパラメータは、以下のように JSON 形式のボディで送信されます。
- 取得対象の PowerTrack ルールのすべての要素(例: キーワード、bounding_box: のような他のオペレーター)は、‘query’ パラメータに含めてください。
- ルールの要素を分割して、query URL の個別パラメータとして渡さないでください。
GET リクエストの例
- GET リクエストのパラメータは、標準的な URL エンコードで URL にエンコードされます。
- 取得対象の PowerTrack ルールの要素(例: キーワード、bounding_box: のような他のオペレーター)はすべて、‘query’ パラメータに含めてください。
- ルールの一部を分割して、query URL 内で個別のパラメータとして指定しないでください。
例のdataレスポンス
Counts endpoint
/search/:stream/counts
endpoint パターン:
/search/fullarchive/accounts/:account_name/:label/counts.json
この endpoint は、指定された query に対する件数(データボリューム)を返します。期間を指定しない場合、時間パラメータは直近30日がデフォルトになります。データボリュームは、日単位、時間単位(デフォルト)、または分単位のいずれかで、タイムスタンプ付き配列として返されます。
注: 以下のパラメータを URL にエンコードすることで、POST の代わりに GET リクエストを使用して同等の機能を実行できます。
カウントリクエストのパラメータ
Parameters | 説明 | 必須 | サンプル値 |
---|---|---|---|
query | 最大 2,048 文字の 1 件の PowerTrack ルールに相当します(肯定・否定の節の数に制限はありません)。 このパラメータには、すべてのオペレーターを含む PowerTrack ルールの全要素を含める必要があり、ルールの一部を query の他のパラメータに分割しないでください。 注: すべての PowerTrack オペレーターがサポートされているわけではありません。サポート対象のオペレーター一覧は Available operators を参照してください。 | Yes | (snow OR cold OR blizzard) weather |
fromDate | Tweets が提供される最古の UTC タイムスタンプ(2006/03/21 まで)。タイムスタンプは分単位の粒度で、包含です(例: 12:00 は 00 分を含みます)。 指定あり: fromDate のみを指定し、toDate パラメータを指定しない場合、API は現在から fromDate まで遡る期間について、query のカウント(データ量)を返します。fromDate が現在から 31 日より前の場合、ページング用の next トークンが返されます。 未指定: fromDate を指定しない場合、API は現在( )または toDate(指定されている場合)の 30 日前までのカウント(データ量)を返します。 fromDate と toDate のいずれも指定しない場合、API はリクエスト時点から過去に遡って直近 30 日間のカウント(データ量)を返します。 | No | 201207220000 |
toDate | Tweets が提供される直近の(最新の)UTC タイムスタンプ。タイムスタンプは分単位の粒度で、非包含です(例: 11:59 はその時間の 59 分目を含みません)。 指定あり: toDate のみを指定し、fromDate パラメータを指定しない場合、toDate の 30 日前までの直近のカウント(データ量)を返します。 未指定: toDate を指定しない場合、API は query のカウント(データ量)を fromDate まで遡って返します。fromDate が現在から 31 日より前の場合、ページング用の next トークンが返されます。 fromDate と toDate のいずれも指定しない場合、API はリクエスト時点から過去に遡って直近 30 日間のカウント(データ量)を返します。 | No | 201208220000 |
bucket | カウントデータを提供する時間単位。指定期間内の日・時・分ごとのカウントデータを返せます。既定では時間単位のカウントが提供されます。オプション: ‘day’, ‘hour’, ‘minute’ | No | minute |
next | HERE に記載のとおり、次の「ページ」の結果を取得するためのパラメータです。このパラメータに指定する値は API のレスポンスからそのまま取得し、変更しないでください。 | No | NTcxODIyMDMyODMwMjU1MTA0 |
追加の詳細
利用可能な期間 | 30-Day: 直近31日間 Full-Archive: 2006年3月21日〜現在 |
Query Format | PowerTrack ルール1件分に相当し、最大2,048文字まで。 注: すべての PowerTrack 演算子がサポートされているわけではありません。サポート対象の演算子は Available operators を参照してください。 |
Rate Limit | パートナーには分単位および秒単位の両方の粒度でレートリミットが適用されます。分あたりのレートリミットは、契約で規定されたとおりパートナーごとに異なります。ただし、これらの分あたりのレートリミットは単発のバーストで使うことを想定していません。分あたりのレートリミットに関わらず、すべてのパートナーは data および/または counts に対する全リクエストを合算して、1秒あたり最大20リクエストに制限されます。 |
Count Precision | この endpoint を通じて提供されるカウントは、発生した Tweet の数を反映しており、後続のコンプライアンスイベント(削除、scrub_geo)を反映しません。カウントに含まれる一部の Tweet は、ユーザーのコンプライアンス対応により data endpoint からは取得できない場合があります。 |
例: counts リクエストとレスポンス
POST リクエストの例
- 以下のとおり、POST リクエストのパラメータは JSON 形式のボディで送信します。
- 取得対象の PowerTrack ルールの内容(例: キーワードや bounding_box: のような他のオペレーター)は、すべて ‘query’ パラメータに含めてください。
- ルールの一部を分割して、query URL 上の別個のパラメータとして指定しないでください。
GET リクエストの例
- GET リクエストのパラメータは、標準的な URL エンコードで URL に埋め込まれます
- 取得対象の PowerTrack ルールの要素(例: キーワードや bounding_box: などのオペレーター)は、すべて ‘query’ パラメータに含めてください
- ルールの構成要素をクエリ URL 内で別個のパラメータに分割しないでください
例: counts レスポンス
HTTP response codes
Status | Text | Description |
---|---|---|
200 | OK | リクエストは正常に処理されました。JSON レスポンスは次のとおりです。 |
400 | Bad Request | 一般的には、リクエストに無効な JSON が含まれている場合、または JSON ペイロードが送信されなかった場合に返されます。 |
401 | Unauthorized | 無効な認証情報により HTTP 認証に失敗しました。request で正しく使用できているか確認するため、認証情報で console.gnip.com にログインしてください。 |
404 | Not Found | リクエスト先の URL にリソースが存在しません。URL が誤っている可能性が高いです。 |
422 | Unprocessable Entity | query に無効なパラメータが含まれているため返されます(例: 無効な PowerTrack ルール)。 |
429 | Unknown Code | App が接続リクエストの上限を超過しました。対応する JSON メッセージは次のようになります。 |
500 | Internal Server Error | サーバー側でエラーが発生しました。指数バックオフ方式で再試行してください。 |
502 | Proxy Error | サーバー側でエラーが発生しました。指数バックオフ方式で再試行してください。 |
503 | Service Unavailable | サーバー側でエラーが発生しました。指数バックオフ方式で再試行してください。 |