From del.icio.us to Google Co-op



1.Google Co-op
自分専用のもしくは、複数の人でコラボして作る検索サイトGoogle Co-opが結構面白くて便利。Googleにユーザー登録しておけば、利用できる。ちなみに、Google以外がやっている似たようなサービスが結構前からあって、Rollyoなどがある。こちらは、昔少し試して以来使ってないので、Google Co-opとどっちがどうなのかは不明。


2.少しいじってみる
操作は結構簡単で、検索するサイトに含みたいサイトを登録していくだけ。で、あとは、設定項目に従って、自分の目的に合わせてカスタマイズしていけばいい。使い勝手はGoogle Adsenseに近い。ちなみに、そのGoogle Adsenseを作成したサイトにて運用することも出来る(作成した検索サイトのControl panel の Make money タブで設定)。


3.自分のサイトに貼り付けてみる
さらに、いろいろと親切な仕組みがあって、そのカスタマイズした検索サイトを利用して検索させることの出来る検索窓を自分のサイトに貼り付けることも出来る。しかも、親切なことに、javascriptが無くても動くものもあるし、Google AJAX Search API に利用することも出来る。なお、これらの設定は、作成した検索サイトのControl panel の code タブで設定できる。
javascriptなし版があるので、例えば、このblogも使用してるHatena Diaryでも設置できるわけで、この画面の左上のところに試しに設置してみた。ちなみに、Tableタグで出来ているので、適当にいじれば、ある程度は簡単にレイアウトをいじることが出来る。


4.サイトを登録するのが面倒
4.1 Advanced
ただ、サイトを登録するのが少し面倒。しかも、サイトの表記法が若干独特で、"http://"がいらないだとか、トップページ以下のサイトを全ての場合は、"*"を適切に使わないといけないだとか。
そこで利用したいのが、テキストから一気にアップロード。この一気にアップロードは、作成した検索サイトのControl panel の Advanced タブで設定できる。ちなみに、サイトの登録のみならず、いろいろな設定もxmlを使用して出来る。
4.2 del.icio.us
とはいえ、今度はテキストを用意するのが面倒。ちなみに、フォーマットとしては、タブ区切りテキスト、XMLOPMLが利用できるようだ(2006/11/25時点)。
そこで、既に存在するbookmarkを利用できないかと考えてしまう。そこで、思ったのがdel.icio.usの登録情報が利用できないものかというところ。つまり、del.icio.usxmlGoogle Co-opxmlへ変換してしまおうということ。
4.3 del.icio.us xml を読み取る
そこで、まず下記のようなdel.icio.usxmlを読み取るプログラムをPHPでかいてみた(正確に言うと、既に書いていたものを少し修正した)。これが最適なプログラムなのかというとそれほどの自信が無くて、もっと良い書き方があるかもしれないが、とりあえず動く。ちなみに、php5じゃないと動かないはず。なお、apiの呼び出し回数には制限があるので、何度も試していると不具合がでくるかもしれません(詳しくは、del.icio.usのサイトを参照ください)。



info_delicious.php
delID=$mydelID;
}

//Set keyword you wnt to search
public function SetdelTag($MydelTag){
$this->delTag=$MydelTag;
}

//Recieve xml file
public function GetdelInfo(){
//Generate xml url
if($this->delTag=="" and $this->delID=="tag"){
$this->delInfo["message"]="Both Tag and ID does not set!";
}else{
$this->url="http://del.icio.us/rss/".$this->delID."/";
if($this->delTag!=""){
$this->url.=$this->delTag."/";
}
//Call main body of reading xml file
$this->GeneratedelInfo();
//print($this->url);
if($this->itemnum==0){
$this->delInfo["message"]="No Result";
}
}
return($this->delInfo);
}

