2006年8月アーカイブ

AsociateHelperのバージョンアップに備えて、Amazonの商品情報をJSONPで呼び出す方法をメモっておきます。

JSONPって何よ?って方は以下を参照。

hail2u.net - Weblog - JSONP
http://hail2u.net/blog/coding/jsonp.html

JSONをJavascriptでより扱いやすくするものっぽいです。


JSONPサンプル
http://amazie.jp/la/json.php?mode=Books&keyword=harry&callback=loaded

※これは、サンプルで公開サービスではないです。予告なく停止することがあります。


これを使ったAmazon検索
http://amazie.jp/la/jsonp/new.htm


コードのせいなのか、うちのサーバーが重いのか、今ひとつレスポンスがよくない感じ。


PHPを使うことで、いくつかメリットがあります。

・Amazon Web Service の REST+XSL のトラブルを回避できる。

REST+XSLはトラブルが生じると素のXMLを返すことがあります。最近も、ありましたね。
amazieはこの方法を使ってるので、動かなくなったり。そういうリスクを回避できます。

・Services_Amazonにキャッシュする機能があるので、1秒間1コールの制限にひっかからずに済む。

キャッシュされたものは素早く表示でされます。


ひとつ問題は、JSONはクロスドメイン可で、誰でも利用できてしまうので、サーバーのリソースが心配なことです。
こういうのリファラで制限するべきなんでしょうか?リファラを送らないUAの場合どうすれば?教えて偉い人。


以下、ライブラリのインストール方法とPHPのサンプルコード


PHPからAWSを扱うライブラリのインストール。

PEAR :: Package :: Services_Amazon
http://pear.php.net/package/Services_Amazon
wget http://pear.php.net/get/Services_Amazon-0.6.0.tgz
pear install Services_Amazon-0.6.0.tgz


以下のページを元に、PHP-JSONをインストール

Do You PHP? - PHPでJSON

http://www.doyouphp.jp/sample/sample_xml_json.shtml
wget http://www.aurore.net/projects/php-json/php-json-ext-1.2.1.tar.bz2
tar jxf php-json-ext-1.2.1.tar.bz2 -C /usr/local/src/
cd /usr/local/src/php-json-ext-1.2.1/
./configure
make
make install

php.iniに
extension=json.so


コードがあってるかわかりませんがサンプルコード。
require_once 'PEAR.php';
require_once 'Services/AmazonECS4.php';
require_once 'Cache.php';

$amazon = new Services_AmazonECS4('DEVELOPER_ID', 'ASSOCIATE_ID');
$amazon->setLocale('JP');
$amazon->setCache('file', array('cache_dir' => 'cache/'));
$amazon->setCacheExpire(3600);

$options = array();
$options['Keywords'] = htmlspecialchars($_GET['keyword']);
$options['ResponseGroup'] = 'Large,EditorialReview';
$result = $amazon->ItemSearch(htmlspecialchars($_GET['mode']), $options);

$callback = ($_GET['callback'])?htmlspecialchars($_GET['callback']):'loaded';

$data = array();
if($result[TotalResults] == '1'){
$data = array(array(
Title => $result[Item][ItemAttributes][Title],
Artist => $result[Item][ItemAttributes][Creator][1],
ASIN => $result[Item][ASIN],
));

} else {

for($i=0;$i
array_push( $data,
array(
Title => $result[Item][$i][ItemAttributes][Title],
Artist => $result[Item][$i][ItemAttributes][Creator][0][_content],
ASIN => $result[Item][$i][ASIN],
)
);
}

}

header('Content-Type: application/x-javascript');

if (PEAR::isError($result)) {
echo 'loaded({error:\"".$result->message."\"});';
} else {
$output = json_encode($data);
echo $callback.'('.$output.');';
}


ホントのところはPHP-JSONがうまく動作しなくて最後ら辺はこうなってます。

if (PEAR::isError($result)) {
echo 'loaded({error:\"".$result->message."\"});';
} else {
//echo $amazon->getProcessingTime() . 'sec';
//var_dump($result);
if (!extension_loaded('json')) {
if (!dl('json.so')) {
exit;
}else{
//$output = json_encode($result);
$output = json_encode($data);
echo $callback.'('.$output.');';
//echo $output;
}
}
}

これでサーバーサイドはとりあえず。

