ブックマークを自動で追加するスクリプト

暑かったり、寒かったりのこの頃にちょっと嫌気がさすこの頃です。


さて、先日画像の自動収集が可能そうと書いたら、スクリプト書けよ
というご意見を頂いていたので、、
まずブックマークで実装してみました。はてな検索の結果からそのURLが
特定数以上ブックマークされていたら、自分のブックマークにも
追加するというものです。


あとは、cronか何かで自動で動かしておいて、
自分のはてなブックマークRSSをリーダーに登録しておけば、
はてな検索に新しく人気のページがヒットするようになったら、
簡単にわかるかと。
web2.4ぐらいになると自分のRSSを登録しておくだけで
すべてが事足りるようになると思います(嘘です.ごめんなさい.


テストスクリプトはこんな感じです。
なんか毎回、factoryメソッドでつくるのが面倒になってきたので、
なんとかしたいなと思いました。
(テストスクリプトを実行して、発生したいかなる被害も責任を負えません。
ごめんなさい。)

<?php
require_once 'Services/Hatena.php';

$hatena_s = Services_Hatena::factory('Search');
$result_s = $hatena_s->execute('Google'); //! 検索したいワード.utf8

$user = 'xxx'; //! 自分のアカウント
$pass = 'xxx';

$hatena_b = Services_Hatena::factory('Bookmark');
$hatena_b->hatena_login($user, $pass);

$hatena_n = Services_Hatena::factory('Bookmarknum');

foreach ( $result_s as $entry ) {
    $title = $entry['title'];
    $url   = $entry['link'];
    $num   = $hatena_n->execute($url);
    if ( $num >= 3 ) { //! 3人以上ブックマークしているURLのみ登録
        $hatena_b->add_bookmark($url, 'auto');
    }
}
?>

次は、ethnaZend FrameworkあたりのPHPフレームワークに組み込んでみたいなと思いました。

Services_Hatenaはこちらからどうぞ。

Services_Yahoo_Ja オークション対応

雲ひとつない快晴が待ち遠しいこの頃です。


さて、Services_Hatena のかたわらで作成をはじめた、
Services_Yahoo_Ja パッケージですが、Yahoo!JAPAN デベロッパーで
最近公開されたYahoo! オークション用のWebサービスAPI
利用できるように修正いたしました。
オークションカテゴリ情報や、特定カテゴリの出品物リストなどの
取得が容易にできるようになりました。
Yahoo!JAPAN は先日、社長さんが全サービスでAPIを公開すると
おっしゃっていましたが、実際にどんどん増えてきているようですね。


デモページ : http://hetena.com/y/demo/demo_auction.php


バージョンを0.0.2にあげました。インストールは以下のようにお願いいたします。

pear install http://hetena.com/y/pkg/Services_Yahoo_Ja-0.0.2.tgz

出品リストを得るテストスクリプトは以下のようになります.

<?php 
require_once 'Services/Yahoo/Ja/Auction.php';

$yahoo = Services_Yahoo_Ja_Auction::factory('goods'); 
$yahoo->setAppID('peartest'); // please, use your AppID.
$yahoo->setCategory(2084032471); 

$result = $yahoo->getGoodsList(); 
foreach ( $result as $entry ) {
   $title = $entry['title'];
   $url   = $entry['url'];

   print($title . " ($url)" . "\n");
}
?>

出品タイトルと実際のページURLが得られるはずです。
直したいところもまだ多く含んでいますが、、とりあえず公開です。
よろしければお試しください。

Services_Hatena x Services_Yahoo_Ja はてな検索

夜は思ったより寒いなと思ったこの頃です。


さて、かなり前に公開したServices_Hatenaですが、利用例などをどんどん示して
いければなと思っております。
表題にありますように、自作の'Services_Yahoo_Ja'と掛け合わせることで、
はてなの検索の真似が容易にできるかと。
はてなでは検索されたページがはてなでどれくらいブックマーク化されているか、
最後にでています。
今回はこれを実現するための入り口となる簡単なコードを示します。


(両パッケージのダウンロードなどはHetena.com - Ready For Developmentをご参照ください。)


コード. Services_Yahoo_JaはPHP5専用です。(ごめんなさい

<?php 
require_once 'Services/Hatena.php';
require_once 'Services/Yahoo/Ja/Search.php';

$hatena = Services_Hatena::factory('Bookmarknum');

$yahoo  = Services_Yahoo_Ja_Search::factory('web'); 
$yahoo->setAppID('peartest'); //! please, use your AppID.
$yahoo->setQuery(PHP);        //! utf8 

$result = $yahoo->submit();

foreach ($result as $entry) { 
    $title = $entry['Title']; 
    $url   = $entry['Url'];
    $num   = $hatena->execute($url); //! get number of bookmark

    print($title . ' ('  . $num . ")\n");
}
?>


すると以下のような結果を得ることができます。
あとは、'70 users'のようにして、赤くして、、と加工してやれば、近づけるでしょうか。

PHP研究所 PHP INTERFACE (8)
日本PHPユーザ会 (70)
レッツPHP! (109)
PHP: Hypertext Preprocessor (29)
PHP: PHP マニュアル - Manual (115)

これをちょっとひねってやると画像検索結果から、はてなフォトへ追加すると
いうことができそうな。画像の自動収集になりますかね。
(運用には気をつける必要がありそうですが。)

Services_Hatena リリースしました

そろそろ上着を脱ごうかというこの頃です。


さて、かなり前に公開したServices_Hatena パッケージですが
本日PEARにて正式リリースが無事できました。
パッケージ情報はこちらになります。
http://pear.php.net/package/Services_Hatena/


正式リリースされたため、以下のようなコマンドでインストール可能となります!

pear install Services_Hatena-alpha


コードを書き始めて、約一ヶ月ですが、こうして無事リリースできまして、
なかなか感慨深いものがあります。
ぜひ、皆さんも登録してみていくださいませ。


また、このパッケージの使い方などの紹介用として、以下のWebページを用意致しましたので、
よろしければご覧ください。
http://hetena.com/


さて、実はリリースに際して少し手間取ったところがありますので、メモしておきます。
アカウント申請によって、アップロードする権限はもらっていたのですが、
実際にはパッケージをアップロードすることができませんでした。
"New Package"というメニューから、先にパッケージ情報を登録する必要があるとか。
Package Name,License,Category,SummaryやCVSのURLを入力して、
submitを行います。しばらくすると受付けましたというメールがきますので、
これで晴れてアップロードできるようです。
アップロードは"Upload Release"というメニューからtgzファイルを指定してsubmit
するだけでできます。


ちょうど、これを書いている今、PEAR申請中にコメントを頂いていた方から、
Congrats!(おめでとう!)のメールを頂きました。感じの良いコミュニティは素敵ですね^^

Services_Yahoo_Ja パッケージもつくってみました

別のものをつくる時間があれば早くアップしろという話ですが、、
ヤフーの公開しているWebサービスAPIを利用するパッケージも作ってみました。
(ヤフーの公開APIについて http://developer.yahoo.co.jp/)
今度はJPRC (Japan PHP Repository Channel) の動きがあればこれに登録してみたいところです。


これはすでにPEARに米ヤフーのAPIを利用するServices_Yahooパッケージ
があるので、これを一部継承する形でつくってみました。
検索では、APIのURLを新たにセットし直しているだけです。
(実は、米ヤフーのAPIでも言語を指定すれば日本語検索できるのですが)


最近ヤフーが公開した、カテゴリWebサービスも対応させてみました。
(一部対応しきれていませんが。。)
以下にインストールとテストスクリプトを示しておきます。
例によっていかなる被害も責任を負えませんが、ぜひお試しくださいませ。

pear install Services_Yahoo-alpha
pear install http://hetena.com/y/pkg/Services_Yahoo_Ja-0.0.1.tgz

テストスクリプト

<?php
require_once 'Services/Yahoo/Exception.php';
require_once 'Services/Yahoo/Ja/Category.php';
$yahoo = Services_Yahoo_Ja_Category::factory('dir');
$yahoo->setAppID('peartest'); // please, use your AppID.
$yahoo->setId(2075289519); // Category ID
try {
    $result = $yahoo->submit();
    $space = $result['Space'];
    printf("このカテゴリのタイトル : %s (%s)\n", $space['Title'], $space['Id']);
    $category = $result['Category'];
    foreach ($category as $entry) {
        printf("子カテゴリのタイトル : %s (%s)\n", $entry['Title'], $entry['Id']);
    }
    $site = $result['Sites'];
    foreach ($site as $entry) {
        printf("登録サイトのタイトル : %s (%s)\n", $entry['Title'], $entry['Url']);
    }
} catch (Services_Yahoo_Exception $e){
    print($e);
}
?>

結果はこのような感じで、カテゴリ名やカテゴリIDを取得できます。

このカテゴリのタイトル : アウトドア (2075289519)
子カテゴリのタイトル : 海水浴場 (2076303950)
子カテゴリのタイトル : 環境と自然 (2075722160)
子カテゴリのタイトル : キャンプ (2075289522)
.. 略 ..

これを利用して、デモページとしてこんなページを用意してみました。
http://hetena.com/y/demo/demo_category.php


まだまだつくりかけといった感じですが、これから充実させていきたいと思います。

CVSへコミットいたしました

久しぶりの雨もいいものと感じたこの頃です。


さて、少し前に公開したServices_Hatenaパッケージですが、
昨日、PHPCVSへコミット致しました。
実は、権限を管理している方々から何をしているの?というメールを
頂いてしまいました。。(すいません。
あわててコミットいたしました。コミット先はこちらになります。
http://cvs.php.net/viewcvs.cgi/pear/Services_Hatena/

docディレクトリからdocsディレクトリへ変更するようアドバイス
頂いたので変更しております。
あとはいよいよ正式アップロードを残すのみとなりました!

公開に向けて 指摘事項を修正

微妙に寒いという言葉がよく似合うこの頃です。


さて、少し前に公開したServices_Hatena PEARパッケージですが、
投票プロセスにて、いくつか指摘事項を頂いていたので、
これを修正しております。
大体完了しており、あとはひたすらテストして今月中には
正式にアップロードしたいところです。


修正点は、html_entitiy_decode関数の使用や空のelse文の削除、
関数名の変更などです。
またPHP4でも使えるように変更しました。
(publicなど修飾子の削除とオブジェクトの呼び方の修正で対応)

ぜひお試しください。バージョンを0.1.0にあげました。

pear install http://hetena.com/pkg/Services_Hatena-0.1.0.tgz

※オブジェクト作成のための関数名も変更されておりますので、
今までのテストスクリプトはエラーとなります。(すみません)
あらためて、テストスクリプトを記述しておきます。

<?php
require_once 'Services/Hatena.php';

// $type  = 'Search';
$type  = 'Autolink';
// $type  = 'Bookmarknum';
// $type  = 'Asin';
// $type  = 'Similar';
// $type  = 'Exist';

$datum = array( 'Search'      => 'PHP',
                'Autolink'    => 'I like PHP.',
                'Bookmarknum' => 'http://www.yahoo.co.jp/',
                'Asin'        => '4774124966',
                'Similar'     => 'PHP',
                'Exist'       => 'http://www.yahoo.co.jp',
              );
$data  = $datum[$type];
$hatena = Services_Hatena::factory($type);

if (PEAR::isError($hatena)) {
    print('i have an Error : ' . $hatena->getMessage());
    exit();
}

$result = $hatena->execute($data);
var_dump($result);
?>

Todo

  • テスト、テスト、テスト