2003年08月12日

,■続・Web日記的読書録
,■最近読んだ本
Title:■続・Web日記的読書録
Title:■続・Web日記的読書録
Title:続・Web日記的読書録 Content-Type: text/html; charset=EUC-JP Last-Modified: Sat, 30 May 2020 03:15:29 GMT サーバ管理者日誌 続・Web日記的読書録

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;

■ 関連記事

以上、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