web-dev-qa-db-ja.com

Amazonウィッシュリストへのプログラムによるアクセス?

Amazonは最近APIを変更しましたが、これらのAPIを使用してプログラムでAmazonのWishListにアクセスする方法は今のところないようです。スクリーンスクレイピング以外にそれを行う方法を知っている人はいますか?サードパーティのサービスかもしれません(公開データのみを使用してもかまいません)。

29
StasM

画面のスクレイピングには、コンパクトなレイアウトスタイルが役立つ場合があります。 http://bililite.com/blog/2010/10/31/hacking-my-way-to-an-Amazon-wishlist-widget/ ==

更新

私はグーグルスプレッドシートで自分自身のハッキングを行い、2つの基本的な実装を機能させることができました。

Google Apps Scriptsの使用:

ウィッシュリストIDをセルA1に入力します。以下をコピーしてGoogleAppsスクリプトに貼り付け([ツール]> [スクリプト]> [スクリプトエディター])、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、タイトル/価格に一致する正規表現の問題がいくつかあります。理由はわかりませんが、基本的な考え方を示しています。

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に入力すると、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']"))
15
robd

Justin Scarpettiという男が、ウィッシュリストをスクレイプしてデータをjson形式で返す非常に優れた「API」を作成しました。

これは、Amazonウィッシュリストデータを取得するための小さなAPIです。 Amazonが数年前にシャットダウンしたため、公式のAPIはありません。それを回避する唯一の方法...画面のスクレイピング。

Amazon Wish Listerは、phpQuery(jQueryに基づくサーバー側CSS3セレクター駆動のDOM API)を使用してAmazonのWish Listページをスクレイプし、JSON、XML、またはPHP配列オブジェクトにエクスポートします。

自分のウェブサイトにウィッシュリストをホスト表示したい場合に最適です。

出典: Amazon Wish Lister

14
Andy Davies