AmazonSearch

提供:きまぐれ手記 Kimagurenote
移動先: 案内検索
当サイトではアフィリエイト広告を掲載しています
この記事は、最終更新日よりおよそ 7 ヶ月経過しています。 公式サイトなどで最新情報を確認してください。(最終更新:2023年12月)
English information available at mw:Extension:AmazonSearch

Extension:AmazonSearch は、AmazonProduct Advertising APIを使ってMediaWiki記事中に商品リンクを埋め込むためのExtension(拡張機能)

特徴

できること

たぶんできること

  • 日本以外のAmazonへのリンク(動作未確認)

できないこと

  • Amazonに登録されていない商品の表示
  • Amazon.co.jp Product Advertising API ライセンス契約の制限により、他のショッピングサイトへのリンクは設定不可 → 通常は YJShopping の利用を推奨
  • 価格はあえて表示していない(しようと思えばできるが、「価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点でAmazon.co.jpに表示されている価格および発送可能時期の情報が適用されます。」の表示を入れるのは煩わしいように思う)
  • 複数商品の表示(キーワード検索してAPIが返した最も上位1点のみ表示する)
  • 記事中から自動でキーワードを拾うといった機能は持たせていないので、記事中の埋め込みたい場所に所定のタグを記述する必要がある。
  • 一切の保証・補償とサポート(ご利用は自己責任でどうぞ)
  • 日本語以外(英語を含む)での説明書きや問い合わせ対応

経緯

Extension:YJShopping を作って、普段はこれで事足りるのだが、中には Amazon にしか掲載されていない商品もあるし、mw:Extension:AmazonLookup は動作しないので、Amazonにしかない商品へリンクするために作ることにした。

このExtensionは Amazon APIの規約に則り Amazon 以外へのリンクを設定していないので、通常は YJShopping(複数ショッピングモールへのリンクを設定可)の利用を推奨。

記述例 Usage

フリーキーワード

<amazon>crescendo</amazon>

フリーキーワード+サーチインデックス(カテゴリ)指定

<amazon SearchIndex="Music">crescendo</amazon>

<amazon SearchIndex="Music" Artist="eyelis">crescendo</amazon>

SearchIndexパラメータの組み合わせ

ISBN・EAN(JAN)

<amazon>978-4-04-072944-2</amazon>

※ISBNのハイフンは不要だが、978-については自動認識するので、付けたままでもOK。(4-などで始まる旧ISBNはハイフン除去が必要)

<amazon>4534530116536</amazon>

※ISBN・EAN(JAN)に限定した検索ではない。

APIに渡せる検索パラメータ一覧

Actor, Artist, Author, Brand, BrowseNodeId, Condition, DeliveryFlags, MaxPrice, Merchant, MinPrice, MinReviewsRating, MinSavingPercent, SearchIndex, SortBy を渡すことができる。 詳細はAPIリファレンス(英語)を参照のこと。

他国のAmazonを検索する

<amazon region="us">eyelis</amazon>

