Archive for July, 2006

ヤフオクとビッダーズAPIのマッシュアップ第一弾:遊戯王カード オークション比較

Jul 30 2006 Published by funaki under つくる

» 遊戯王カード オークション比較

Yahoo!オークションのAPI、ではなく検索結果に出てくるRSSと、ビッダーズのAPIを使って、遊戯王の全カードそれぞれが出品されているかどうかチェックできるツールです。

APIの一覧を作成する際に一番驚いたのがBiddersのAPIの存在でこれは一度いじってみないと、とつくってみました。

@IT:ネットワークコラム:API公開のずいぶん前からすでにWeb2.0でした

API自体は2006年6月13日の記事を読んで初めて知ったぐらいで先月行われたコンテストの存在も知りませんでした。。

公開されているAPIには2種類あり、1つがビッダーズのオークションを対象にしたAPI、2つ目がアフィリエイト2.0ということでビッダーズ以外にもアフィリエイトに参加している企業の商品全体を対象にしたAPI。2つあるせいで若干わかりづらい。

オークションの方は、ビッダーズWebサービス(BWS)開発キット[ビッダーズアフィリエイトプログラム]からドキュメント等をzipでダウンロード可能。ヤフオクと違い、オークションもアフィリエイトできるのでその場合は登録が必要。http://www.bidders.co.jp/dap/sv/affidに表示されるアフィリエイトIDとリンクIDを使う。

ダウンロードした中にあるPDFはパラメータに関する記述が不完全で、ビッダーズWebサービス仕様書2.0.txtも要参照。具体的にはtfについてPDFには記述がない。

APIへのリクエスト例)
http://xml.bidders.co.jp/bep/xml?keyword=%97V%8BY%89%A4&ipp=3&tf=xml_lite2

keywordはSJISをurlencodeしたものなので注意。PDFで言うロットナンバーはAPIの返り値のXMLではItemNo。
APIはリンク用のURLを返してくれないので自分で生成する必要がある。

(アフィリエイト用)http://www.bidders.co.jp/aff/{アフィリエイトID}/{リンクID}/WS/pitem_GK{ロットナンバー}
(アフィリエイトなし)http://www.bidders.co.jp/pitem/{ロットナンバー}

今回のマッシュアップには使っていないがアフィリエイト2.0のAPIはhttp://www.bidders.co.jp/a20/a2ws_dl.htmlからドキュメント等をダウンロードし、アフィリエイト用のIDはhttp://www.bidders.co.jp/dap/sv/a20_affidに記載される。

あとは今風にJavaScriptでページ内検索用のincremental searchを作ってみました。対象を遊戯王カードにしたのは、オークションによく出てくる&カードの全リストを並べても膨大過ぎなかった、といったところが主な理由。これは第一弾として別の商品群でもやってみる予定です。

No responses yet

格安サーバ・ロリポップを使い倒す

Jul 23 2006 Published by funaki under いじる

zuzara.comの各サービスはロリポップのサーバで運営されています。日頃の感謝を込めて月額263円のサービスを「ホリデープログラミング」する上でいかに使い倒しているか紹介したいと思います。

安い

ムームードメインで独自ドメインの.comを買っても初年度約5000円の投資のみ。これは、ものすごいコストパフォーマンスだと思う。

サブドメイン

バーチャルホストと思われる設定をWeb上の管理画面から行え、サブドメインが無制限に作れる。(ドキュメントに明記されていない模様だが制限はあるかもしれない)各サービスごとに絶対パスが/になってくれるので管理がちょっと楽。

PHP+MySQL

2009年6月現在はPHP5を選択できるようになった。今から使うのであれば自動的に5になる。バージョンは5.2.6。コンパイルオプションは以下。curlやopensslが使えるようになった。5から登場のPDOやjsonも使える。

