Amazonウィッシュリストへのプログラムアクセス?
-
14-10-2019 - |
質問
Amazonは最近、APIを変更しました。これは、これらのAPIを使用してプログラムでAmazonで私のウィッシュリストにアクセスする方法がないようです。スクリーンスクレイピング以外にそれを行う方法を知っている人はいますか?たぶん、サードパーティのサービス(私は公開データだけで作業することを気にしません)?
解決
スクリーンスクレイピングの場合、コンパクトレイアウトスタイルが役立つ場合があります。 http://bililite.com/blog/2010/10/31/hacking-myway-to-an-amazon-wishlist-widget/
アップデート
Googleスプレッドシートで独自のハッキングを行い、2つの基本的な実装を機能させることができました。
Google Appsスクリプトの使用:
ウィッシュリストIDをセルA1に入力します。以下をGoogle Appsスクリプト(ツール>スクリプト>スクリプトエディター)にコピーして貼り付け、getWishList関数を実行します。
function getWishlist(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var wishlistId = sheet.getRange('a1').getValue();
var response = UrlFetchApp.fetch("http://www.amazon.co.uk/registry/wishlist/" + wishlistId + "?layout=compact").getContentText();
var asinRegex = /name="item.([\d]+)\.(?:[A-Z0-9]+).([A-Z0-9]+).*/g
while (match = asinRegex.exec(response)) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var rowIndex = Number(match[1])+2;
var asin = match[2];
setRow(sheet, rowIndex, asin);
var offers = UrlFetchApp.fetch("http://www.amazon.co.uk/gp/offer-listing/" + asin).getContentText();
setRow(sheet, rowIndex, asin,
getFirstMatch(/class="producttitle">(.+)</g, offers),
getFirstMatch(/class="price">(.+)</g, offers));
}
Browser.msgBox("Finished");
}
function getFirstMatch(regex, text) {
var match = regex.exec(text);
return (match == null) ? "Unknown" : match[1];
}
function setRow(sheet, index, a, b, c) {
sheet.getRange('a' + index).setValue(a);
sheet.getRange('b' + index).setValue(b);
sheet.getRange('c' + index).setValue(c);
}
NB、私はタイトル /価格に一致するRegexでいくつかの問題を抱えています。理由はわかりませんが、基本的なアイデアを示しています。
Googleスプレッドシート関数を使用します
ウィッシュリストIDをセルA1に入力します。
次の関数をA2に入力します。それは、ウィッシュリスト内の各アイテムのID文字列をセルとそのすべてに入力します。
=importXML("http://www.amazon.co.uk/registry/wishlist/"&A1&"?layout=compact", "//*[starts-with(@name, 'item.')]/@name")
次の関数をB2に入力します。これにより、ID文字列からasinが抽出されます。
=right(A2, 10)
次の関数をB3に入力します。B3は、B2のASINのオファーリストを取得し、タイトルを表示します。
=importXML("http://www.amazon.co.uk/gp/offer-listing/"&B2, "//h1")
次の関数をB4に入力します。これにより、B2のASINのオファーリストを取得し、すべての価格を表示します。
=concatenate(importXML("http://www.amazon.co.uk/gp/offer-listing/"&B2, "//span[@class='price']"))
他のヒント
Justin Scarpettiと呼ばれる男が、ウィッシュリストを削ってJSON形式でデータを返す非常にきちんとした「API」を作成しました。
これは、Amazon Wishリストデータを取得するための小さなAPIです。 Amazonは数年前にそれを閉鎖したため、公式のAPIはありません。その周りの唯一の方法...スクリーンスクレイピング。
Amazon Wish Listerは、PhpQuery(jQueryに基づいてサーバー側のCSS3セレクター駆動型Dom API)を使用して、AmazonのウィッシュリストページとJSON、XML、またはPHPアレイオブジェクトにエクスポートします。
自分のウェブサイトでウィッシュリストを表示したい場合に最適です。
ソース: アマゾンはリスターを望みます