なんだかファイルの日付を見たら去年の11月にサーバー部分はだいたいここまで作ってたようです。
まとまった時間が取れないとか言ってるうちに半年以上過ぎてしまったとは・・・orz
アウトプットしながら頑張ります。

またしても、Amazon側の商品URLに変更が加えられたため、AsociateHelperをバージョンアップしました。

AsociateHelper
ダウンロード
http://a-h.parfe.jp/intro.html#down

ユーザーの方にご報告いただいて素早く対応することができました。
ありがとうございます。

今回の変更は

Amazonで検索径由でたどりついた場合は
http://www.amazon.co.jp/商品名?/dp/asin番号/

トップセラーのページ(~top100)からだと
http://www.amazon.co.jp/商品名?/dp/list/asin番号/

トップ画面の最近チェックした商品は従来のURL
http://www.amazon.co.jp/gp/product/asin番号/
というものです。
この商品名をURLに入れるというのは、SEO対策なんでしょうか?
たしかにGoogleなどは、URLに含まれる文字も加算してるっぽいですが。
英語の商品ならともかく、日本語の商品は、まったく意味がないような・・・。


話が変わりますが、AsociateHelperは、今後、どうするか悩んでます。
IE7から、セキュリティが強化され現在の方式では動作しなくなるため。(Bookmarklet版は動作可能)

思い切って完全に作り直すか?
あるいは、現状のままで、Bookmarklet版と同じようにWEB上のファイルを呼び出すか?

たまに思い出したように、作りかけのWEBバージョンを触るのですが、作りきれてません・・・。
もはやいらない機能もあるし、まったく新しく作るのがよいとは思うのですが、何も新しいことがないのも・・・。
うーん、ヘタレですね。IE7のリリースまでには作り直しを完了したいところ。

と書いて追い込んでみるテスト。

fladdict.net blog: はてぶがドンドン馬鹿になっていく

はてなブックマークが物凄い勢いで衆愚化していっている。

別にGigazineが悪いわけではまったくないけれど、Gigazineのエントリーが頻出するようになったあたりから、どんどんエントリーの質が下がってきている。もう最近あまりホッテントリも読まなくなった。


から端を発して、どうすればよいか、各所でいろんな方法が考案されてます。

はてなブックマークの内容の変化は、たしかに最近、感じてました。
で、どんなのがいいのか考えてみたけど、思いつかず。
そんな時に見つけたのがこのユーザースクリプト。

d.y.d. 22:15 06/08/20 コメント率
自分にとって興味がある記事は大抵「コメント付きブクマ率が高い」ので、<中略>パーセントが高い記事を優先的に読む。
記事のコメント率を表示してくれるユーザースクリプト

なるほど、その手があったか!と目から鱗。
そのままではFirefoxで動かなかったので、動くように修正。
コメント率を直感的に把握できるように、文字だけでなくて、しなもんアイコンで表示するようにしてみた。



使ってみると、被ブクマ数が少なく、コメント率が高いもの(例 2 users / 100%)が目立ってしまう。
そこで、しなもんアイコンの表示数は少し計算方法を変えて、被ブクマ数が多く、かつコメント率が高いものほど多く表示されるようにしてみた。

これが最適解ではないと思うが、わりと求めてるものに近くなった。

2006/11/24 追記:
はてなブックマークのHTMLの変更で動作しなくなっていたのを修正。
はてなブックマークエントリー情報取得APIを使うように変更。表示も速くなってます。


<ご利用の際の注意>
最初にページ内の全リンクをスキャンするので、リンクが半端じゃなく多いページ、例えば”人気エントリー”に行くとブラウザがとてつもなく重くなるので注意。”最近の人気エントリー”は大丈夫です。

本家でも書かれてますが、コメント率を出すために1個表示するたびに1回はてなにアクセスしてるので、負荷が凄かったらごめんなさい。


当初はややこしい計算方法を考えてたけれど、試行錯誤してるうちにだいぶシンプルなものに。
頭で考えるより、手を動かして試してみるほうが早く答えが見つかる気がする。

興味のある人は、自分でお好みのアルゴリズムを探してみてください。

追記:
試したところOperaでも動きました。 お気に入りページや個人ブクマ トップでも動いたっす。
”人気エントリー”もOperaならOK。
Operaでのインストール方法は↓以下。

Opera用user.js置き場 - info - use

