もの凄く簡単なコードですが、Amazon APIsを利用した和書を検索するJavaのサンプルコードを試してみた。
サンプルコード:
AmazonSearchTest.java
環境構築は、この記事を参考して下さい。
尚、コードの修正すべき箇所は下記の3つになります。
1.Proxy環境であれば、コード内のコメントを参照して修正する。
2."associates tag" と "developer’s token"を設定する。
3.検索条件はコード内に埋め込みなので、好きなように修正して下さい。
以下、実行結果
% java AmazonSearchTest
Total number of matches = 774
0: Javaゲームプログラミングアルゴリズム ¥ 2,800
1: ゲーム作りで学ぶJavaクラス設計入門―JDK1.4.1対応 構造化設計と対比して覚えるオジェクト設計 ¥ 2,000
2: Java API実用リファレンス Vol.3 JFC/Swi (3) ¥ 2,380
3: JavaデベロッパーのためのApache Ant入門 ¥ 2,400
4: Javaによるプロブラミング―アルゴリズムとデータ構造 ¥ 2,400
5: Java プログラミング辞典 サーバーサイド・データベース・ネットワーク 編 ¥ 2,600
6: EJB+J2EE入門―JBossとStrutsで作るWebアプリケーション ¥ 3,200
7: オープンソース徹底活用 EclipseによるJavaアプリケーション開発 ¥ 2,200
8: オープンソースがビジネスになる理由―勝ち組企業は何をしたか ¥ 2,400
9: 実践Eclipse Javaプログラミング入門 ¥ 2,280
2003年10月アーカイブ
GoogleやAmazonのWebAPIsはとても素晴らしいと思うが、国内企業ではどの様な一般公開型のWebサービスを提供しているか調べてみた。
三省堂(体験版)
http://www.btonic.com/ws/
→ 辞書情報、書籍情報、新聞記事、論文、テクニカル・マニュアルなど、XMLベースコンテンツの検索が行えます。
JTB(パイロット版)
http://net.est.co.jp/jtb/about/
→国や空港の列挙や、ホテル・ツアーの検索や予約が行えます。
IWebMethod.NET ( Insider.NET presents... )
http://www.iwebmethod.net/
→コンピュータ用語事典 Webサービス
きっとこの他にもあると思いますが今後、企業の特性を生かしたWebServiceが提供される事に期待したい。(日本企業が提供しているWebService情報があればコメントをお願いします。)
非常に簡単な説明になってしまうと思いますが、Amazon APIsから戻るXMLをXSLTで構文解析させ、HTMLにする方法を書きたいと思う。
今回は、HTTPのGETでリクエストしてXMLのレスポンスをXSLTで構文解析してHTMLにする方法を説明する。
1.Interface [ HTTP GET ]
http://xml-jp.amznxslt.com/onca/xml3?
t=[associates tag]&
dev-t=[developer’s token goes here]&
type=[lite or heavy]&
mode=[product line goes here]&
page=[page # goes here]&
f=[ output format ]&
KeywordSearch=[subject keyword goes here]&
locale=[locale]
Explanation of Tag
t : アソシエイトタグID
アソシエイトプログラムへ登録した時のID(デフォルトは、webservices-20)
dev-t : デベロッパー・トークン
ここから登録して取得します。
type : [lite] or [heavy]を選択します。 XMLのレスポンス情報が違います。
mode : 製品カテゴリ。 本やDVDなどがあります。(下記 mode一覧参照)
page : XSLTで表示した製品数よりもXMLのレスポンス製品が多い時に有効。 ページ制御
f : [xml] or [xsltのURL] 出力フォーマットを指定する。
KeywordSearch : 検索キーワド。 この他にも ArtistSearch、AsinSearchなどがある。
locale : 日本なので jp 。(USは必要なし!、イギリスは uk、ドイツは de になる。
※ t と dev_t は、デタラメでも動作します???
アソシエイトタグはキャッシュバックがあるが、デベロッパー・トークンは何の意味があるのだろうか???
※日本で使用可能なmode一覧
books-jp
dvd-jp
vhs-jp
electronics-jp
software-jp
music-jp
classical-jp
2.使ってみる。
[ サンプル1 ]
Response XML
ここ をクリックすると、Java書籍の一覧が表示されます。
[ サンプル2 ]
Response XML
これはJava書籍のバナーです。
[↑この interface ]
http://xml-jp.amznxslt.com/onca/xml3?
t=[ アソシエイトタグID ]
&dev-t=[ デベロッパー・トークン ]
&KeywordSearch=java
&mode=books-jp
&type=lite
&page=1
&locale=jp
&f=http://www.blogkid.com/AmazonWebServices/XSLTSamples/webserv-example3c.xsl
Googleで続けてきた投稿ですが、ネタが減ってきたので以前から気になっていたAmazon APIなるモノを試してみた。 今回はAmazonDevKitにあるJavaのサンプルを動作させるまでの本当に簡単な手順を記述します。
1.ユーザ登録とDeveloper's Tokenの取得
下記のサイトより・・・
http://www.amazon.co.jp/webservices
下記の手順を完了する。
1. Download our free developer's kit
2. Apply for a free developer's token
2.WebServices - Axisをダウンロードして環境を作る。
↓ここからダウンロード(今回はV1.1)
http://ws.apache.org/axis/index.html
展開してAXISのlibにあるJarファイルをCLASSPATHへ通す。
3.Amazon WSDLドキュメントからの Java コードの生成
( 参照WSLDL : http://soap.amazon.com/schemas3/AmazonWebServices.wsdl )
下記のコマンドを実行する。
[ for none-proxy environment ]
% java org.apache.axis.wsdl.WSDL2Java -v -p com.amazon.soap.axis
http://soap.amazon.com/schemas3/AmazonWebServices.wsdl
[ for proxy environment ]
% java -Dhttp.proxyHost=[ProxyServer] -Dhttp.proxyPort=[ProxyPort]
org.apache.axis.wsdl.WSDL2Java -v -p com.amazon.soap.axis
http://soap.amazon.com/schemas3/AmazonWebServices.wsdl
--- こんな感じでJavaコードが生成される。
Parsing XML file: http://soap.amazon.com/schemas3/AmazonWebServices.wsdl
Generating com\amazon\soap\axis\PowerRequest.java
Generating com\amazon\soap\axis\ShortSummary.java
Generating com\amazon\soap\axis\ListingProductInfo.java
・・・
生成されたコードをコンパイルする。(今回はこんな感じで!)
% javac com\amazon\soap\axis\*.java
出来上がった com package をCLASSPATHへ通す。
4.Amazon Dev KitのJavaのサンプルコードをコンパイルする。
↓このフォルダーにJavaのサンプルコードがあるので作業ディレクトリを移動する。
[kit]\AmazonWebServices\JavaCodeSample
% javac *.java
コンパイルしてみる・・・っがエラーが沢山出る。
「補足」20031108にリリースされたバージョンは問題ない。
コンパイルエラーで出力されるサンプルコード内にあるメソッド [ setXXXXXX_Id ]のId を idへ全て変更して再コンパイルすれば上手くいくはず!
5.サンプルの起動
None Proxy環境であれば、
% java run
っで実行可能
Proxy環境の場合は AbstractXmlQuery.java の 100行近辺にある。
[ Original ]
socket = new Socket(hostPort[0], (hostPort.length > 1) ? Integer.parseInt(hostPort[1]) : 80);
[ Modify ]
socket = new Socket( [ ProxyServer] , [ProxyPort] );
簡単な修正ではあるが、これで動作するはず!!(認証が必要なProxyは解りません!)
6.アプリケーションを実行
※起動が成功すると、Javaのサンプルアプリケーションが表示される。
XMLタブとSOAPタブがあるが、XMLタブの[Keyword Search]を選択する。
殆どの箇所はデフォルトで入っているので、そこは修正せず下記のみ入力する。
Developer Token [ 1で取得したID ]
Keyword [ 検索したワード ]
Mode [ 商品のカテゴリ ]
私は、Keywordを [ google ]で、Modeを [ books-jp ]で試した。
成功するとアプリを起動したコンソールへレスポンスのXMLが表示され、サンプルアプリケーションのGUIへはTreeViewで結果が見れる。
○今回は、ここまで・・・Google APIsより機能が多いので色々と探ってみたい。
Googleへ機能改善レポートを出す事が出来ます。
[Japanese]
http://www.google.co.jp/quality_form
http://www.google.co.jp/quality_form?q=blogkid [ q="検索に使用したキーワードなど" ]
[English]
http://www.google.com/quality_form
http://www.google.com/quality_form?q=blogkid [ q="検索に使用したキーワードなど" ]
個人的にGoogleへの不満はありませんが、チャンスがあれば是非書きたいと思う。
特に改善のアイデアはあれば是非書いてみたい!・・・しかし、あるようでないんですよね!
この、Google Zeitgeist は我々に、貴重な情報を教えてくれる、とても良いレポートである。
検索キーワードだけでは無く、気候についての検索状況(季節や状況により変わると思いますが・・・)や、各地域からのアクセス比率や使用しているWeb Browserなど・・・とても説得力のあるグラフとして活用できる。
GoogleAPIsを知りだした頃からいったい何に活用出来るのかと色々と考えてきた。
今までは仕事でも個人的にも検索ワードだけの入力で活用してきましたが、最近はGoogleの特別構文などを活用することで「知る」範囲が広くなったように感じる。
例えばUSのCNNでは日本企業が企業別にどのくらい扱われているかを検索結果の数値から興味度(私が勝手に思い込む)として知る事が出来るような気がします。
今日現在の日付で検索キーワードを下記のようにすればサイト内で扱われている数値を算出する事が出来る。
"日本企業名(英語)" site:http://www.cnn.com
ちなみに今日現在の結果は・・・
Honda : 1530
Nissan : 1210
Toyota : 2350
Sony : 5500
Nec : 1360
Sharp : 7680 ( 単語的に微妙・・・)
Toshiba : 1900
Hitachi : 906
参考までに、これのcnn site:http://www.cnn.com検索結果は955000であった。
今回の例は良くも悪くもニュースとしてインターネットに出た記事の総数なので興味というか気にされるだけ華かな・・・っと個人的感じますが、このような感じで「知る」事からこれをなんらかの形で活用していく会社やサービスなどが、Googleを活用する事で成功する為の鍵の1つではないかと個人的に思う。
話を始めに戻しますが、つまりGoogleAPIsを活用し unix cronで定期的にAPIsを起動させて統計情報などを取ると言う現実的な活用が見えてきた。
但しGoogle APIsでは件数が合わない・・・正式版に期待したいが、まずはどのような事が出来るか想像する事に重点を置きたいと思う。
突然ですが、アメリカで非常に人気のあるSFテレビシリーズで、「スタートレック」というものがあります。 その中にクリンゴン人という架空のキャラクター(宇宙人)が TVシリーズで出てきました。 そこで、アメリカの映画会社のパラマウント社が、映画版の第3作目を作る際に、言語学者のマーク・オークランド博士に、このクリンゴン人が話すクリンゴン語を作るよう依頼しました。その後、5作目、6作目でもクリンゴン語は用いられました。
参考サイト:クリンゴン語について
そのクリンゴン語のGoogle版URLです!
http://www.google.com/intl/xx-klingon/
See : http://www.google.co.jp/press/funfacts.html
抜粋:
・・・今のところ、地球の軌道圏外から検索クエリが送られてきたことはありませんが、万一に備えて Google では、クリンゴン語のインターフェイスに取り組んでいます。
下記のURLは、ハッカーの為の?
http://www.google.com/intl/xx-hacker/
下記のURLは、人形キャラクターMuppets' Swedish Chef(スウェーデン???)
http://www.google.com/intl/xx-bork/
下記のURLは”なんちゃってラテン語”
http://www.google.com/intl/xx-piglatin/
下記のURLは、アニメキャラクターのElmer Fuddが話す言語
http://www.google.com/intl/xx-elmer/
Googleは英語のみ下記の機能などをサポートしているので、まとめてみた。
○株価情報(Yahoo! FINANCEを参照する。)
stocks:MSFT
参考までに検索で一致するSymbol(Microsoftの場合はMSFT)で検索すると検索結果にグラフマークが表示される。(電卓マークといい、グラフマークといい他に何があるか非常に興味があります。)
Symbolのみで検索する事も可能・・・ex) intc sunw nuan
※Google APIsでは下記のExceptionが発生し検索出来なかった。
GoogleSearchFault: com.google.soap.search.GoogleSearchFault: Fault Code = SOAP-ENV:Server
Fault String = Exception from service object: Internal error while performing search.
○言葉の定義
define:usa
とにかく意味を参照しているサイトから検出し表示する。 ページコントロールが無いようで、10件以上あっても同じページへ表示させる。
※Google APIsでは件数がゼロだった。
○電話番号&住所検索
phonebook: Googleの電話帳全体を検索する。
rphonebook: 個人用の電話帳のみを検索する。
bphonebook: ビジネス用の電話帳のみを検索する。
usage:
phonebook:[First name] [Last name] [US State]
phonebook:[Phone address]
...etc
sample:
phonebook:white house washington dc
bphonebook:computer ( ny | la )
rphonebook:sears ma
しかも住所はYahoo! Maps , MapQuest と連携して場所まで解る・・・とても便利!
※Google APIsでは件数がゼロだった。
○住所検索
該当するアドレスがあれば、Yahoo! Maps か MapQuestへ誘導する。
ex) 165 University Ave Palo Alto CA
※Google APIsでは結果件数が違った。
Googleの検索時には通常検索とは別に幾つか特別構文なるモノがあるがGoogle APIsでどこまで通用するか試してみた。 下記に記す3キーワドのみWebBrowserからの検索結果の数値と同一だったので整合性がとれている・・・っと思う。
related: 指定されたページと関連する検索をするのに使用する。
ex) related:www.google.co.jp
link: 指定されたURLにリンクしているページを検索するのに使用する。
ex) link:http://www.google.co.jp/
info: 指定されたURLに関するさまざまな情報へのリンクを出力する。
ex) info:http://www.google.co.jp/ ※そもそも、この場合1件であったが、関連するページまでは出力されない。
Googleで楽しんでいるサイトなどをまとめてみました。
・2検索キーワードで検索結果数で競い合わせる。
http://www.googlefight.com/
・ある人名やトピックの説明をGoogleの検索結果から行なうサイト。
http://www.googlism.com/
・Googleのサイトを左右反転させたサイト
http://www.alltooflat.com/geeky/elgoog/
・サイト間の関連性を視覚的に表示してくれる。(Java Applet)
http://www.touchgraph.com
Googleの電卓機能は知りませんでした!
検索結果に電卓の画像と式と結果が出てちょっと驚きました!
関数(cos / sqr )などや予約語 pi(円周率)や下記の計算なんかも出来ました!
1 inch
1 inch in PostScript point
65535 in Hex [ 16進数 ]
sin(45 degree) [ 度 ]
mass of earth [ 地球の重さ ]
mass of earth / (4/3 * pi * radius of earth^3) [ 地球の密度 ]
mass of the sun [ 太陽の重さ ]
1 mile in km
i * i [ これは -1なら・・・ ]
sqrt(-1) [ これは i ]
VI * X [ ギリシャ文字も計算 ]
3 * c [ これは高速か!!]
3 * h [ プランク定数 ]
3 * k [ ボルツマン定数 ]
3 * s [ 秒 ]
3 * g [ グラム ]
3 * l [ リットル ]
3 * u [ 原子量単位 ]
0 + 0b010 [ これは2になります。。。基数は最初の数字に合わさるようで! ]
3.5V/1A [ 電圧などなど・・・]
3 horsepower in W [ 馬力ですか!!]
1year in sec [ 年から秒 ]
1century in year [ 世紀 ]
300kbps*10hour in GB [ bps / gigabytes ]
seconds in a day * 7 [ 7日を秒にする ]
3 dozen * 1 [ 1ダース = 12 ]
1 bakers dozen [ パン屋のダース ]
1 tablespoon [ 大さじ ]
1 teaspoon [ 小さじ ]
golden ratio [ 黄金比率 ]
1 googol [ Google名の由来? ]
なんだか開発している方の趣味のような感じもしますが、流石だと思います。
※ところで通貨変換は出来るのでしょうか?出来れば凄い・・・っと思う。
※参考までに、GoogleAPIsでは実行出来ませんでした。
*計算例を追加した。
(30 gigabytes) / (160 kbps)
(1 hour) * 128 kbps
one decade
98.6 degrees Fahrenheit
1 smoot
answer to life, the universe and everything
(answer to life, the universe and everything * the speed of light) / (3 US teaspoons)
(1.21 gigaWatts) * 88 mph
1 light year
Googleのキャッシュ機構は素晴らしいと思うが、キャッシュの取り扱いなどについては著作権侵害などで熱く議論されている。 個人的には、これで商売できるんじゃないのかGoogleさん・・・っと思っていましたが、かなり甘かったみたいです。
話を変えますが、以前検索のサンプルを作り試していたところ、日本語の場合にWebBrowserとGoogle APIsでは検索結果が違う事があった。(それもかなり大きな数値での誤差がある。) そこで今回はキャッシュも誤差があるのかサンプルを作りテストしてみた。
GoogleCache.java
ダウンロードしたら、"Your Google Web APIs license key"の箇所を書き換え、Proxyが必要であれば、環境に合わせて修正します。
*コンパイル方法
java -classpath googleapi.jar GoogleCache.java
*実行方法
java -classpath .:googleapi.jar GoogleCache "<取得したいキャッシュのURL>"
[ Proxyが必要な環境でコードを修正していない場合は ]
java -classpath .:googleapi.jar -Dhttp.proxyHost= -Dhttp.proxyPort= GoogleCache "<取得したいキャッシュのURL>"
この記事を書いている日付は2003.10.20であるが、2003.10.16あたりに変更されたページをWebBrowserとGoogle APIsの両方から取得してみたところ同一の結果を取得する事が出来た。 その他にも数ページしか試していませんが、たぶんキャッシュに関して違いはないと思いますが間違っていたらごめんなさい・・・
こんな記事を見つけた。 Googleの秘密は安くて早いハードウェアだそうです!
前に書いたベータ版でリリースしているGoogle APIsのサーバもフリーのTomcatを使っているのには正直驚いた!現在もビジネスとして成功させているGoogleの判断としては個人的には素晴らしいと思う。)
・以下に気になった点を抜粋。
---
"Cheap and fast" hardware is the way to go, according to Craig Nevill-Manning, a senior research scientist with Google.
===
「安く、また速い」ハードウェアは、とるべき道です。
---
---
This "fast and cheap" mantra at Mountain View, California-based Google resonates through the more than 10,000 servers used by query searchers worldwide, turning over more than 200 million search queries a day among 4 billion Web documents.
===
Googleは世界中から1日に2億回以上もの検索リクエストがあり、40億のドキュメントから結果を返す処理を、1万台以上のサーバで対応しています。
---
※記事は古いですが、OSはLinuxを採用しているようです。
ハードウェアはRackableのIA サーバを採用しているようで・・・理由は下記のページを読んで納得!
http://www.atmarkit.co.jp/news/200105/02/google.html
以下にも興味深い資料がありました。
The Google Cluster Architecture
http://www.computer.org/micro/mi2003/m2022.pdf
The Google File System
http://www.cs.rochester.edu/sosp2003/papers/p125-ghemawat.pdf
-------
ここまでは真面目な話でしたが、下記のサイトは何かヒントが隠れているのでしょうか?
http://www.google.com/technology/pigeonrank.html
・・・実はPageRankの名前はPigeonRankから生まれたのでしょうか!
・・・鳩の群れをクラスター化させ検索効率を上げている!
・・・Googleは、その鳩全職員の倫理の扱いのためにすべての国際基準を超えます。
・・・鳩は公園から猟犬を使って集め適正な仕事をさせる。
尚、このPigeonRank Systemの基礎研究は、B. F. Skinnerさんにより突破口が開かれたとか・・・時代が時代なだけに、凄い方です。
※知人から聞きましたが、実はこの鳩のページは2002年のApril's Foolsだそうです!
2002 Holiday Logos :
http://www.google.com/holidaylogos02.html
Newsletter for May 15, 2002 :
http://www.google.com/googlefriends/may2002.html#pigeon
Google APIsは現在ベータ版という事で利用されていますが、このサーバ(SOAPのWebServiceサーバ)は現時点ではhttp://api.google.com/search/beta2 ←このURLへ向けられ、WebBrowserからアクセスしてみると、どこかで見た画面である。!そう、ApacheSoapである!
更に調べて見ると、現時点のTomcatのバージョンは4.0.3を使っている事が解った。
ただ、個人的にへぇーそうなんだ!っと思っただけであるがベータバージョンといいつつもサーバ構成が気になる。
Googleツールバーをインストールすると、"PageRank"なるものがあり、説明はここにありますが、なんだか人気の証みたいな感じがします。
始めてGoogleAPIsを使いました。
(昨年からあったんですね!時代に乗り遅れていました・・・)
http://www.google.com/apis/
↑このページで利用規約に同意して、SDKと自分のGoogle Web APIs license keyを取得します
簡単なサンプルコードはここからダウンロードして下さい。 このサンプルは検索キーワードからMAX10件取得し、予想される検索数を算出します。
言語の制限は前述のメソッドGoogleSearch#setLanguageRestricts()を使用します。
developer's toolのAPIs_Reference.htmlを見ると、日本語は"lang_ja"で指定します。
GoogleTest.java
ダウンロードしたら、"Your Google Web APIs license key"の箇所を書き換え、Proxyが必要であれば、環境に合わせて修正します。
*コンパイル方法
java -classpath googleapi.jar GoogleTest.java
*実行方法
java -classpath .:googleapi.jar GoogleTest "<検索ワード>"
[ Proxyが必要な環境でコードを修正していない場合は ]
java -classpath .:googleapi.jar -Dhttp.proxyHost=
--- 2004.1.10
当初のサイトの目的から内容が変わってきたので、タイトルヘッダーを下記に変更しました。
「Googleの観察と映画とJavaについて」
--- 2003.10.17
今日からMovableTypeを使いウェブログを開始しました。 知人に進められてやってみたものの、実際にどんなサイトになるか自分でも良くわかりませんが、WebServiceの技術とサービスの内容を軸に色々と書き込んでいこうと思います。
BLOGKIDの名前は、特に理由はありませんが、取得したかったドメイン名が全て取られており、とりあえずウェブログやるし小僧だからいいか!・・・っと思い命名しました。
