AmazonSearch

提供: きまぐれ手記 Kimagurenote
移動先: 案内検索
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, AudienceRating, Author, Brand, BrowseNode, Composer, Condition, Conductor, Director, Manufacturer, MaximumPrice, MerchantId, MinimumPrice, Orchestra, Publisher, SearchIndex, Sort を渡すことができる。 ただし、SearchIndex の値によっても指定できる値は異なる

各々の意味はAPIリファレンスを参照のこと。

他国のAmazonを検索する

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

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

初期設定 Setting

Download

Download and unzip it on your MediaWiki extensions directory.

You can use it freely at your own risk. I license it under the Revised BSD License.

LocalSettings.php

Edit LocalSettings.php file to add below.

/* 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-20';
#$wgAmazonSearchAPIKey['uk'] = '☆';
#$wgAmazonSearchAPISecret['uk'] = '☆';
#$wgAmazonSearchAssociateTag['uk'] = 'kimagurenote-21';
#$wgDebugLogGroups['amazonsearch'] = $IP . '/extensions/AmazonSearch/debug.log';
  • 【必須】★印には、Amazon Webサービス(AWS)で取得した Access Key IDSecret Access Key を入れる。
  • 【使う場合は必須】☆印のように、他の地域のAmazon(例えば Amazon.com の場合はここ)で取得した各値を設定することで、その地域のAmazonの商品検索もできるようになるはず(動作未確認)。
  • 【実質必須】$wgAmazonSearchAssociateTag['jp'] には、Amazonアソシエイトで取得したトラッキングIDを入れる。仕様上は任意だが、なぜか無指定だとAPIがエラーを吐くので(謎)、実質必須。
  • 【任意】$wgAmazonSearchDefaultRegion は、ca/de/fr/jp/uk/us のいずれかを指定可。省略時は jp。
  • 【任意】$wgAmazonSearchDefaultMerchantId を All にすると、Amazon以外が販売する商品も検索対象になる。省略(または Amazon を指定)すると、Amazon が販売する商品以外は検索対象外になる。
  • 【通常は不要】$wgDebugLogGroups['amazonsearch'] にデバッグログ出力先を指定し、ソースコード内の define( 'AMAZONSEARCH_DEBUG', 'amazonsearch' ); のコメントを外すと、デバッグログを出力する。通常は不要だが、このExtensionが何も出力しない(設定の不良かAPIのエラーが考えられる)場合の調査などをする時にどうぞ。放っておくとログが膨大になるので、不要な時は無効にすることを推奨。

And check Special:Version on your wiki.

Common.css

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

/* Extension:AmazonSearch */
DIV.amazonsearch {
	clear: both;
	width: 100%;
	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 {
	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の書き換えができない状況を想定できないので、対応予定はありません。
このツールの利用は無料ですか?
無料で使っていただけます。一切の保証やサポートはありませんので自己責任で何とかできる人向けですが、BSDライセンスで配布しますので、その範囲でご自由にご利用ください。Amazonの規約利用ポリシーの変更などに伴い使えなくなることもあり得ますが、それも含めて利用者の責任においてご利用ください。
Tweeki のSkin領域で使えますか?
使えません。Tweekiのページを参考にして自作するなどしてください。
ひとつのページに複数の商品リンクを設置できますか?
特に制限は設けていませんが、Amazon API 側の仕様で、1秒に1アクセスを超えると制限されることがあります。その場合は何も表示されません(後述)。AmazonSearch を貼るのは最小限に留め、通常は YJShopping を貼ることをお勧めします。
何も表示されません
APIがエラーを吐くと、このExtensionは何も表示しません。ページのソースを表示(Ctrl+U)すると、該当箇所に簡単なエラーメッセージをコメントで出力しているので、まずはそれを確認してみましょう。例えば、
<!-- amazon>API call failure.</amazon -->
この場合は、Amazon API がエラーを返しています。連続して呼んだときなどによく出てきます。
APIがエラーを吐く原因は他にも、#LocalSettings.php の設定が間違っている場合や、Amazonが定めるリクエスト数の上限を超えたときなどにも発生します。詳しいエラーの原因が知りたい場合は、デバッグログを出力して追跡することもできます。
#記述例 Usage に何も表示されていませんが。
API制限に引っかかった可能性があります(;_;)。しばらく時間を置いて再度閲覧してみてください。なお、ついでの時にでも Amazon のリンクを辿って買い物してもらえると、API制限が解除されやすくなるかもしれません:)

Bugs

  • 表示はAPI制限の様子も見ながら調整中
  • 日本以外のAmazonへのリンク設定は動作確認予定(とりあえず米国と英国のAamzonのアソシエイトアカウントを開いて承認待ち、英語以外の国は全く読めないので確認予定無し)
  • AmazonのAPIは利用制限が厳しいので、しょっちゅう表示されなくなる。そのときに何が原因なのか全く分からないので、簡単なエラーメッセージをコメントで出力しているが、果たしてどのような形が良いのか。
  • API側が障害等で止まっているときにこちらに影響が及ぶ(ので、そのうちタイムアウトの設定等考えたい)。
  • 他にもいろいろ手抜きし放題。
  • 英語があちこち壊れているのはいろいろ諦めてくださいorz
  • その他にも気づいた点があれば直して使ってください:-)

History

2019.07.09 (v1.0.1)
display:table; を解除、#Common.css にて float:left; 指定。
mbstring 関数が未定義の場合は通らないようにした(海外利用対応)
i18n/en.json を i18n/qqq.json (default) に変更
2019.06.20 (v1.0.0)
初版

参考

関連