API(PA-API)を利用して商品情報を得るPythonプログラムを試してみました。AmazonアソシエイトAmazonアソシエイトとは、つまるところアフィリエイトです。当サイト見た人がAmazonへのリンクをポチッて商品を買ってくれたら私に小銭が入る仕組みです。アカウント(無料)を作成してアソシエイトIDをゲットしましょう。あとは、こんな感じの出来合いのバナー広告をはってムフフ....。API出来合い広告だけじゃあ満足できない人が使うPA-API。URLや価格などの商品情報を取得したり、ショッピングカートをコントロールしたり、カスタマーレビューをゲットしたりできるAPIです。プログラミングを要しますが、Amazonの商品情報を利用したWebサービスを作ることが出来ます。商品情報の入手はHTTPのGETなので、今どきのプログラミング言語なら何でもOK。APIを利用するために、アクセスキーIDとシークレットキーのペアを作成しましょう。API」を選択アクセスキーIDとシークレットキーを作成PA-APIの利用ポリシーを厳守しましょう。最近、重要な変更がありました。利用ポリシーの変更について日程変更のお知らせ当初変更日程を2019年01月16日としておりましたが、2019年01月23日に変更いたします。(以下PA-API)ではこれまで全てのお客様に初期状態にて1秒間に1リクエストのサービス提供をしてまいりました。2019年01月23日よりこの条件を変更し、過去30日以内の発送済み売上商品が発生している場合、1日のリクエスト上限を8,640リクエストとし、追加の日次リクエスト可能数の上限を毎日動的に変更する下記仕様といたします。8,640リクエスト(API利用開始より60日間)PA-APIより取得した商品リンクより発生した、過去30日間の発送済み商品売上$0.05(日本円で約5円)ごとに1リクエスト追加1日の最大リクエスト可能数は、1日あたり864,000リクエスト売上実績の発生がない場合は、PA-APIの利用開始はできません。発送済み商品売上が過去30日以内に発生していない場合、PA-APIをご利用いただけなくなる恐れがございます。Builder(WordPressプラグイン)のご利用についても、先に挙げた条件が適用となり、売上実績が必要となります。集客力の無いサイトはAPIを使えなくなります。ひぇ!1日当たりのアクセス数は8,640に激減しました。過疎っている当サイトにはノーダメですが。1アクセス/秒の制限も地味に問題です。複数のアフィを貼ったページへアクセスしたときにポリシーに違反するケースが考えられるので。アクセス制限に引っかかると503エラーが発生して商品情報をもらえなくなるので、商品情報をキャッシュする、排他ロックで同時API利用を抑制する...などの仕組みが必要ですね。GETなので、Python公式urllibや定番Requestsが使えます。無いものは無いPython、Amazonアソシエイト用のライブラリがすでに存在しますので利用しました。名前から機能を全く連想できませんね。Library環境に応じて、pipやpipenvなどでインストールしましょう。pipenvによるインストール(仮想環境)こんなコードで商品情報が得られます。ResponseGroup=ResponseGroup).decode()print(itemInfo)実行するコマンド。パブリックなので晒しても大丈夫。ナイショにする必要があるのはシークレットキー(AWSSecretKey)だけです。さっき、アクセスキーIDを塗りつぶしたけど無駄でした。ItemLookup()で得られる商品情報はbytes型なので、decode()でデコードしてstrに変換しています。Amazonから受け取ったレスはタグまみれのXMLです。欲しい情報を何とかして抽出する必要があります。Soupっての使います。石けんではなくスープです。XMLやHTMLをパースして、欲しい情報をぶっこ抜くことが出来る便利ライブラリです。スクレイピングってやつです。Soupのドキュメントによると、現時点で使えるHTMLパーサはPython組込みの他に複数ありますが、XMLパーサはlxmlのみです。Soupとlxmlのインストールは次のとおり。pipenvでのインストールさっきのプログラムをちょっといじました。Soup、lxmlで商品情報を取得するプログラムです。[Blu-ray]商品情報が収められた変数soupは、見た目は先ほどと同じくXML形式のstr型変数ですが、BeautifulSoupという全く違う型です。XMLのノードを探索して必要なデータをぶっこ抜くための多彩な方法が使えます。商品が掲載されているURLは、次のようなコードで取得できます。BeautifulSoup型は、タグ名で検索して中身を取り出すことができるのです。soup.find('DetailPageURL').get_text()1soup.find('DetailPageURL').get_text()商品タイトルは次のコードで見つかります。soup.find('Title').get_text()1soup.find('Title').get_text()商品名とそのURLがゲットできたので、↓のようにアフィリエイトリンクが出来上がり。[Blu-ray]さて、予備実験はここまで。汎用的に商品情報を使えるように、辞書(dict)型変数にデータを格納するプログラムを作りました。Amazonの商品情報(XML)をパースして、主要タグを辞書形式にまとめる。ama_parseItem(itemSoup):'''Amazonの商品情報(XML)をパースして、主要タグを辞書形式にまとめる。パースして辞書に収めるprint(itemDict['Title'])print(itemDict['ImageURL'])print(itemDict['DetailPageURL'])以上です。画像ファイルサイズを変更。Automatorでクイックアクション化。ファイル名をハッシュ値でリネーム。Automatorでクイックアクション化。BottleでWebSocketを試す。コメントをキャンセルメールアドレスが公開されることはありません。上に表示された文字を入力してください。コメントデータの処理方法の詳細はこちらをご覧ください。画像ファイルサイズを変更。Automatorでクイックアクション化。ファイル名をハッシュ値でリネーム。Automatorでクイックアクション化。DockerでHTTPS-PORTAL使うとHTTPSサイトの構築が超絶簡単DockerでWordPress+MySQL+phpMyAdmin+WSGIのプラクティスBB-8のプラモデルを作りました。プラモデル作りを再開。BottleでWebSocketを試す。fastenersで排他ロックを試す。Blue-black.ink。