'./configure'
'--prefix=/usr/local/php5'
'--sysconfdir=/usr/local/php5/etc'
'--with-config-file-path=/usr/local/php5/lib'
'--disable-debug'
'--enable-bcmath=yes'
'--enable-debug=no'
'--enable-discard-path'
'--enable-dom'
'--enable-exif'
'--enable-force-cgi-redirect'
'--enable-ftp'
'--enable-gd-native-ttf'
'--enable-magic-quotes=yes'
'--enable-mbregex'
'--enable-mbstring'
'--enable-safe-mode'
'--enable-simplexml'
'--enable-soap'
'--enable-sockets'
'--enable-sqlite-utf8'
'--enable-zend-multibyte'
'--with-curl'
'--with-bz2'
'--with-gettext=/usr/local'
'--with-iconv'
'--with-iconv-dir=/usr/local/include'
'--with-gd'
'--with-jpeg-dir=/usr/local'
'--with-png-dir=/usr/local'
'--with-freetype-dir=/usr/local'
'--with-ttf'
'--with-zlib=/usr'
'--with-zlib-dir=/usr'
'--with-ttf'
'--with-openssl'
'--with-mcrypt=/usr/local'
'--with-xsl=/usr/local'
'--with-xmlrpc'
'--with-mysql=/usr'
'--with-pcre-dir=/usr'
'--with-pear=/usr/local/php5/php'
'--with-pdo-mysql=/usr'
'--with-pdo-pgsql=/usr'
'--with-pdo-sqlite'
'--with-pgsql=/usr'
'--with-sqlite'

PHPは2006年7月現在4.3.11でコンパイルオプションは以下。gdが動くので特に困ったことはない。

'./configure'
'--enable-ftp'
'--with-mysql'
'--with-gd'
'--with-ttf'
'--with-apxs=/usr/local/apache/bin/apxs'
'--enable-track-vars'
'--enable-trans-sid'
'--enable-zend-multibyte'
'--enable-mbstring'
'--enable-mbregex'
'--enable-mbstr-enc-trans'
'--enable-memory-limit'
'--enable-sockets'
'--with-jpeg-dir=/usr'
'--with-png-dir=/usr'
'--with-freetype-dir=/usr'
'--with-zlib-dir=/usr'
'--enable-exif'
'--with-dom=/usr/local'
'--with-dom-xslt'
'--enable-xslt'
'--with-xslt-sablot'

MySQL3.23.49はphpMyAdminで管理。データベースは1つしか作れない。

*.so

PHP5での動作は未確認。特に必要ないだろう。

PHP4環境ではdlで拡張できてしまう。php-jsonADOdb辺りが便利。コンパイルは別の環境で行ってsoファイルをアップロードすれば使える。

ローカルに開発環境は必要

