Kikker WebAPIを強化

いくつかAPIを足したり、既存のやつで得られる情報を増やしました。
というのも、KikkerRailsに移植する(エンジンは今まで通りJavaでViewだけRails)にあたって、自分も適切なAPIがないとどうしようもないわけですよ。


まず、すでにあった
http://d.hatena.ne.jp/kanbayashi/20060714#p2
APIはタグ情報とカテゴリ,クロール日時も得られるようにしました。


あと、APIを2つ足しました


require 'xmlrpc/client'
require 'kconv'

client = XMLRPC::Client.new3(:host => 'ryogrid.myhome.cx',:port => 7777)
#検索するドキュメントのタイプ 2=はてブ 3=CEEK.JP NEWS 4=Youtube 他=だめぽ
doc_type = 2

#ドキュメントのタイプと検索したいキーワードを与えてコール
rpc_result = client.call 'KikkerWebAPI.searchByKeyword',doc_type,"web"

#ドキュメントのタイトル,url,クロールされた日にち,カテゴリ,タグとそれに対応する強さの値の順に出力
rpc_result["titles"].each_index{|index|
print rpc_result["titles"][index].tosjis + " : " + rpc_result["urls"][index] + " : " + rpc_result["crawled_dates"][index].to_s + " : " + rpc_result["categories"][index].tosjis + "\r\n"
rpc_result["tags"][index].each{|each_keyword|
print each_keyword[0].tosjis + "=" + each_keyword[1].to_s + ","
}
print "\r\n"
}


結果は


【 Yeti PaPa 】 ? 機種依存文字について : http://www.yetipapa.com/support/denial_code.html : 2006-08-09 : 一般
bx=39830.927976,bw=37276.317099,bv=34721.706222,bu=32167.095345,bz=9864.350118,webmaster=1153.017069,ld=1151.7663075,web=1150.8398175,reserved=1150.0059765,rights=1149.959652,

ゲームブックの作り方 @Wiki - トップ : http://www11.atwiki.jp/finalquest/ : 2006-08-09 : ウェブ
web=10.0,ゲーム=10.0,無駄=1.0,アイデア=1.0,ゲームブック=1.0,技術=1.0,@wiki=1.0,

アイコン-Icon-INDEX : http://www9.pobox.ne.jp/~neon/icon/icon_index.html : 2006-08-09 : コンピュータ
web=10.0,素材=10.0,index=1.0,アイコン=1.0,存在=1.0,メール=1.0,ボタン=1.0,
WS-I Sample Application Blog Series: Web Service Implementation Strategy : https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/4150 : 2006-08-09 : ウェブ
sap=10.0,sdn=10.0,ws-i=10.0,web=1.0,ws=1.0,strategy=1.0,blog=1.0,

となります。


詳細↓
サービス名=KikkerWebAPI
メソッド名=searchByKeyword
できる事=キーワードに関するエントリのリストを得る


メソッド呼び出しのパラメータは


・ドキュメントのタイプ(int)。現状、2(はてブのエントリ)か3(CEEK.JP NEWSからのエントリ)、4(Youtubeのビデオ)のみ
・キーワードの文字列(string)


をこの順で渡して下さい。


返り値は、


・titles : タイトル文字列(string)の配列
・urls : 対応するurl(string)の配列
・crawled_dates : 対応するクロール日時の文字列の配列。形式は"2006-08-21"という感じ
・categories : 対応するドキュメント群のカテゴリ(はてブとかから持ってきてるやつ)の配列
・tags : 対応するドキュメント群の各ドキュメントについてのタグの配列の配列。つまり、他の返り値と違って0番目にキーワード,1番目に対応する値をもった2次元配列を要素とする配列が入れ子になって入れられているということ。

ex) 0番目のドキュメントの0個目のタグのキーワード→result["tags"][0][0][0]

0番目のドキュメントの0個目のタグの強さ→result["tags"][0][0][1]


です。



はい、次。


require 'xmlrpc/client'
require 'kconv'

client = XMLRPC::Client.new3(:host => 'ryogrid.myhome.cx',:port => 7777)
#検索するドキュメントのタイプ 2=はてブ 3=CEEK.JP NEWS 他=だめぽ
doc_type = 2

#ドキュメントのタイプと検索したいURL(Kikker内ですでにクロールされてるやつ)を与えてコール
rpc_result = client.call 'KikkerWebAPI.getTasteByURL',doc_type,"http://q.hatena.ne.jp/1120221211"

#ドキュメントのタイトル,クロールされた日にち,カテゴリ,タグとそれに対応する強さの値の順に出力
print rpc_result["title"].tosjis + " : " + rpc_result["crawled_date"] + " : " + rpc_result["category"] + "\r\n"
rpc_result["tags"].each{|each_keyword|
print each_keyword[0].tosjis + "=" + each_keyword[1].to_s + ","
}


結果は


人力検索はてな - たとえば、地球から土星まで届くような棒を用意したとします。それを押したり引いたりしてモールス信号で通信を行えば、光速を超える速さで情報のやりとりができ : 2006-08-08 : サイエンス
検出=297.240608,器=276.045792,日記=266.372096,光=197.229456,roygb=117.485217,log=117.299919,ayamnb=114.705747,力学=109.292472,プラトン=109.004532,彡=106.62231,3
こんな感じ

詳細↓
サービス名=KikkerWebAPI
メソッド名=getTasteByURL
できる事=与えたURLを表現するベクトルを得る(Kikker内ですでにクロールされているURLに限る)



メソッド呼び出しのパラメータは


・ドキュメントのタイプ(int)。現状、2(はてブのエントリ)か3(CEEK.JP NEWSからのエントリ)、4(Youtubeのビデオ)のみ
・URLの文字列(string)


をこの順で渡して下さい。


返り値は、
・title : タイトル文字列(string)の配列
・crawled_date : 対応するクロール日時の文字列(string)。形式は"2006-08-21"という感じ
・category : 対応するドキュメント群のカテゴリ(はてブとかから持ってきてるやつ)の配列
・tags : 対応するドキュメント群の各ドキュメントについてのタグの配列。0番目にキーワード,1番目に対応する値をもった2次元配列を要素とする配列が入れ子になって入れられているということ。
ex) 0個目のタグのキーワード→result["tags"][0][0]
0個目のタグの強さ→result["tags"][0][1]

です。