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

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

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社の方でツイート集計お願いできたりするのですが、些細な集計だと言いづらく、仕方なく定期的にクロールすることにしました。

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

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

関連カテゴリー記事

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com