質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

3594閲覧

Amazon APIを用いて商品の説明を取得するコードに関して

退会済みユーザー

退会済みユーザー

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/07/10 00:47

編集2018/07/10 02:45

前提・実現したいこと

Amazon Product Advertising API を用いて、
商品のASINから商品の説明を取得しようとしています。
メーカーの記載しているものではなく、Amazonが記載しているものです。

例えば、お〜いお茶の場合

以下の部分です。

text

1商品の説明 2サイズ:1) 525ml×24本 3商品紹介 4香り高く、まろやかで味わい深い緑茶飲料です。 5 6■お~いお茶“4つの鮮度"へのこだわり 71鮮度茶葉:「お~いお茶専用茶葉」を使用し、加工時間を約半分に短縮 82鮮度抽出:抽出前に茶葉を温めて香りを閉じ込めて抽出 93鮮度充填:お茶に含まれる酸素量を0.0003%以下に抑制し、酸素による味の変化を防止 104鮮度を守る新型容器 「新・鮮度ボトル」採用 11 12原材料・成分 13緑茶(日本)/ビタミンC

Amazon APIで返すことのできる項目のResponse Groupsの中から「商品の説明」に該当するのはPromotionSummaryになるのではないかという仮定のもと進めていますが、別のResponse Groupが「商品の説明」に該当する可能性もあるのではないかと考えています。

発生している問題・エラーメッセージ

ItemLookupのページでAssociateTagや商品のASINを入力し、
取得したい情報としてImageを選択すると、Java・PHP、Ruby on Railsで
コードスニペットが表示されます。

開発はPythonで行なっているため、Javaで表示されたものをPythonに書き換える際にJavaでは以下の部分をどう書き換えれば良いかわかりません。

params.put("Service", "AWSECommerceService"); params.put("Operation", "ItemSearch"); params.put("AWSAccessKeyId", ""); params.put("AssociateTag", ""); params.put("SearchIndex", "All"); params.put("ResponseGroup", "PromotionSummary");

該当のソースコード

ItemLookupのページでAssociateTagや商品のASINを入力し、
取得したい情報としてPromotionSummaryを選択すると、Java・PHP、Ruby on Railsでコードスニペットが表示されます。

それで表示されたJavaのコードです

java

1package com.amazon.advertising.api.sample; 2 3import java.util.HashMap; 4import java.util.Map; 5 6import javax.xml.parsers.DocumentBuilder; 7import javax.xml.parsers.DocumentBuilderFactory; 8 9import org.w3c.dom.Document; 10import org.w3c.dom.Node; 11 12/* 13 * This class shows how to make a simple authenticated call to the 14 * Amazon Product Advertising API. 15 * 16 * See the README.html that came with this sample for instructions on 17 * configuring and running the sample. 18 */ 19public class JavaCodeSnippet { 20 21 /* 22 * Your Access Key ID, as taken from the Your Account page. 23 */ 24 private static final String ACCESS_KEY_ID = ""; 25 26 /* 27 * Your Secret Key corresponding to the above ID, as taken from the 28 * Your Account page. 29 */ 30 private static final String SECRET_KEY = ""; 31 32 /* 33 * Use the end-point according to the region you are interested in. 34 */ 35 private static final String ENDPOINT = "webservices.amazon.com"; 36 37 public static void main(String[] args) { 38 39 /* 40 * Set up the signed requests helper. 41 */ 42 SignedRequestsHelper helper; 43 44 try { 45 helper = SignedRequestsHelper.getInstance(ENDPOINT, ACCESS_KEY_ID, SECRET_KEY); 46 } catch (Exception e) { 47 e.printStackTrace(); 48 return; 49 } 50 51 String requestUrl = null; 52 53 Map<String, String> params = new HashMap<String, String>(); 54 55 params.put("Service", "AWSECommerceService"); 56 params.put("Operation", "ItemSearch"); 57 params.put("AWSAccessKeyId", ""); 58 params.put("AssociateTag", ""); 59 params.put("SearchIndex", "All"); 60 params.put("ResponseGroup", "PromotionSummary"); 61 62 requestUrl = helper.sign(params); 63 64 System.out.println("Signed URL: \"" + requestUrl + "\""); 65 } 66}

試したこと

現状でAmazon Product Advertising APIを用いて、ASINから
商品名とタイトルは取得することができています。
以下コードの参考にしたサイト

Python