ロリポップはFTPしか使えないので開発環境はローカルにないと不便。FTPは昔からFFFTP。
自分は先日無料になったVirtualPC2004上のWhiteBoxLinuxでSambaを動かしてWindowsのgvimで編集している。なおVirtualPCはCentOS4などいくつかのOSがインストールできないので要注意。(動作確認したOS一覧が表になったページがあったが失念⇒コメントで教えていただきました:What Works and What Doesn’t in Microsoft Virtual PC 2004

他にもVMwareやcoLinuxも無料で使える。

追記
最近は Mac 使いなのでそのまま apache+mysql+php 環境が整う。Windows なら VMware を使うところ。

PEAR

PHPのPEARはデフォルトではあまり充実していないので自分でPEARのサイトからダウンロードして解凍、必要なファイルをアップロードする必要がある。一番使っているのがCache_Lite。
Cache_Liteのベースになるコード。

<?php
require_once 'Cache/Lite.php';

$cacheOptions = array (
    'cacheDir' => 'tmp/',
    'lifeTime' => 3600, // seconds
);

$cacheId = $url;

$objCache = new Cache_Lite($cacheOptions);

if ($cache = $objCache->get($cacheId)) {
    $buf = $cache;
} else {
    $buf = file_get_contents($url);
    $objCache->save($buf, $cacheId);
}
?>

参考:
ブラウザからPEARをインストールする

cron

cronは使えない。どうしても必要な時は別のcronが使えるサーバからping(HTTPでアクセスするだけ)して代用。

.htaccess

PHP5環境では.htaccessやini_setで設定を変えられない。ロリポップのユーザ画面から設定できる項目は以下に載っている。PHP4のときに設定できた項目のため、という雰囲気だが display_errors の設定ができないのが痛い。(2009年6月現在ロリポップに問い合わせ中 => 要望として受け入れられた模様)

php.iniの設定が古めなので必須。

php_flag register_globals Off
php_value error_reporting 2047
php_flag display_errors Off
php_flag log_errors On
php_value error_log ログへのパス

見られたくないディレクトリ用。PukiWiki参照。

Order allow,deny
Deny from all

mod_rewriteも動く。2.0っぽいきれいなURLを実現。Zend_Framework参照。

RewriteEngine on
RewriteRule !\.(html|txt|js|ico|gif|jpg|png|css)$ index.php

404ページはロリポのページなので設定しておいた方が無難。

ErrorDocument 404 /notfound.php
ErrorDocument 403 /notfound.php

MySQLのコネクション数の制限が厳しい

共有サーバだけあって若干重い。MySQLのToo many connectionsエラーが比較的目に付く。PEARのCache_Liteなどでキャッシュする必要がある。

静的なページなら1日2万PVぐらいは平気。ただ、PVが増えるとHDDの容量が(おそらくはapacheのログで)すぐいっぱいになってしまうので月額+105円で500MBまで増やす必要が出てくるかも。
ちなみに容量を一度増やすと減らせないので(月額料金はずっと増えたまま)要注意。
追記
2009年6月29日から月額は同じで容量が1GBに増える。また、契約更新時に増量プランから元に戻せるそうだ。

アクセス解析は別サービスの方がよさげ

管理画面からanalogの解析結果を見れるが、GoogleAnalyticsの方が断然いい。一応、apacheの生ログもホスト名ごと、日別にダウンロードできる。リアルタイムではなく、半日ほどずれて昨日のログがダウンロードできる、という具合。

というわけでおすすめです、ロリポップ

16 responses so far

PwFeedReader/0.1 (http://www. [coming soon] .jp/)

Jul 20 2006 Published by funaki under 感動する

219.210.68.25 – - [20/Jul/2006:01:35:41 +0900] “GET /feed/ HTTP/1.1″ 200 34778 “-”
“PwFeedReader/0.1 (http://www. [coming soon] .jp/)”

き、気になる。。このIP、アクセスするとリダイレクト先がYahoo!JAPANでnslookupするとSoftbank系みたいだし。「PwFeedReader」は検索エンジンでは引っかからないし。coming soonとか言いながら1週間以上前からアクセスあるし。

4 responses so far

日本で公開されているAPI一覧(下書き)

Jul 20 2006 Published by funaki under いじる

追記:清書としてusing API;でAPIに関するブログをはじめました。

ProgrammableWeb: Web 2.0 Mashup Matrix」には海外のAPIがずらりと並んでいますが、日本語圏のAPIの最新のリストは見当たらなかったので集めてみました。

ひとまずリンクを並べただけですが。
RSSも検索結果のようにパラメーターによって内容が変化するものはAPIとして入れていいかなぁ、と思ってます。いわゆる野良API。
まだまだありそうです。

20日追記:
いくつか追加しました。なお並び順に意味はなく僕が登録した順です。
21日追記:
さらに2つ追加。提供元が同じものは並べ替えました。
25日追記:
2つ追加。
8月9日追記:
1つ追加。
8月16日追記:
5つ追加。

29 responses so far

じゃらんAPIを使って気まま宿探し:Mash up Awardに応募した

Jul 13 2006 Published by funaki under つくる

» 気まま宿探し

リクルートのAPIを使ってのコンテスト、Sun×RECRUIT Mash up Awardに「気まま宿探し」を応募してみました。じゃらんnetのサイトにはないようなマニアックなキーワードで宿を分けてみました。目的地が決まってないと、じゃらんは案外使いにくいのかなぁ、と思ったので気まま宿探しでは「岩盤浴」とか「カップルで温泉」のようなやりたいこと別の分け方をしています。

当初はGoogleMaps使ったら負けかなと思っていたのですが、結局使ってオーソドックスなものになりました。全体としてもコードよりキャッチコピー考えている時間の方が長かった気がします。

もっと面白いカテゴリがあるよ、という方はコメントくださいー。追加します。

ところで応募方法はメールを送るだけなのですが、1日経っても受領の返事がないのでちょっと心配。先着30名のDukeマウス狙いです。

7月18日追記:

タイトルロゴのフォントはモトヤバーチのフリーフォントです。ステキなフォントをありがとうございます。
» 会員登録&ダウンロードはこちらから

10月5日追記:
忘れた頃にDukeマウスが届いた

One response so far

トリビアの種:決戦は○曜日に最も行われている

Jul 07 2006 Published by funaki under いじる

ドリカムは92年にリリースしたシングルで「決戦は金曜日」と歌っているが実際のところ、決戦は何曜日に最も多く行われているか、調べてみた。

2006年1月1日から7月2日までの各週ごとに行われた決戦の数を曜日ごとに折れ線グラフにしている。
調査にはYahoo!ブログ検索を利用した。

やはり全体として元祖決戦の曜日である金曜日が多く、予想通り決戦は金曜日に最も多く行われていることがわかった。続いて多いのが日曜日であるが、この原因は定かではない。家族サービスデーとして戦っているお父さんが多いのだろうか。

補足として、3月には日本代表が優勝を飾ったWBCが、6月12日(月)、18日(日)、23日未明(金)にはW杯の日本代表の試合が行われている。
上記の美しいグラフはPHP/SWF Chartsを利用させていただいた。

…あー、また勢いでつまらないものをつくってしまった……。

さらに補足。
ドリカムの決戦の意味はバレンタインだと教えてもらいました。知らなかった。告白すると決めた日!だろうと勝手に解釈してました(^^;
92年の2月14日が金曜日だったからだそうで。今年は火曜でしたが、97年、2003年が金曜日でした。次にバレンタインが金曜日になるのは2014年です。2014は2と14が入っていて何となくいい感じ。

2 responses so far

MeCab PHP extension moduleを使ってみた

Jul 05 2006 Published by funaki under いじる

3年ぐらい前に欲しいなーと思っていたMeCabのPHPモジュールが最近リリースされたようです。DBから取り出したレコードごとに形態素解析したいときなどはPHPから呼び出せると便利。

» Page2 MeCab extension

手元のマシンはmecabが0.90だったのですがconfigure時にmecab_new2のところでエラー。

configure: error: wrong MeCab library version or lib not found.

[mecab-users 86] Re: C ライブラリで “Undefined symbol” となる関数がある

既知の問題だったので最新の0.91をコンパイルし直したらインストールできました。
サンプルのコードはソースの中にもありますがよりシンプルな例を以下に。

<?php
dl('mecab.so');
$mecab = mecab_new();
$str = '私の名前は船木です。';
echo mecab_sparse_tostr($mecab, $str);
mecab_destroy($mecab);

原形を取り出す。MeCabの出力時のフォーマットをちゃんと与えればこんなパースは不要かもしれませんが手っ取り早くやりたいときに。

<?php
dl('mecab.so');
$mecab = mecab_new();
$str = $argv[1];
$buf =  mecab_sparse_tostr($mecab, $str);
$res = array();
$tmp = explode("\n", $buf);
if (is_array($tmp)) {
    foreach ($tmp as $val) {
        $data = explode(',', $val);
        if (isset($data[6])) {
            $res[] = $data[6];
        }
    }
}
mecab_destroy($mecab);

print_r($res);

なお、配布元のサイトは今回初めてアクセスしたのですがPHPのExtensionがたくさんあって充実した趣き。HyperEstraierのも試してみたいところです。

One response so far

Don’t play with… : かっこいい?壁紙

Jul 03 2006 Published by funaki under 感動する

パソコンの壁紙紹介。

[Customize.org] Accessories > Wallpaper > Don’t play with…

テーマは真面目だけれど、失笑を買う感じの人形がおもしろい。

[Customize.org] Accessories > Wallpaper > siesta on the washday

こっちの洗濯機に入ったクマのぬいぐるみはかなりかわいい。

No responses yet