新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

TwitterのSearch APIの使い方で混乱したのでまとめてみる

Twitter APIを使ってデータ収集する機会がありました。

Twitter APIには、Googleの検索のように、ツイートを検索するSearch APIがあって、今回それを使いました。

普段Twitterは、主にリーダーとして利用していたので、あまり機能を意識することは無かったのですが、 Search APIでツイートを、色々条件を指定して検索しようとすると、Twitterの用語やら機能やら構成やらが絡んでくるので混乱しました。

ここでは、TwitterのSearch APIを使って、目的のツイートを検索する方法についてまとめてみました。

Twitter APIの使い方は別記事にまとめました。

www.kwbtblog.com

Twitterの構成

Search APIは、外部に公開されているツイートが検索対象になります。

外部に公開されているツイートとは、下記のような構成になります。

TwitterのSearch APIの使い方で混乱したのでまとめてみる

「user_A」と「user_B」のタイムラインがあって、user_Aは「通常ツイート」「user_Bのリツイート」「user_Bの引用リツイート」「user_Bへの返信」をしています。

ツイートの種類

ツイートには、「ツイート」「リツイート」「引用リツイート」「返信」の4種類があります。

  • ツイート
    • いわゆる通常のツイート
    • ツイートした本人のタイムラインに表示させる
  • リツイート
    • 他の人のツイートを、自分のタイムラインにツイートとして表示させる
    • リツイートしたいツイートで、リツイートボタンを押して「リツイート」で行う
  • 引用リツイート
    • 他の人のツイートに、自分のコメントをつけて、自分のタイムラインにツイートとして表示させる
    • 引用リツイートしたいツイートで、リツイートボタンを押して「コメントを付けてリツイート」で行う
  • 返信
    • ツイートに対し、ツイートする。ツイートのスレッドと、返信した人のタイムラインに表示される。

Twitterのデータ構成

Twitterの構成を念頭に置いて、Twitterのデータ構成を見てみます。

TwitterのSearch APIの使い方で混乱したのでまとめてみる

「text」は、そのツイートの本文で、キーワード・ハッシュタグで検索した時の検索対象になる部分です。

他の要素は、「リツイート」「引用リツイート」「返信」の、ツイートの種類によって付加されるデータで、これにより受け取ったデータからツイートの種類を識別することができます。

目的別検索条件例

基本的な書き方

基本的には、Googleで検索するように、検索したい文字列や条件をクエリ文字列として書いて、APIに渡します。

複数の条件がある場合は、スペースで開けて並べて書くと、ANDで検索してくれます。

NOT条件は、条件の前に「-」を付けます。

例えば、「キーワード1」と「#ハッシュタグ1」を含む、「ユーザー1」以外のツイートを検索するには、下記のクエリになります。

キーワード1 #ハッシュタグ1 -from:ユーザー1

以下、よくやる検索を、目的別にまとめてみました。

キーワードで検索

キーワード_1 キーワード_2 ...

ハッシュタグで検索

#ハッシュタグ_1 #ハッシュタグ_2 ...

特定のユーザーのツート

from:user_A

ユーザーは「@」以下の表示名を使います。

特定のユーザーに対する返信

to:user_A

特定のユーザーに対するリツイートと返信

@user_A

「@」はリツイートと返信の両方を含むので注意が必要です。

リツイートのみ

filter:retweets

特定のユーザーに対するリツイート

@user_A filter:retweets

「@」はリツイートと返信の両方を含むので、返信を除外してリツイートのみを検索したい場合は、「リツイートのみ」のフィルター条件を組合わせます。

リツイート除外

-filter:retweet

リツイートは、言わば元ツイートのコピーなので、リツイートは除外して、純粋に投稿のみを検索したい時などに使います。

引用リツイートが検索できない

ここが、今回一番つまづいたところです。

「引用リツイート」はリツイートと名前は付いていますが、リツイートではありません。

困ったことに、リツイートを検索しても、引用リツイートは含まれないのです。

更に困ったことに、リツイートのような、引用リツイートを絞り込む検索条件が無いのです。

そして、データ構造を見ると分かるように、リツイートは本文がリツイート元のツイート内容になっているのですが、引用リツートは、コメントが引用リツートの本文で、引用元ツイート文章は本文に含まれません。

これの何が困るかというと、元ツイートの文章の内容で検索しても、引用リツイートは引っかからないのです。

まとめると…

Search APIで検索しようとして、リツイートなら、

  • リツイートに絞り込んだ検索
  • リツイートを除外した検索
  • リツイートの文章を対象とした、キーワード・ハッシュタグによる検索

ができるのですが、引用リツイートの場合

  • 引用リツイートに絞り込んだ検索
  • 引用リツイートを除外した検索
  • 引用内容の文章を対象とした、キーワード・ハッシュタグによる検索

ができません。

つまり、

  • 特定のツイートに対する引用リツート
  • 特定のユーザーに対する引用リツート
  • 特定のユーザーによる引用リツート

の検索ができないのです。

引用リツイートを検索する

しかし「特定のツイートに対する引用リツート」だけは、検索条件の工夫で検索することができます。

Search APIには、含まれるURLを検索する検索条件があり、ここに引用元ツイートのURLの一部を指定することにより、特定のツイートの引用リツイートを検索することができます。

ツイートのURLは、ツイートをクリックして開くと、ブラウザーアドレスに表示されるのですが、下記のようなものになります。

https://twitter.com/<@以下のユーザー名>/status/<id_str(数字のTweetID)>

数字の「id_str」がツイートのIDで、URLに指定することにより、そのツイートの引用リツイートを検索できます。

ただし、それだとリツイートも含まれるので、リツイートを除外したものが、引用リツイートになります。

url:<id_str> -filter:retweets

検索は最新順

Search APIには、無償版と有償版があるのですが、無償版では直近7日ののツイートしか検索できません。

検索結果が多数の場合はページングしていくのですが、古いツイートは引っかからないため、ページは最新結果もしくは指定した最終日から順に、過去に遡る形でページ送りされる仕様になっています。

感想など

大きめのプロモーションを打った時は、Twitter社の方でツイート集計お願いできたりするのですが、些細な集計だと言いづらく、仕方なく定期的にクロールすることにしました。

引用リツイートが、リツイートと同じ感覚で検索できればよかったのですが、引用リツイートは特定のツイート単位でしか検索できないので面倒ですね。

引用リツイートの検索条件入れて欲しいなぁ…。