2003年08月12日(火) << 前の日記 | 次の日記 >>
これまでの08月12日 編集

■1 続・Web日記的読書録[http://www.nantoka.com/~kei/diary/?200308b&to=200308111#T200308111][hns]次の記事 >> このエントリーをはてなブックマークに追加

ちょっと調べてみました。
  • Amazon Web Service (AWS)というのがあり、これを使って書籍の情報が取得できる。
  • AWSのSDKが公開されている。サンプルソースもある。
  • XML over HTTP で実現されている。
  • SOAPとか勉強すると良いらしい。
で、 ほそかわさんとこ[http://fromto.cc/hosokawa/diary/2003/20030727-home2/index.html] のページを参考にしつつ、ISBNコードで書誌情報を取得するライブラリをごそごそ実装。

実験:

HNSAWS.pm:

こんな感じ。まだcvsタグも付いていない。
MY_AMAZON_TAGやら、MY_AMAZON_DEVTOKENは、適宜置き換えること。 ウチでは、
--- webif.cgi.orig      Tue Aug 12 21:43:23 2003
+++ webif.cgi   Tue Aug 12 21:48:58 2003
@@ -29,6 +29,7 @@

 use HNS::Admini;
 use HNS::System;
+use HNSAWS;

 require 'jcode.pl';
 require './config.ph';
@@ -262,6 +263,7 @@
     }

     chomp($text);
+    $text = HNSAWS::replace($text);

     my $body;
     if ($Mode == 0) {
みたいな感じで、textを置き換えて使っています。
#==============================================================================
#	HNSAWS.pm	hns の webif で Amazon Web Service の情報を挿入
#		$Id: d20030812.hnf,v 1.1 2009/09/23 12:57:31 kei Exp $
#==============================================================================
package	HNSAWS;

use SOAP::Lite;
use strict;
use Jcode;
use LWP::Simple;

#------------------------------------------------------------------------------
#	取得したアカウントに応じて書き換える
#------------------------------------------------------------------------------
# アソシエイツID
my $MY_AMAZON_TAG		=	'keisdiary-22';

# デベロッパートークン
my $MY_AMAZON_DEVTOKEN	=	'DDHPHE04VROHE';

# cover image 格納ディレクトリ(ファイルシステム)
my $COVERIMG_DIR	=	'../coverimg';

# cover image 格納ディレクトリ(Web上)
my $COVERIMG_URI	=	'/~kei/coverimg';

# AmazonへのリンクURL
my $AMAZON_LINK	=	'http://www.amazon.co.jp/exec/obidos/redirect?tag=keisdiary-22';

# アソシエイト・プログラムへのリンクURL
my $ASOC_LINK	=	'http://www.amazon.co.jp/exec/obidos/subst/associates/join/associates.html/ref=cs_gw_bn_as_1_1/250-2208213-6925017';


#------------------------------------------------------------------------------
#	お好みで書き換える
#------------------------------------------------------------------------------
# WSDL
my $WSDL	=	'http://soap.amazon.com/schemas3/AmazonWebServices.wsdl';

# カテゴリ対応
my %CATEGORIES	=	(
	'books-jp' => '本',
	'music-jp' => '音楽',
	'classical-jp' => 'クラシック',
	'vhs-jp' => 'ビデオ',
	'dvd-jp' => 'DVD',
	'software-jp' => 'ソフト',
	'videogames-jp' => 'ゲーム'
);


#------------------------------------------------------------------------------
#	渡された入力テキストを書き換える
#------------------------------------------------------------------------------
sub	replace($) {
	my ($text) = @_;

	$text =~ s/^AWS ([0-9A-Za-z\-]+)\s+([0-9A-Za-z\-]+)\s+$/makeText($1, $2)/emg;
	return $text;
}


#------------------------------------------------------------------------------
#	ASINから置き換えテキストを生成
#------------------------------------------------------------------------------
sub	makeText($$) {
	my ($category, $asin) = @_;
	my ($sasin, $text);

	$sasin = $asin;
	$sasin =~ s/[^0-9A-Z]//g;
	my $res = amazonSoapQuery($sasin, $category);
	if (! $res) {
		return "! AWS $category $asin";
	}

	if (($res) && ($res->{Details})) {
		my ($d, $limg, $mimg);

		$d = $res->{Details}[0];

		$text = "! AWS $category $asin\n" . 
			"DIV aws\n";

		# カバー画像
		$mimg = fetchCoverImage($sasin, $d->{ImageUrlMedium}, 0);
		if ($mimg) {
			$limg = fetchCoverImage($sasin, $d->{ImageUrlLarge}, 1);
		}
		if ($limg) {
			$text .= "LIMG $COVERIMG_URI/$limg r $COVERIMG_URI/$mimg 表紙画像\n";
		}
		elsif ($mimg) {
			$text .= "IMG r $COVERIMG_URI/$mimg 表紙画像\n";
		}

		$text .= "LINK " . $d->{Url} . " " . jcode($d->{ProductName}, 'utf8')->euc . "\n";
		$text .= "~\n~\n";
		$text .= "著者:";
			my $cnt = 0;
			foreach my $author (@{$d->{Authors}}) {
				if ($cnt) {
					$text .= ', ';
				}
				$text .= jcode($author, 'utf8')->euc;
				$cnt++;
			}
			$text .= "~\n";
			$text .= "出版社:" . jcode($d->{Manufacturer}, 'utf8')->euc . "~\n";
			$text .= "定価:" . jcode($d->{ListPrice}, 'utf8')->euc . "~\n";
			$text .= "ASINコード:" . jcode($d->{Asin}, 'utf8')->euc . "~\n";
			$text .= "~\n";
			$text .= "※上記のリンクは\n" .
				"LINK $AMAZON_LINK Amazon.co.jp\n" .
				"LINK $ASOC_LINK アソシエイト・プログラム\n" .
				"を利用しています。\n";
			$text .= "/DIV\n! AWS-END\n";
		return $text;
	}
	return "! AWS $category $asin";
}


#------------------------------------------------------------------------------
#	クエリー発行
#------------------------------------------------------------------------------
sub amazonSoapQuery($$) {
	my ($asin, $category) = @_;
	my $res;

	eval {
		my $s = SOAP::Lite->service($WSDL);
		$res = $s -> AsinSearchRequest(
			SOAP::Data->name('AsinSearchRequest')
				->type('AsinRequest')
				->value(\SOAP::Data->value(
					SOAP::Data->name('asin'		=> $asin),
					SOAP::Data->name('page'		=> 1),
					SOAP::Data->name('mode'		=> $category),
					SOAP::Data->name('tag'		=> $MY_AMAZON_TAG),
					SOAP::Data->name('type'		=> 'lite'),
					SOAP::Data->name('devtag'	=> $MY_AMAZON_DEVTOKEN),
					SOAP::Data->name('locale'	=> 'jp'),
					SOAP::Data->name('format'	=> 'xml'),
					SOAP::Data->name('version'	=> '1.0'),
				)
			)
		);
	};
	return $res;
}


#------------------------------------------------------------------------------
#	カバー画像の取得と格納
#------------------------------------------------------------------------------
sub fetchCoverImage($$$) {

	my ($asin, $url, $is_large) = @_;
	my ($file);

	if ($is_large) {
		$file = "asin$asin" . "_L.jpg";
	}
	else {
		$file = "asin$asin" . "_M.jpg";
	}
	if (-e "$COVERIMG_DIR/$file") {
		return $file;
	}
	if (is_success(getstore($url, "$COVERIMG_DIR/$file"))) {
		return $file;
	}
	return;
}


1;

■ 関連記事

■2最近読んだ本[book]<< 前の記事 このエントリーをはてなブックマークに追加

うまく動きますように 会議がうまくいかない原因のリアルな分析がしてあって、納得。 方法論的には、ファシリテーター(会議を運営する人)と書記(みんなのために記録を取る人)を用意することによって、
  1. ファシリテーターによって会議のリーダーと議事進行を切り離す
  2. 書記によってみんながメモを取らなくて良くて共通の記録ができる
ということで問題解決するアプローチ。 マイクロソフトに代表される先進的IT企業の採用試験の話。
マイクロソフトというより「北に1Km、東に1Km、南に1Km。元の点に戻る点がありますか?」「富士山を移動するにはどうすれば良いでしょう?」「太陽は常に東から昇りますか?」「赤い帽子。白い帽子。」等、おなじみの問題が、採用試験ではどういう様に使われているかという興味から閲覧。
過去にやったことではなくて、これからできる(かも知れない)能力を見るためには、論理パズルや思考実験が活用できそう。
面接試験で論理パズルや設計問題を出題して、その人のアプローチを観察することは、その人の可能性を計る上では参考になることが多いと思う。
ただしMS社も新卒者ではなく経験を重視した採用をやる時にはパズルを使っていないし、パズルで能力を計るためには計る側にもスキルが必要。
パズルの出題と解説も十分な量がついているので、パズル本と思って読んでも良いかも。 テクニック的には「スゴイ!」ってことは出てこないのだけれども、実践に裏打ちされた自信には、守る立場からも学ぶところがあると思う。 守る立場からは、自信たっぷりの人には弱いってことを再認識させられる。 守る立場にいたとして、「この時自分だったらどうすれば良いだろうか」「どう教育しておけば大丈夫だろうか」という教材にすると、何度でも楽しめる。 と同じで、何度も読み返して味が出るバイブル(?)的存在かも知れない。 キーワード「安値入札」「自治体のIT発注システム」「ライフサイクルコスト」「中立的なコンサルタント」 コミックも大丈夫かな。こういう考えさせられる系のコミックは買い出すと、離れられなくなってしまう。
結局、出ている全巻揃えてしまった。 しかも、 まで買って来てしまった。 まぁ、人生考えるために生きているわけだから、コミックというラクに入れる方法で問題意識を持てるのは良いことだと思う。
そういう視点では、山本おさむさんの、 とか、 にも感動したし、それによって視野が広がったと思う。

■ 関連記事

以上、1 日分です。

指定日の日記を表示

前月 2003年08月 翌月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

最近の日記

2019年04月01日

新元号「令和」について

2019年03月23日

DXアンテナ ワイヤレスチューナー メディアコンセント DMC10F1

2019年02月17日

#例のグラボを活用する

2019年01月03日

シリーズ5・myHomeAlexaで自分のCDをかける

2018年12月25日

シリーズ4・英語の楽曲・アルバム・アーティスト名をカタカナに直す

2018年12月23日

シリーズ3: Echo Dotがやってきた

2018年12月19日

続・Echo Dotがやってきた

分野別タイトル一覧


全て
CLIP
SYA!nikki
book
freebsd
hns
magic
おさけ
おしごと
お買いもの
ぐる
ごはん
アクセシビリティ
オープンソース
セキュリティ
音楽
地域情報化
電子自治体
日記

keikuma on Twitter

keikuma Name:前田勝之
Location:長崎市
Web:http://www.nantok...
Bio:前田勝之(まえだかつゆき)。長崎在住。コンサル、SE、プログラマー、 なんとか株式会社代表、非常勤講師(情報セキュリティ)。 セキュアド、テクニカルエンジニア(SV,NW)。サーバ管理とWeb日記を10年ほど。 ネットとリアルの接点に関心あり。食べること・歌うこと・愛すること・作ること・飲むこと。おいしいものがぜんぶすき。

サイト内検索

Google AdSense

Powered by hns-2.19.9, HyperNikkiSystem Project