Wii

PS3も発売日が決まり、Wiiもそろそろかと思ってたところ、こんなニュース。

Wiiの「Opera」はFlash ROMに保存、バージョン9がベース - Nintendo iNSIDE
http://www.nintendo-inside.jp/news/189/18933.html

販売方法には「個別のディスクで販売することにはならない」

販売方法?Operaは標準搭載じゃなかったのか?
Wiiの概要を見ると

オペラブラウザ(オプション)

とある。標準搭載にして欲しいなぁ・・・。


元になったインタビューは以下。

Exclusive Interview: Opera Talk Wii
http://www.nintendolife.com/articles/2006/08/17/exclusive_interview_opera_talk_wii

What version of Opera is the browser based on? 8.5 or 9.0 ?
Opera 9

This version does include Javascript. Whether plug-ins such as Flash will be supported in Opera on Wii has not yet been announced. Stay tuned!

Flashの搭載はまだ未定のようです。
YouTubeは見れるのかどうか。


これでまた、XMLHttpRequestが殺されてたりしたら泣く。
あと、コピー&ペーストさせてくれ。

1チップMSX発売

| コメント(0) | トラックバック(0)

たまには、与太話を。

MSXは最初に買ったパーソナルコンピューター(turboRからですが)です。
そのころはプログラムはほとんどわからずに、雑誌に載ってるコードをひたすら打ち込んでいた思い出が。
バボさんのおはコンに衝撃を受け、ひでー話に感動し、松下撤退に涙した日々。
マイナーなものに惹かれるのも、この辺からの気がします。

そんなノスタルジーを久々に思い起こさせてくれたのがコレ。
1チップMSX(仮称)
1チップMSX(仮称) / 予約販売ホームページ
http://www.msx.d4e.co.jp/

ついに。うーん、買うかどうか悩む。
もってるのほとんど、ディスクだしなぁ。
せめてUSBFDD(2DD対応の)がつけられれば・・・。
久しぶりに部屋の押入れにしまいこまれたMSXを引っ張り出したくなった。

ところで、

FPGAでPC-8001を作る計画
http://www.geocities.jp/kwhr0/hard/pc8001.html

1チップMSXはプログラム可能なチップで実現されているので、こういうことする人が出てくる希ガス。
エミュレーターでいいじゃんと言えばそうなんだけど。


ついでに

3DゲームファンのためのPS3の"真意"講座
~PS3は"ゲーム機"ではなくコンピュータとして訴求されるべきである
http://www.watch.impress.co.jp/game/docs/20060511/ps3.htm

「PS3はゲーム機を超えた汎用コンピュータである」

=「PS3はMSXの夢を引き継ぐものである(違」

最速インターフェース研究会 :: 萌ディタで保存と同時にSafariをリロードするデモ
http://la.ma.la/blog/diary_200607291943.htm

ものぐさなので「プロキシたてるのとか、面倒だなぁ。でも便利そうだなぁ。」
と指をくわえていたのですが、

hail2u.net - Weblog - CSSファイルを保存すると同時にブラウザをリロード
http://hail2u.net/blog/webdesign/save-css-file-and-reload-browser.html

これ読んだら、似たようなものなら、もう少し簡単にできそうな予感。
でくすもんの開発途中から萌ディタ使いになってみたので
srcfile.javascript.txtに以下のコードを追加。


function sleep(wait) {
var then,now;
then=new Date().getTime();
now=then;
while((now-then)<wait) {now=new Date().getTime();}
}

f.onSave = function(){
var Shell = new ActiveXObject("WScript.Shell");
Shell.AppActivate("Mozilla Firefox (Build 2006070816)");
sleep(100);
Shell.SendKeys("{F5}");
sleep(100);
Shell.AppActivate("萌ディタ 0.6.1.54");
};

ブラウザの名前はご利用の環境に合わせて。たぶんFirefox以外もいけるかと。
WSHでウェイトをかけるのがうまくいかなかったので適当なウェイト関数で。

だいぶ以前に紹介したCFUと組み合わせると、リアルタイム編集しつつ、アップロードできます。

追記:あとで試したところIEとOperaでもいけた。

Shell.AppActivate("Microsoft Internet Explorer");
Shell.AppActivate("- Opera");

このアーカイブについて

このページには、2006年8月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2006年7月です。

次のアーカイブは2006年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