レベル: 中級 Brian M. Carey, Information Systems Consultant, Triangle Information Solutions
2009年 8月 04日 Twitter は間違いなく、最近 World Wide Web に登場したソーシャル・ネットワーキングのなかで最も成功している例の 1 つです。Twitter には独自の検索エンジンがあり、ユーザーがキーワードやカテゴリーを基準に「つぶやき」を検索できるようになっています。この検索エンジンに備わった API はプログラムによる検索を容易にし、REST サービスとして機能して検索結果を Atom フォーマットで返します。この記事を読んで、Twitter Search API の基本的な使い方を学んでください。
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 & 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>
...
]>
|
注: 出力される内容は全く違って見えても、その構造には少しの違いもありません。私はこの検索を、皆さんが検索を実行するよりずっと前に実行しました。この出力に含まれる最新のつぶやきが、皆さんの出力に含まれる最新のつぶやきと異なるのは、そのためです。デフォルト検索では、新しいつぶやきから古いつぶやきの順にソートされることを思い出してください。
上記のコードの内容は以下のとおりです。

 |
さらに複雑な検索を作成する
上記で説明したサンプルはかなり初歩的なもので、検索しているのは 1 つの単語だけです。その一方、Twitter Search API は強力な基準パラメーターの一式を提供し、複雑なクエリーをサポートします。
例えば、特定のユーザーに向けられたつぶやきを検索したいとします。つぶやきを記述するための言語では、特定のユーザーを対象にしたつぶやきを作成するには、対象ユーザーのスクリーン・ネームの前にアット・マーク (@) を付けます (@johnqpublic など)。この特定のユーザーに送信されたつぶやきを検索する際には、@ 記号を無視して検索を行います。リスト 3 を参照してください。
リスト 3. 特定のユーザーを対象としたつぶやきの検索
http://search.twitter.com/search.atom?q=to%3Ajohnqpublic
|
URL 中央のユーザー名の直前にある %3A に注目してください。これは、コロン (:) に対応する URL エンコーディングです。その前には to プレフィックスがあるので、この部分は to:johnqpublic であることがわかります。
特定のユーザーに対するつぶやきではなく、特定のユーザーからのつぶやきを検索するには、リスト 3 で使用している to を from に置き換えればよいだけです。
また、特定のトピックを検索したい場合には、シャープ記号を URL 用にエンコードする必要があります。シャープ記号に対応する URL エンコードは %23 なので、#startrek の API 検索は、リスト 4 のようになります。
リスト 4. トピックを基準としたつぶやきの検索
http://search.twitter.com/search.atom?q=%23startrek
|
注目する点として、他の多数の検索エンジンと同じく、Twitter の検索でも AND と OR を使用することができます。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 のオンライン・トライアルをダウンロードするか、検討してみてください。
議論するために
著者について  | |  | Brian Carey は、Java エンタープライズ・アプリケーションのアーキテクチャー、設計、実装を専門とする情報システムのコンサルタントです。Brian は Twitter でつぶやきを公開しているので、彼をフォローすることができます (http://twitter.com/brianmcarey)。 |
記事の評価
|