AmazonSearch
この記事は、最終更新日よりおよそ 7 ヶ月経過しています。 公式サイトなどで最新情報を確認してください。(最終更新:2023年12月) |
Extension:AmazonSearch は、Amazon の Product Advertising APIを使ってMediaWiki記事中に商品リンクを埋め込むためのExtension(拡張機能)。
特徴
できること
- フリーキーワード検索に対応
- Amazon.co.jp に登録されている画像、商品名、作者名(またはメーカー名)を表示
- AmazonアソシエイトIDを設定可(必須)
- 見た目の変更はスタイルシートで → #Common.css
- Apache License Version 2.0 で提供 → Special:Version/License/AmazonSearch
たぶんできること
- 日本以外の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>
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;
- 【必須】★印には、Amazon Webサービス(AWS)で取得した Access Key ID と Secret Access Key を入れる。
- 【使う場合は必須】☆印のように、他の地域のAmazon(例えば Amazon.com の場合はここ)で取得した各値を設定することで、その地域のAmazonの商品検索もできるようになるはず(動作未確認)。
- 【必須】$wgAmazonSearchAssociateTag['jp'] には、Amazonアソシエイトで取得したトラッキングIDを入れる。
- 【任意】$wgAmazonSearchDefaultRegion は、ae/au/br/ca/de/es/fr/in/it/jp/mx/sg/tr/uk/us のいずれかを指定可。省略時は jp。
- 【任意】$wgAmazonSearchDefaultMerchantId を All にすると、Amazon以外が販売する商品も検索対象になる。省略(または Amazon を指定)すると、Amazon が販売する商品以外は検索対象外になる。
- 【任意】$wgAmazonSearchCachingTime にてキャッシュの保存時間(単位:秒)を指定できる。省略すると3600秒(1時間)。MediaWikiのObjectCacheを使うので、キャッシュを有効にするには別途 LocalSettings.php で $wgMainCacheType を適切に設定しておく必要がある。
- 【任意】(v1.1.4-) $wgNativeImageLazyLoading = true; にすると、商品画像に loading="lazy" を付加する。
- 【通常は不要】define( 'AMAZONSEARCH_DEBUG', 'amazonsearch' ); のコメントを外し、$wgDebugLogGroups['amazonsearch'] もコメントを外してデバッグログ出力先を指定すると、デバッグログを出力する。通常は不要だが、このExtensionが何も出力しない(設定の不良かAPIのエラーが考えられる)場合の調査などをする時にどうぞ。放っておくとログが膨大になるので、不要な時は無効にすることを推奨。
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
- Amazon Product Advertising API 5.0
- PHP 5.4.0+ (using http_build_query() with PHP_QUERY_RFC3986 option) (using json_encode() with JSON_UNESCAPED_UNICODE option)
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制限に引っかかった可能性があります(;_;)。しばらく(半月ほど)時間を置いて再度閲覧してみてください。なお、ついでの時にでも のリンクを辿って買い物してもらえると、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
- 表示はAPI制限の様子も見ながら調整中
- 日本以外のAmazonへのリンク設定は動作確認できず(とりあえず米国と英国のAmazonのアソシエイトアカウントを開いて申請したが販売実績不足で却下された。英語以外の国は全く読めないので確認予定無し)
- AmazonのAPIは利用制限が厳しいので、しょっちゅう表示されなくなる。そのときに何が原因なのか全く分からないので(大抵は 429 Too Many Requests だが)、簡単なエラーメッセージをコメントで出力しているが、果たしてどのような形が良いのか。→キャッシュに対応したので幾分改善したと思う。
- PA-API v5 に移行
させられした際、(サーバが不安定でしょっちゅう止まるため)動作確認を最小限にしかしていないので、不具合等あるかも。→近頃はあまり止まらなくなった。 - API側が障害等で止まっているときにこちらに影響が及ぶ(ので、そのうちタイムアウトの設定等考えたい)。
- 他にもいろいろ手抜きし放題。
- 英語があちこち壊れているのはいろいろ諦めてくださいorz
- その他にも気づいた点があれば直して使ってください:-)
History
- 2023.12.10 (v1.1.5)
- 地域選択に関するバグを修正 (Thank you for mw:User:Simpsonspedia.net!)
- 2023.07.31 (v1.1.4)
- 遅延読み込み (Lazy loading)に対応($wgNativeImageLazyLoading 指定時)
- 2023.07.12 (v1.1.3)
- Object cache に対応
- 2023.07.06 (v1.1.2)
- PHP 8にしたら warning や notice が出るようになったので対策
- 旧 PA-API v4 対応コードの同梱廃止
- 2020.06.04 (v1.1.1)
- PHP 7.4 にしたら warning や notice が出るようになったので対策
- 2020.03.02 (v1.1.0)
- PA-API v5 に移行(暫定対応)。署名部分の処理は Scratchpad に表示されるサンプルコードを流用したため、ライセンスを Apache License 2.0 に変更。
- 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)
- 初版