Linuxゲリラ戦記

API……Aitsuno Pantsu In my pocket.

アイキャッチ

42.GoogleのAPIをチラ見する。curlコマンド

ナックス「さて!!当初はGoogle画像検索の生のウェブ情報をガリガリ分析しながら画像収集ソフトを作成しようと思っていたのですが、どうやらGoogleのAPIがあるようなので、今回からそちらを使っていこうかと思います」

デビー君「うわっ──!!」

ナックス「ど、どうしたんですか!?デビー君!?」

デビー君「ペ、ペンギンが……喋った……!!」

ナックス「…………」

デビー君「…………」

ナックス「…………」

デビー君「…………」

ナックス「はい。Googleでは『Googleのサービスをプログラマーの方が自由にいじっていいよー』と、APIを無料で公開しています。太っ腹ですね」

デビー君「エーピーアイって何?」

ナックス「APIとは『Aitsuno Papatte Iikanji(あいつのパパっていい感じ)』の略。つまりこのサービスを使えば、デビー君が頑張って憧れの赤いメガネのあの子と付き合おうとしても、あの子はデビー君のパパに惹かれてしまう、という、お昼のドラマもビックリなドロドロな三角関係になれます」

デビー君「そ、それがGoogleの提供するサービス……!!」

ナックス「ウソです。APIとはアプリケーションプログラミングインターフェースの略で、『これを使えばそれを提供しているプログラム言語とかサービス会社が提供しているサービスを簡単に使えるよ』っていうサービスです。プログラマが世界的に展開している作戦の一つ『専門用語を使って格好良く見せる作戦』の一つです」

デビー君「へー」

ナックス「とりあえず『Google API』で検索してみたところ、Google Codeというサイトを見つけました」

ナックス「私たちの目的は『Googleの画像検索に関するAPI』です。リンクをたどってそれらしいページを探します。左下のAPI と デベロッパー ツールをクリック。左メニューの検索をクリック。真ん中、上のGoogle AJAX Search APIをクリック。マルチメディア検索をクリック。左メニューのデベロッパー ガイドをクリック。はい!着きました!!」

デビー君「長いよ!ページのありかが分かりにくいよ!っていうか、初心者は見つけようがないじゃん!」

ナックス「そこはまぁ、長年の経験と勘で目的のページを見つけ出すのですよ。さて、実はGoogleはAPIを提供してはいるものの、もっぱら前回解説したjavascriptというプログラミング言語(Ajax)を使用したAPIの使用を推奨しております」

デビー君「え!javascriptって、Linuxでは使えないんだよね?」

ナックス「いえ、javascriptというのは前回も解説した通り、ブラウザに付属するプログラミング言語です。なので、WindowsでもLinuxでもMacでも、インターネットを見るための『ブラウザ』があるなら、使おうと思えば使えます」

ナックス「が!!javascriptの解説をするとLinuxプログラミングというよりもどちらかというとウェブプログラミングの話になってしまいますので、ちょっと趣旨がずれてしまうなぁ、と」

ナックス「というわけで、このデベロッパー ガイド、下の方を見ると『Flash やその他 JavaScript を使用しない環境』という解説があります。やったぜ!こいつを見ながら我らが崇高な目的、エッチな画ぞ……ごほん!『私たち人類が地球の為に今、できること──』という目的を達成していきましょう」

デビー君「逆に画像検索でどうやってその目的を達成出来るのか興味はあるけども」

デビー君「っていうか、字が多すぎて『Flash やその他 JavaScript を使用しない環境』の解説を読む気が全くしないんだけど……」

ナックス「そうですね。プログラムを独学している初心者にとって、こういうサイトの『字ばっかり』というのは結構苦痛かもしれません。プログラミングに慣れてくると、こういう文章を読むことで自分が作りたいプログラムが作れるので苦ではなくなってくるのですが……」

ナックス「まぁ、読まなくてよいです。重要な箇所だけ私が解説します」

ナックス「えーっと、大事な所は『javascriptを使わなくてもcurlコマンドとかwgetコマンドとか使えるよ』って書いています。wgetコマンドは昔(16.Linuxのエロ欲望はWindowsのゲーム欲望を凌駕する)解説しましたね。今回はせっかくなのでcurlコマンドを使ってみましょう」

ナックス「CUI環境を立ち上げます」

CUI環境を立ち上げる

ナックス「ちなみに、私もcurlコマンドを使用したことがありません。なので、とりあえずmanコマンドでcurlコマンドの説明でも読んでみましょう」

$ man curl

man curlコマンドを実行する

$ man curl
No manual entry for curl

ナックス「あ。無い。どうやらcurlコマンドをインストールしていないようですのでインストールします。私はDebianなのでaptitudeコマンドですが、もし皆さんもインストールされていないようでしたら、それぞれのディストリビューションにあったコマンドでインストールしてください」

$ su -
# aptitude install curl
# exit
$ 

ナックス「インストールし終わったら、もう一度manコマンドで見てみます」

$ man curl

ナックス「『ファイルをサーバーに送ったり、逆にサーバーから手に入れたりするよ』と書いています。wgetは『サーバーから手に入れる』だけなので、それよりもちょっと優れたコマンドの様です」

ナックス「というわけで、早速このコマンドを使ってAPIから情報をゲットしようかと思います」

デビー君「APIから情報をゲット?」