region を指定することで、規定以外の地域のAmazonへリンクを設定できる(地域ごとにAPIキー等を取得して #LocalSettings.php に設定が必要)。

初期設定 Setting

Download

AmazonSearch_20231210.zip (8KB)

Download and unzip it on your MediaWiki extensions directory.

You can use it freely at your own risk. I license it under the Apache License, Version 2.0.

English installation guide is here.

LocalSettings.php

Edit LocalSettings.php file to add below.

LocalSettings.php 
/* AmazonSearch */
require_once "$IP/extensions/AmazonSearch/AmazonSearch.php";
$wgAmazonSearchAPIKey['jp'] = '★';
$wgAmazonSearchAPISecret['jp'] = '★';
$wgAmazonSearchAssociateTag['jp'] = 'kimagurenote.net-22';
$wgAmazonSearchDefaultRegion = 'jp';
$wgAmazonSearchDefaultMerchantId = 'All';
#$wgAmazonSearchAPIKey['us'] = '☆';
#$wgAmazonSearchAPISecret['us'] = '☆';
#$wgAmazonSearchAssociateTag['us'] = 'kimagurenote.net-20';
#$wgAmazonSearchAPIKey['uk'] = '☆';
#$wgAmazonSearchAPISecret['uk'] = '☆';
#$wgAmazonSearchAssociateTag['uk'] = 'kimagurenote.net-21';
#$wgAmazonSearchCachingTime = 3600;
#define( 'AMAZONSEARCH_DEBUG', 'amazonsearch' );
#$wgDebugLogGroups['amazonsearch'] = $IP . '/extensions/AmazonSearch/debug.log';

/* (option) Caching lifetime (default=3600sec) */
$wgAmazonSearchCachingTime = 43200;

/* (option) Lazy loading */
$wgNativeImageLazyLoading = true;

And check Special:Version on your wiki.

Common.css

Edit MediaWiki:Common.css to add below (customize free).

MediaWiki:Common.css 
/* Extension:AmazonSearch */
DIV.amazonsearch {
	clear: both;
	width: 100%;
	min-height: 180px;
	margin: 0 auto;
	padding: 0.5em;
	border: 1px solid #444;
	overflow: hidden;
}
DIV.amazonsearch IMG.amazonsearchimg {
	float: left;
	margin: 0.1em 1em 0.1em 0.1em;
}
DIV.amazonsearch P.amazonsearchname {
	margin: 0;
	font-size: 90%;
	text-indent: 0;
}
DIV.amazonsearch P.amazonsearchauthor::before {
	background-color: #bbb;
	border-radius: 10%;
	color: #fff;
	font-size: smaller;
	padding: 0 0.5em 0 0.5em;
	margin-right: 0.5em;
	content: "広告";
}
DIV.amazonsearch P.amazonsearchauthor {
	margin: 0;
	font-size: 80%;
	text-indent: 0;
}
DIV.amazonsearch UL {
	margin: 0;
}
DIV.amazonsearch UL LI {
	display: inline-block;
	text-align: center;
	list-style: none;
	font-size: 90%;
	width: 12em;
	margin: 0.2em;
	padding: 0.2em 0.5em 0.2em 0.5em;
	border-radius: 0.5em;
	white-space: nowrap;
}
DIV.amazonsearch UL LI A {
	color: #fff;
}
DIV.amazonsearch UL LI.shoplinkamazon {
	background-color: #f90;
}

Dependency

FAQ

レスポンシブですか?スマートフォン向けサイトでも使えますか?
対応しています。使えます。ただし表示はお使いのSkinに依存する部分が大きいので、実際に試してみて表示に不都合があれば #Common.css を書き換えて調整してください。
BOXを縦長にできますか?
#Common.css を書き換えてできます。
Common.css を書き換えられません。
MediaWiki 1.32 以降では、CSSの書き換えに特別な権限が必要になったので、Special:UserRights から追加してください。
Common.css の書き換えを不要にできませんか?
できなくはないものの、初期設定が一層煩雑になってしまいます。Extension をインストールできてCSSの書き換えができない状況を想定できないので、対応予定はありません。
このツールの利用は無料ですか?
無料で使っていただけます。一切の保証やサポートはありませんので自己責任で何とかできる人向けですが、Apache Licenseで配布していますので、その範囲でご自由にご利用ください。Amazonの規約利用ポリシーの変更などにより突然使えなくなることもあり得ますが、それも含めて利用者の責任においてご利用ください。
Tweeki のSkin領域で使えますか?
使えません。Tweekiのページを参考にして自作するなどしてください。
ひとつのページに複数の商品リンクを設置できますか?
特に制限は設けていませんが、Amazon API 側の仕様で、1秒に1アクセスを超えると制限されることがあります。API側でエラーになった場合は何も表示されません(後述)。AmazonSearch を貼るのは最小限に留め、通常は YJShopping を貼ることをお勧めします
何も表示されません
APIがエラーを吐くと、このExtensionは何も表示しません。ページのソースを表示(Ctrl+U)すると、該当箇所に簡単なエラーメッセージをコメントで出力しているので、まずはそれを確認してみましょう。例えば、
<!-- amazon>API call failure.</amazon -->
この場合は、Amazon API がエラーを返しています(詳細なエラー番号は 429 Too Many Requests になるようです)。連続して呼んだときなどによく出てきます。
APIがエラーを吐く原因は他にも、#LocalSettings.php の設定が間違っている場合や、Amazonが定めるリクエスト数の上限を超えたときなどにも発生します。詳しいエラーの原因が知りたい場合は、PHPのエラー表示を有効にするか、デバッグログを出力して追跡することができます。
#記述例 Usage に何も表示されていませんが。
本サイトがAPI制限に引っかかった可能性があります(;_;)。しばらく(半月ほど)時間を置いて再度閲覧してみてください。なお、ついでの時にでも Amazon のリンクを辿って買い物してもらえると、API制限が解除されやすくなるかもしれません:)
Product Advertising API v5 に対応していますか
2020年 3月 2日に暫定対応しました。ただしその時点では、v4よりもv5の方がサーバが不安定のように感じます。このプログラム自体の動作確認も十分できていないため、不具合等あるかもしれません。
なお、LocalSettings.php の設定は共通(変更不要)ですが、人によってはAPIキー・シークレットの再取得が必要になるかもしれません(「移行のご案内」を参照)。本プログラムがうまく動かない場合は、Scratchpad で試してみると良いでしょう。
また、渡せるパラメータが変更されています。細かいパラメータを渡して詳細検索している人は、記事本文中のタグを書き換える必要があるかもしれません。
当面の間、PA-API v4 用のコードも同梱しておきますので、何かの事情で旧バージョンを使いたい場合は、ファイル名を書き換えて使うことができます。→(2023.07.06)廃止
キャッシュの保存時間は?
規定で3600秒(1時間)になっています。LocalSettings.php にて変更できます。
$wgAmazonSearchCachingTime = 600;	/* 600秒(10分) */
また、MediaWikiのObjectCacheを使っているので、本Extensionのためにデータベースの改変などは不要ですが、LocalSettings.php で $wgMainCacheType を適切に設定しておく必要があります。
タイムアウト時間は?
PHPの規定によります。規定値は60秒と長いため、php.ini の default_socket_timeoutを変更しておくことをお勧めします(ちなみに作者は6秒に設定していますが、AmazonのAPIは反応が早いため、このExtensionだけを考えるともっと短くてもいいかも)。
「広告」表記を入れたい
CSSで入れることができます。

Bugs

History

参考リンク

関連記事