1from amazon.api import AmazonAPI 2 3AMAZON_ACCESS_KEY = "own_acess_key" 4AMAZON_SECRET_KEY = "own_secret_key" 5AMAZON_ASSOC_TAG = "own_assoc_tag" 6 7amazon = AmazonAPI(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, region="JP") 8try: 9 product = amazon.lookup(ItemId="B01BEPNPF6") 10 print(product.title) #item name 11 print(product.price_and_currency) #price 12except Exception as e: 13 print (e)

補足情報(FW/ツールのバージョンなど)

Python 3.6.3
Mac OS High Sierra

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2018/07/10 01:10

python-amazon-simple-product-apiを使ったコードでいいのか、全部自分で書きたいからJavaのコードをPythonに翻訳したいのか、どっちの質問か分からないです。
退会済みユーザー

退会済みユーザー

2018/07/10 01:18

ご質問いただきましてありがとうございます。JavaのコードをPythonに翻訳したいです。
quickquip

2018/07/10 01:32 編集

だとすると、リクエストの作成部分の、書いている途中のソースが提示されていないといけないかと(ちょっと読み間違えたので書き直しました)
退会済みユーザー

退会済みユーザー

2018/07/10 01:34

こちらも読み間違えていました。python-amazon-simple-product-apiを使って、現在作成しているPythonのコードでASINから 商品名とタイトルに加え、商品の説明を取得したいということです。
guest

回答2

0

ベストアンサー

手元に確認できるキーが無いので未確認となりますが、
MWS APIが利用できるのであれば、こちらのエンドポイントで取得できるかもしれません
http://docs.developer.amazonservices.com/ja_JP/products/Products_GetMatchingProduct.html

投稿2018/07/10 17:22

39ff

総合スコア284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/07/11 00:52

ご回答いただきましてありがとうございます。 MWS APIのキーは取得できると思いますが、そのあとのコードがAmazon Product Advertising APIとは異なり、公開されていませんよね。MarketplaceIdを用いるということでしょうか。
guest

0

https://github.com/yoavaviram/python-amazon-simple-product-api/blob/master/amazon/api.py#L1069
https://github.com/yoavaviram/python-amazon-simple-product-api/blob/master/amazon/api.py#L1108

editorial_reviewsfeaturesでは。

print(product.editorial_reviews) print(product.features)

XML Responseを確認して、どこに情報が入っているかを把握 → python-amazon-simple-product-api のコードを確認して、どの属性に格納しているかを把握 という作業かと思います。

鮮度茶葉:「お~いお茶専用茶葉」を使用し、加工時間を約半分に短縮

の部分はXMLに入ってこないように見えますね。

投稿2018/07/10 02:09

quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/07/10 02:23

ASIN B072298YR1で、editorial_reviewsやfeaturesを選択したところ、 商品の説明のパラグラフではなく、以下のように表示されました。 ['国産茶葉を100%使用した、香り高く、まろやかで味わい深い緑茶飲料です(無香料・無調味)。'] ['原材料:緑茶(日本)/ビタミンC', '内容量:525ml×24本', 'カロリー:0Kcal', '商品サイズ(高さx奥行x幅):22.8cm×27.0cm×40.8cm']
退会済みユーザー

退会済みユーザー

2018/07/10 02:27 編集

この出力結果は、ユーザの見るAmazonのページには同じものは載っていませんでしたが、ユーザの見るAmazonのページのメーカーではなくAmazonの明記する「商品の説明」は取得できないということになるのでしょうか。
quickquip

2018/07/10 02:30

ItemLookup で確認できる「レスポンスで返されるXML」の範囲でしか情報は取れません。ページで確認できる情報に対応しているだろうXMLのエントリを見る以外、APIを使う側には選択肢はないかと思います。
退会済みユーザー

退会済みユーザー

2018/07/10 02:46

かしこまりました。前提に追記したように Amazon APIで返すことのできる項目のResponse Groupsの中から「商品の説明」に該当するのはPromotionSummaryになるのではないかという仮定のもと進めていますが、別のResponse Groupが「商品の説明」に該当する可能性もあるのではないかと考えています。 という問題とはまた異なるという理解で正しいでしょうか。
quickquip

2018/07/10 02:58

私の回答(の前提)は、その可能性はない、でした。もっと詳しい方の回答に期待します。あと、もしそうだとすると、python-amazon-simple-product-apiじゃなくてレスポンスXMLを自分で読み込まないといけなさそう、という推測から、回答の中で考慮しないという判断をしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問