ナックス「そうです。APIとかいうものに慣れていない初心者の方の場合、APIと聞くと『なんだか凄そう』『めちゃくちゃ凄いプログラミングを使うんだろうな』と思ってしまうと思いますが、そんなのは幻想です。今回使うAPIは『Google画像検索で検索して手に入れる検索結果』を手に入れるAPIです」

デビー君「え?じゃあ、Google画像検索をそのまま使えばいいんじゃないの?」

ナックス「そう言いたい気持ちは分かります。でも、APIを使った方が検索結果をもっと自由にいじれるのです」

デビー君「?????」

ナックス「そう思われるのも仕方なし!黙って俺についてこい!」

ナックス「というわけで、解説に『例えばこんなコマンドを使ってみてくれ』ってコマンドでAPIを使用する例が載っています」

curl -e http://www.my-ajax-site.com \
        'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton'

ナックス「-e <アドレス>というオプションは、"ワタクシ、<アドレス>から来ました。こんにちは"と偽装(?)するためのものだそうです」

ナックス「そして、実際のデータを http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton に取りにいく、と」

ナックス「おそらく、javascript以外からAPIを使用するには"ワタクシ、<http://www.my-ajax-site.com>から来ました。こんにちは"と偽装しないと、うまくいかないのでしょう」

ナックス「さて、このコマンド。2行に分かれています」

デビー君「ほんとだ!!このコマンドは2行に分かれて使えるコマンドなの?」

ナックス「いいえ。実は、コマンドの途中に \ を入れると、改行してコマンドの続きが書けるのです」

デビー君「へー」

ナックス「逆に言えば、上記のコマンドは下記の様にしても、なんら問題はありません」

curl -e http://www.my-ajax-site.com 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton'

ナックス「さて、このコマンドは'Paris Hilton'という検索キーワードでウェブ検索した結果を返している様です。うまくいけばこんなのが表示されます」

{"responseData": {
 "results": [
  {
   "GsearchResultClass": "GwebSearch",
   "unescapedUrl": "http://en.wikipedia.org/wiki/Paris_Hilton",
   "url": "http://en.wikipedia.org/wiki/Paris_Hilton",
   "visibleUrl": "en.wikipedia.org",
   "cacheUrl": "http://www.google.com/search?q\u003dcache:TwrPfhd22hYJ:en.wikipedia.org",
   "title": "\u003cb\u003eParis Hilton\u003c/b\u003e - Wikipedia, the free encyclopedia",
   "titleNoFormatting": "Paris Hilton - Wikipedia, the free encyclopedia",
   "content": "\[1\] In 2006, she released her debut album..."
  },
  {
   "GsearchResultClass": "GwebSearch",
   "unescapedUrl": "http://www.imdb.com/name/nm0385296/",
   "url": "http://www.imdb.com/name/nm0385296/",
   "visibleUrl": "www.imdb.com",
   "cacheUrl": "http://www.google.com/search?q\u003dcache:1i34KkqnsooJ:www.imdb.com",
   "title": "\u003cb\u003eParis Hilton\u003c/b\u003e",
   "titleNoFormatting": "Paris Hilton",
   "content": "Self: Zoolander. Socialite \u003cb\u003eParis Hilton\u003c/b\u003e..."
  },
  ...
 ],
 "cursor": {
  "pages": [
   { "start": "0", "label": 1 },
   { "start": "4", "label": 2 },
   { "start": "8", "label": 3 },
   { "start": "12","label": 4 }
  ],
  "estimatedResultCount": "59600000",
  "currentPageIndex": 0,
  "moreResultsUrl": "http://www.google.com/search?oe\u003dutf8\u0026ie\u003dutf8..."
 }
}
, "responseDetails": null, "responseStatus": 200}

ナックス「これで成功です。ちなみに、私の場合は表示が整理されていませんでした」

返ってきた結果が整理されていない

ナックス「が、大事なのは『整理された情報が返ってきたかどうか』ではなく、『情報が返ってきたかどうか』です。なので、私のような感じになっても成功です」

デビー君「これでウェブ検索した結果が返ってるの?どう見ても難しさが最上レベルな気がするんだけど……」

ナックス「いえ。Linuxよりも楽勝です。このデータ形式は、最近話題のJSON形式のデータです。javascriptで良く使われるデータ形式ですね。JSON形式のデータは私もあまり触れたことが無いのですが……。まぁ、どうにかなるでしょう!」

ナックス「今回はウェブ検索のAPIを使用したので、次回は画像検索のAPIを使用しつつ、まずはAPIの使用方法を解説。その次くらいがデータの見方の解説かな!(43.Google画像検索API。クエリを作って欲しい情報をゲット)」

ナックス「ちなみに、解説で使用しているGoogle APIは、バージョンが古いので、もし使用できなくなっていたら、以下にある補足を参考にしてね」

ナックス「また、これ以降の解説で52番まで、Google APIを使用して解説を行っているのですが、これら全ての解説で、Google APIが使用できなくなった場合に備えて補足を記述しています。それぞれの解説で、Google APIが使用できなくなっていても、補足を参考にすれば、Linuxの学習に問題が無いようにしていますが、もし解説がわかりにくいようであれば、どのあたりがわかりづらいか、メール master@garunimo.com していただければ、わかりやすいように書きなおしてみますので、お気軽にメールください。」

このエントリーをはてなブックマークに追加