Perl Hackers Hub

第4回 Twitterから学ぶ,Web APIのキホン(1)

この記事を読むのに必要な時間:およそ 2.5 分

本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回はゆーすけべーこと和田裕介さんで,テーマはWeb APIです。

はじめに

本連載「Perl Hackers Hub」では,ハッカー向けの話題以外にも,ハッカーによる初歩的なテーマも扱っていきたいと思います。今回のテーマはWeb APIで,Twitterを題材に解説していきます。Web APIはPerlでアプリケーションを作るうえで知っておきたい知識の一つですので,基本と共に実践的なモジュールの使い方まで解説します。また,特にPerlに限らない内容も登場しますので,Perlを触ったことのない方でもWeb APIを触るコツをわかってもらえれば幸いです。

巨人の肩の上に立つ

「巨人の肩の上に立つ」⁠この言葉は,かのアイザック・ニュートンが手紙の中に書いた一文と言われていて,最近ではGoogleの論文検索のページにも引用されています図1)⁠

筆者がWeb APIを利用するときは,この言葉をいつも思い出します。Web APIは私たちが巨人たちの肩の上に立つことを可能にしてくれます。

図1 Google Scholar

図1 Google Scholar

Web APIとは?

ではWeb APIとは何でしょうか? そもそもAPIは「Application Programming Interface」の略で,ソフトウェアを作るうえでよく使われる言葉です。もちろんPerlの話をするときにも出てきます。たとえばあるモジュールを操作する際のインスタンス化やメソッド呼び出しの「やり方・取り決め」などを指します。⁠やり方・取り決め」は,プログラムでの利用される側/する側のインタフェース,つまり境界を定義しています。つまりWeb APIとは,大きなサービスやプラットフォームを外部から利用するためのインタフェースと呼べます。

ありがたいことに最近では,Google やYahoo!,YouTube,Amazon,そして今回例に挙げるTwitterなどの各種サービスが,それらサービスが持つ膨大なデータや有効な機能の一部を一般のユーザに提供するためにWeb APIを公開しています注1)⁠たとえばGoogleの各種APIを使えば,キーワードや画像,動画検索の結果を自分のアプリケーションに組み込むことができます。YouTubeのAPIを使えば,動画の検索はもちろん,誰がアップロードしたかや動画の長さはいくつかなどのメタデータも取得できます。動画のアップロード自体を自分の用意したUIから行うこともできます。まさに,Web APIを使って巨人の肩の上に立つことができ,私たちの工夫したアプリケーションを構築できるのです。

注1)
「Web Service」という名前で公開されているものもありますが,本稿では混乱を避けるために「Web API」という言葉で統一します。

Web APIを利用する流れ

HTTPを使ったシンプルな呼び出し

Web APIは「Web」なので,基本的にHTTPプロトコルでやりとりが行われます。各種サービスがWeb APIを提供しだした当初はSOAPという特殊な取り決めを採用するところが多かったのですが,現在はSOAPを使わない,よりシンプルな「呼び出し」を用いるところがほとんどです。ですので,SOAPについては知る必要はないでしょう。

現在主流の呼び出し方では,普段私たちがブラウザで行ってるような,URLを指定してのページの取得や,フォームなどで使われている情報の更新などの方法をそのまま採用しています。具体的に言うと,HTTPのGETメソッドでXMLやJSONを返してもらったり,POSTメソッドで情報を登録するスタイルです。

「HTTP」「GET」⁠POST」といった言葉がわからないという方は,まずそれらについて勉強したほうがよいでしょう。これから出てくる用語も含めWebのアーキテクチャに関する仕様については,山本陽平さんの『Webを支える技術』注2に非常にうまくまとまっているので参考にしてください。

注2)
山本陽平 著Webを支える技術─ HTTP,URI,HTML,そしてREST⁠WEB+DB PRESS plusシリーズ)⁠技術評論社,2010

3つの基本的な流れ

Web API入門として最適な,GETメソッドを用いた情報の取得の一般的な流れを紹介しましょう。次の3つが大まかな流れです図2)⁠

  • リクエストURIを構築する
  • Web APIにリクエストする
  • 結果をパースする

