Twitter Search API の使い方

自動つぶやき検索を作成する

Twitter は間違いなく、最近 World Wide Web に登場したソーシャル・ネットワーキングのなかで最も成功している例の 1 つです。Twitter には独自の検索エンジンがあり、ユーザーがキーワードやカテゴリーを基準に「つぶやき」を検索できるようになっています。この検索エンジンに備わった API はプログラムによる検索を容易にし、REST サービスとして機能して検索結果を Atom フォーマットで返します。この記事を読んで、Twitter Search API の基本的な使い方を学んでください。

Brian M. Carey, Information Systems Consultant, Triangle Information Solutions

Brian Carey は、Java エンタープライズ・アプリケーションのアーキテクチャー、設計、実装を専門とする情報システムのコンサルタントです。Brian は Twitter でつぶやきを公開しているので、彼をフォローすることができます (http://twitter.com/brianmcarey)。



2009年 8月 04日

Twitter は Web ベースのソーシャル・メディア・サイトです。このサイトでは Twitter GUI を介して、「つぶやき」として知られる短い文をフォロワーとやり取りすることができます。つぶやきは最大 140 文字に制限されています。この制限は、Twitter が開発された当時のモバイル機器の制限に基づくものです。しかし、この制限によって 1 件のつぶやきに不要なスパムや長々とした言葉の羅列を入れられなくなるため、歓迎すべき制限となっています。

よく使われる頭字語

  • API: Application Programming Interface
  • GUI: Graphical user interface
  • HTTP: Hypertext Transfer Protocol
  • REST: Representational State Transfer
  • RSS: Really Simple Syndication
  • URL: Uniform Resource Locator

Twitter について理解したところで、今度は次のレベルとして、Twitter Search の使い方を理解する番です。

前述のとおり、Twitter はつぶやき、つまりユーザーがそのフォロワーに対して作成した短い文が溢れるオンライン組織です。この点を考えると、特定のサブジェクトに関連する一連のつぶやきを検索できたとしたら便利だと思いませんか?

幸いなことに、つぶやきの検索は Twitter Search で行えます。キーワード、トピック、作成者、言語など、さまざまな基準でつぶやきを検索することができます。http://search.twitter.com にアクセスして、実際に検索してみてください。検索したいキーワード (例えば、Java™) を入力して、Search ボタンをクリックします。すると一連のつぶやきが、新しいものから古いものの順で画面に表示されます。

一方、キーワードではなく、トピックで検索するにはどうすればよいのでしょうか。特定のトピックを対象としたつぶやきには、シャープ記号 (#) で始まるトピック名が含まれています。例えば、スター・トレックのファンが新しい映画について投稿したつぶやきには、そのなかに #startrek というトピック名が含まれているため、この特定のつぶやきがスター・トレックに関するものだということがわかります。

トピックを基準につぶやきを検索するには、トピック名 (シャープ記号を含む) をキーワード検索に入力すればよいだけです。前の例に従えば、Twitter Search ページで #startrek と入力して、Search ボタンをクリックします。これによって、スター・トレック関連のつぶやきの一覧が表示されます。

Twitter Search API

Twitter Search API は、ユーザーが手動で検索するには最適です。しかし、卓越した能力を持つソフトウェア開発者としては、トピックやキーワードに基づいて、プログラムでつぶやきを検索できたとしたら素晴らしいと思いませんか?

さらに幸いなことに、それも可能です。

他の多くの優れた Web アプリケーションと同様、Twitter Search には、自動的につぶやきを検索できるように REST API が用意されています。ここで、この REST API の詳細な説明に入る前に、REST に馴染みのない方のために、その概念を説明しておくのが賢明でしょう。

REST とは何か?

この記事の目的に合わせて説明すると、REST は、開発者が単純な HTTP 呼び出しで情報およびリソースにアクセスすることを可能にします。REST はいわば、特定のロケーションの URL を指定するだけでドメイン固有のデータを取得できる手段であると考えてください。また、REST を単純化された Web サービスとみなすこともできますが、この見方をある特定の人々の前で声高に言ったとすると、論争の真っ只中に置かれることになるかもしれません。

つまり、Twitter Search API とは、ユーザーが特定の URL を指定して、その URL に指定された基準を満たす多種多様なつぶやきを取得できる REST サービスです。開発者にとっては、Web アプリケーションで入力を受け入れ、その入力を API が理解できるフォーマットにエンコードした単純な URL を使用して、入力に基づくクエリーを Twitter に対して動的に実行することができます。

開始手順: 単純な例

リスト 1 の例について考えてみましょう。

リスト 1. 単純な Twitter 検索例
http://search.twitter.com/search.atom?q=java

このクエリーを構文解析するのはわけありません。ドメインは見てのとおり、search.twitter.com で、ここが Search API のある場所です。最初のスラッシュに続くのは実行しているサービスで、この例では search という単語がこれに相当します。search という単語はドメイン名にすでに含まれているため、この単語がここでさらに必要になるのは奇妙に思えるかもしれません。しかしこれには、さまざまな関数を使う基本の Twitter API との一貫性を保とうとする Twitter 開発者たちの意図があります。

search には .atom 拡張子が続きます。この拡張子は、検索結果が Atom フォーマットで返されることを意味しているにすぎません。他に使用できるフォーマットには、RSS (.rss) と JSON (JavaScript Object Notation) (.json) があります。

拡張子の後には唯一のリクエスト・パラメーター、q があります。これは、query (クエリー) の略です。そしてパラメーターの後にはその値、この例では java が続きます。

要約すると、上記のコード・サンプルの URL は Twitter Search API に対し、java という単語が含まれる最新のすべてのつぶやきを検索し、検索結果を Atom フォーマットで返すように指定しています。

出力の構文解析

お使いのブラウザーでリスト 1 のアドレスにアクセスしてください。ブラウザー画面に返される実際の出力は、どのブラウザーのどのバージョンを使っているかによって異なります。ソースを表示するときに、表示に一貫性を持たせるには、画面を右クリックして View Source (ソースの表示) をクリックします。すると、リスト 2 のような出力が表示されるはずです。

リスト 2. 単純な検索による出力 (一部を抜粋)
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" 
xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" 
xmlns="http://www.w3.org/2005/Atom" 
xmlns:twitter="http://api.twitter.com/">
  <id>tag:search.twitter.com,2005:search/java</id>
  <link type="text/html" rel="alternate" 
href="http://search.twitter.com/search?q=java"/>
  <link type="application/atom+xml" rel="self" 
href="http://search.twitter.com/search.atom?q=java"/>
  <title>java - Twitter Search</title>
  <link type="application/opensearchdescription+xml" 
rel="search" href="http://search.twitter.com/opensearch.xml"/>
  <link type="application/atom+xml" rel="refresh" 
href="http://search.twitter.com/search.atom?q=java&since_id=1990561514"/>
  <twitter:warning>since_id removed for pagination.</twitter:warning>
  <updated>2009-06-01T12:11:26Z</updated>
  <openSearch:itemsPerPage>15</openSearch:itemsPerPage>
  <link type="application/atom+xml" rel="next" 
href="http://search.twitter.com/search.atom?max_id=1990561514&page=2&q=java"/>
  <entry>
    <id>tag:search.twitter.com,2005:1990561514</id>
    <published>2009-06-01T12:11:26Z</published>
    <link type="text/html" rel="alternate" 
href="http://twitter.com/GailR/statuses/1990561514"/>
    <title>D/L latest upgrade for Google's Chrome 
Browser & like it. Faster, esp w Java</title>
    <content type="html">D/L latest upgrade for Google's Chrome 
Browser &amp; like it. Faster, esp w <b>Java</b></content>
    <updated>2009-06-01T12:11:26Z</updated>
    <twitter:source><a href="http://twitter.com/">web</a></twitter:source>
    <twitter:lang>en</twitter:lang>
    <author>
      <name>GailR (Gail R)</name>
      <uri>http://twitter.com/GailR</uri>
    </author>
  </entry>
...
]>

注: 出力される内容は全く違って見えても、その構造には少しの違いもありません。私はこの検索を、皆さんが検索を実行するよりずっと前に実行しました。この出力に含まれる最新のつぶやきが、皆さんの出力に含まれる最新のつぶやきと異なるのは、そのためです。デフォルト検索では、新しいつぶやきから古いつぶやきの順にソートされることを思い出してください。

上記のコードの内容は以下のとおりです。

  • ルート要素は feed であることに注意してください。これは Atom 仕様に従った標準的なルート要素です (Atom についての詳細は、「参考文献」のリンクを参照してください)。Twitter が使用する名前空間、http://www.w3.org/2005/Atom は、ルート要素の属性として指定されます。
  • title 要素はクエリーの概要を提供します。この概要は、出力を構文解析している人が、クエリーを作成した本人ではない場合に役立ちます。
  • link 要素はクエリー自体の URL を表します。これらの URL にブラウザーでアクセスすると、同じ結果が得られます。
  • entry スタンザは、つぶやきを表します。上記では簡潔にするために 1 件のつぶやきしか記載していませんが、実際の出力には多数のつぶやきが表示されます。title と content の内容が同じであることに注目してください。つぶやきにはタイトルがありません。そのため、タイトルが実際のつぶやきそのものになるのは当然のことです。

    Atom は記事のような文書を対象に設計されていることを思い出してください。記事では通常、見出しがあり、その後に本文が続きますが、つぶやきはその限りでないため、この 2 つの要素には同じ内容が含まれます。

  • id は Atom に必要な要素で、これが、この特定のつぶやきのグローバル一意識別子 (GUID) です。個々のつぶやきを参照できるように、すべてのつぶやきには Twitter 全体のなかで一意の ID があります。
  • publishedupdated の日時もまったく同じです。つぶやきが更新されることはないため、これは当然と言えます。
  • 最初の link 要素は、この 1 つのつぶやきへのリンクを提供します。http://twitter.com/GailR/statuses/1990561514 をブラウザーのアドレス・バーに貼り付けてアクセスすると、同じつぶやきが表示されるはずです。
  • source 要素 (twitter 名前空間にあるため、twitter:source と指定) は、API が返した情報のソースへのリンクを提供します。上記の場合、ソースは Twitter 自体であり、URL リンクとしてエンコードされています。
  • lang 要素 (twitter 名前空間にあるため、twitter:lang と指定) は、該当するつぶやきで使用されている言語を参照します。上記の場合、つぶやきは英語で作成されているため、ISO (International Organization for Standardization) 639-1 コードの en が使用されています。
  • author スタンザは、この Twitter ユーザーに関する情報を提供します。

さらに複雑な検索を作成する

上記で説明したサンプルはかなり初歩的なもので、検索しているのは 1 つの単語だけです。その一方、Twitter Search API は強力な基準パラメーターの一式を提供し、複雑なクエリーをサポートします。

例えば、特定のユーザーに向けられたつぶやきを検索したいとします。つぶやきを記述するための言語では、特定のユーザーを対象にしたつぶやきを作成するには、対象ユーザーのスクリーン・ネームの前にアット・マーク (@) を付けます (@johnqpublic など)。この特定のユーザーに送信されたつぶやきを検索する際には、@ 記号を無視して検索を行います。リスト 3 を参照してください。

リスト 3. 特定のユーザーを対象としたつぶやきの検索
http://search.twitter.com/search.atom?q=to%3Ajohnqpublic

URL 中央のユーザー名の直前にある %3A に注目してください。これは、コロン (:) に対応する URL エンコーディングです。その前には to プレフィックスがあるので、この部分は to:johnqpublic であることがわかります。

特定のユーザーに対するつぶやきではなく、特定のユーザーからのつぶやきを検索するには、リスト 3 で使用している tofrom に置き換えればよいだけです。

また、特定のトピックを検索したい場合には、シャープ記号を URL 用にエンコードする必要があります。シャープ記号に対応する URL エンコードは %23 なので、#startrek の API 検索は、リスト 4 のようになります。

リスト 4. トピックを基準としたつぶやきの検索
http://search.twitter.com/search.atom?q=%23startrek

注目する点として、他の多数の検索エンジンと同じく、Twitter の検索でも ANDOR を使用することができます。Twitter の場合には、クエリー値の間に +AND++OR+ をそれぞれ配置します。例えばリスト 5 の検索では、#startrek または #americanidol のいずれかが含まれる最新のすべてのつぶやきが返されることになります。

リスト 5. #startrek または #americanidol のいずれかが含まれるつぶやきの検索
http://search.twitter.com/search.atom?q=%23startrek+OR+%23americanidol

また、オプションとして lang パラメーターを指定することで、特定言語の結果のみを返すクエリーにすることもできます。lang パラメーターの値は、ISO 639-1 仕様で指定されている言語コードのいずれかと一致していなければなりません。リスト 6 に一例を記載します。

リスト 6. 英語でのスター・トレック関連のつぶやきの検索
http://search.twitter.com/search.atom?lang=en&q=%23startrek

日付を基準に検索結果を絞り込むことも可能です。since パラメーターと until パラメーターを使用すると、それぞれ特定の日付以降のつぶやき、または特定の日付以前のつぶやきを返すことができます。リスト 7 はその一例です。

リスト 7. 2009年5月1日以降のスター・トレック関連のつぶやきの検索
http://search.twitter.com/search.atom?q=%23startrek&since=2009-05-01

まとめ

Twitter は、関係者の間でのマイクロブロギングを容易にするソーシャル・ネットワーキング現象です。その人気はこの数年で急上昇し、今では郵便局員から有名人に至るまで、誰もが定期的につぶやきを送信しているほどです。

インターネットの不文律に従い、Twitter には検索ユーティリティーも用意されているため、ユーザーは特定の基準でつぶやきを検索することができます。この検索ユーティリティーでは、Web ページを使用して手動で検索することも (これは、多くの人々が例えば Google を使用している方法と同じです)、REST 呼び出しによって検索を実行することもできます。

Web アプリケーション開発者にとっては、Twitter Search API が Twitter Search を自動化する手段となります。開発者はこの API を使って、独自の (またはクライアントの) Web アプリケーション内に、コンテンツに関連する最新のつぶやきを表示することができます。今よりもさらにドメイン固有の情報をインターネットから集めたいと思っている開発者には、Twitter Search API は見逃せないユーティリティーです。

参考文献

学ぶために

製品や技術を入手するために

  • Twitter サイト: Twitter サービスについて調べるには、このサービスで友達、家族、同僚に接続して、自分が何をしているかについての短いメッセージを交換してみてください。
  • IBM 製品の評価版: DB2®、Lotus®、Rational®、Tivoli®、および WebSphere® のアプリケーション開発ツールとミドルウェア製品を体験するには、IBM SOA Sandbox のオンライン・トライアルをダウンロードするか、検討してみてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Open source
ArticleID=426852
ArticleTitle=Twitter Search API の使い方
publish-date=08042009