//Read XML File and store to array
private function GeneratedelInfo(){
$XMLRead=new XMLReader;
$this->itemnum=0;
if($XMLRead->open($this->url)){
while($XMLRead->read()){
switch($XMLRead->name){
Case "item":
$XMLRead->read();
while($XMLRead->name!="item"){
switch($XMLRead->name){
Case "title":
if($XMLRead->nodeType==1){
$XMLRead->read();
$this->delInfo["item"][$this->itemnum]["title"]= $XMLRead->value;
}
break;
Case "link":
if($XMLRead->nodeType==1){
$XMLRead->read();
$this->delInfo["item"][$this->itemnum]["link"]= $XMLRead->value;
}
break;
Case "dc:date":
if($XMLRead->nodeType==1){
$XMLRead->read();
$this->delInfo["item"][$this->itemnum]["date"]= $XMLRead->value;
}
break;
Case "dc:subject":
if($XMLRead->nodeType==1){
$XMLRead->read();
$this->delInfo["item"][$this->itemnum]["subject"]= $XMLRead->value;
}
break;
default:
break;
}
$XMLRead->read();
}
$this->itemnum+=1;
break;
default:
break;
}
}
}
$XMLRead->close;
$this->delInfo["count"]=$this->itemnum;
}
}
?>


4.4 Google Co-opxmlを作る
上記で読み取ったデータを配列として読み込んでそこから、Google Co-op用のxmlファイルを作る。xmlの詳細フォーマットは、こちら
ここで、注意しないといけないのが、Google Co-opの独自の書式。詳しくはこちら。一応、ここでは、"/"もしくは、"index.htm"(正規表現で近しい表現も含むようにしている)で終わる場合は、後ろに"*"をつけてそこ以下のURLを含むようにして、そうでない場合は、そのサイトのみが登録されるようにしてみた。また、ここでは、検索するサイトを追加するためのもの。



google_coop.php
SetdelTag('設定したいタグ名を入力');
$ResdelInfo->SetdelID('del.icio.usユーザーIDを入力');
$dellink=$ResdelInfo->GetdelInfo();

//Prepare Strings from Recieved data
if($dellink["message"]!="No Result"){
$XMLout ='';
$XMLout.="\n";
//read each item data and generate xml node data
foreach($dellink["item"] as $value){
//Remove "http://"
$value["link"]=substr($value["link"],7);
//if url finished with index.htm etc then remove them
$value["link"]=ereg_replace("\/(index|INDEX).*\.htm$","/",$value["link"]);
//if url finished with "/" then add * to including whole site data under this site
if(strrpos($value["link"],'/')==(strlen($value["link"])-1)){
$XMLout.=' ';
}else{
$XMLout.=' ';
}
$XMLout.="\n";
//set label that means this url is included
//for exclude use "_cse_exclude_()"
$XMLout.='

//change del.icio.us tag (space separated) to label
$label=explode(" ",$value["subject"]);
foreach($label as $tag){
$XMLout.='

$XMLout.=' ';
$XMLout.="\n";
}
$XMLout.='';
$XMLout.="\n";
//Write to Local XML file
$fpwrite = fopen("設定したファイル名を入れる。(例:google_coop.xml)", "w");
fwrite($fpwrite,$XMLout);
fclose($fpwrite);
}
?>



4.5 コマンドプロンプトで実行
上記のを"info_delicious.php"と"google_coop.php"で保存して、コマンドプロンプトを起動して、これらのファイルを保存しているディレクトリへ移動。以下のコマンドを実行する。



c:\(保存したディレクトリ)>"php.exeのあるディレクトリ\php.exe" google_coop.php


すると以下のような設定したファイル名のxmlファイルが生成される。
あとは、これを作成した検索サイトのControl panel の Advanced タブからアップロードすれば終わり。



google_coop.xml



 ・
 ・
 ・
 ・
 ・



5.できあがり
こんな感じの検索サイトに仕上がる。


6.コードは参考です
ちなみに、ここに掲載したコードは適当に改変利用していただいて構いません、というか、もっと良い方法があれば、教えてください。また、このコードの利用による何らかの不具合についての責任は負いません。


関連リンク:
Google Co-op
Rollyo
dLINKbRING.Search.ProgressiveRock
Powered BY AmazoRogi