図2 3つの基本的な流れ

図2 3つの基本的な流れ

でどのような情報を取得したいかをURIベースで構築します。たとえば検索機能を利用する場合は,キーワードのクエリがURIに入ります。TwitterのSearch APIでキーワード「webdb」を含むツイートを取得したければ,

http://search.twitter.com/search.json?q=webdb

というURIを構築します。URIは,後述するURI::EscapeモジュールなどでURIエスケープをする必要があります。

でHTTPのGETメソッドを使って構築したURIにアクセスします。

で,取得した結果が正しければ,その形式に合わせてパースを行い,あなたのアプリケーションで利用します。レスポンスの形式はXMLが主流ですが,最近ではJSON形式も多くなっています。JSONPで提供されているのであればJavaScriptからの利用もできますね。

POSTメソッドによるWeb APIへの情報登録などの場合も,基本的に流れは同じです。違いは,で必要になるクエリパラメータの数が情報取得の場合に比べて少なくなる点や,でGETメソッドではなくPOSTメソッドによるリクエストを行う点などです。

Twitter Search APIを使ってみよう

では,実際にTwitterのWeb APIの一部であるSearch APIを使ってみましょう。

ドキュメントを読むことが重要

あるサービスのWeb APIを利用する第一歩は,そのサービスの公式ドキュメントを読むことです。Web APIを提供しているサービスには,必ず利用方法や規約などを掲載したドキュメントがWeb上で閲覧できる状態になっていますので,それを熟読しましょう。

Twitterの場合はdev.twitter.comで見ることができます。図3のとおり,すべて英語で書かれています。Twitterのように英語圏発のサービスの場合は,英語のドキュメントのみのケースがあります。英語が苦手な場合でも諦めずに頑張ってみましょう。perldocを読むのと似たような感覚で,コツをつかめば読めると思います。

図3 Twitterのドキュメントサイト

図3 Twitterのドキュメントサイト

Twitter Search API

さてSearch APIの項を見てみましょう。基本的にWeb APIのドキュメントで大事なことは共通していて,このページにもしっかりと要点だけが記述されています。

リクエストURIhttp://search.twitter.com/search.format名
サポートするレスポンスフォーマットJSON,Atom
サポートするリクエストメソッドGET
必須クエリパラメータq
オプションクエリパラメータresult_type,langなど

だいたい上記の情報さえあればWeb APIへのリクエストの発行とレスポンスの受け取りが行えます。Twitter Search APIでレスポンスフォーマットはJSON,検索キーワードは「webdb」で検索する場合,次のようになります。

リクエストURIhttp://search.twitter.com/search.json
レスポンスフェーマットJSON
リクエストメソッドGET
クエリパラメータq=webdb

リクエストURIとクエリパラメータを組み合わせた最終的なリクエストURIは,以下になります。

http://search.twitter.com/search.json?q=webdb

Webブラウザを使った簡単な検証

上記のURIをWebブラウザのURL欄に入力して,実際にアクセスしてみましょう。JSONのレスポンスが返ってきてコンテンツが表示されたり,ブラウザによってはJSONファイルがダウンロードされると思います図4)⁠

図4 WebブラウザによるWeb APIの検証

図4 WebブラウザによるWeb APIの検証

ここでWebブラウザが行ったようなリクエストの送信と,レスポンスで返ってきたJSONのパースを,これからPerlで行いアプリケーションに組み込んでいくわけです。その前にこうやってWebブラウザベースでWeb APIとのやりとりをサクッと試しておくと,イメージが湧きますし検証になるのでよいでしょう。

著者プロフィール

和田裕介(わだゆうすけ)

(株)ワディット代表取締役,(株)オモロキCTO。未踏ユース「準」スーパークリエーター。

慶応義塾大学政策・メディア研究科にて,メディアデザインを専攻。ACM SIGGRAPH Emerging Technologiesに採択など。修士課程修了後,父親と共に起業。Perl等を使ったシステム開発を行いながら,個人でもWebアプリケーションをいくつか公開している。

ブログは『ゆーすけべー日記』:http://yusukebe.com/

コメント

コメントの記入