Amazon Web サービス

Livedoor の次は Amazon かよ...って所ですが。既に気づいた方もいらっしゃるかもしれませんが、このサイトの右側の下の方に Amazon の商品を表示しています。すっかり、アフィリエイトづいています。

これ、今読んでいたりする本や聴いている CD などの関連商品です。Amazon Web サービスでは関連商品を調べることができるのですね。ここに表示される商品を見ると、なにに興味を持っているかが分かるっていうスンポー。

Livedoor の天気も Amazon を使った関連商品の表示も PHP で作っているのですが、一番手こずった部分は、実は JavaScript の部分ということは秘密。

REST で XML が返ってくるという部分は Livedoor お天気と同じなので AppleScript でも処理を行うことができます。ということで、今聴いている iTunes の曲のアーティストを使って Amazon で検索してみるスクリプトなんかを。

Script Editor で開く

property tmpFolder : path to temporary items folder from user domain
property tmpFile : POSIX path of ((tmpFolder as Unicode text) & "request.xml")

property LF : ASCII character 10

property baseurl : "http://webservices.amazon.co.jp/onca/xml"
property service : "AWSECommerceService"
property accesskey : "your access key is here." -- ここにアクセスキー
property associateid : "your associate id is here." -- ここにアソシエイト ID
property operation : "ItemSearch"
property SearchIndex : "Music"
property responsegroup : "Request,Small,Images"
property AWSVersion : "2006-05-17"
property pagenumber : "1"
property sort : "salesrank"

tell application "iTunes"
    set theArtist to artist of current track
end tell

set encodedText to my encodeURL(theArtist)

set keywords to encodedText

set request to baseurl
set request to request & "?Service=" & service
set request to request & "&AWSAccessKeyId=" & accesskey
set request to request & "&AssociateTag=" & associateid
set request to request & "&Operation=" & operation
set request to request & "&Keywords=" & keywords
set request to request & "&SearchIndex=" & SearchIndex
set request to request & "&ResponseGroup=" & responsegroup
set request to request & "&Page=" & pagenumber
set request to request & "&Version=" & AWSVersion
set request to request & "&Sort=" & sort

do shell script "curl -o " & quoted form of tmpFile & " " & quoted form of request

tell application "System Events"
    set xmlFile to XML file tmpFile

    set root to XML element 1 of xmlFile
    set itemsElement to XML element "Items" of root
    set html to ""
    repeat with thisElement in (XML elements of itemsElement whose name is "Item")
        set theURL to value of XML element "DetailPageURL" of thisElement
        set itemTitle to value of XML element "Title" of XML element "ItemAttributes" of thisElement
        set html to html & "<a href=\"" & theURL & "\">" & itemTitle & "</a>" & LF
    end repeat
end tell

html

on encodeURL(theText)
    if not ((theText starts with "'") and (theText ends with "'")) then
        set theText to quoted form of theText
    end if

    try
        do shell script "echo " & theText & " | " & "php -r 'echo rawurlencode(`cat -`);'"
    on error eMessage number eNumber
        tell application (path to frontmost application as Unicode text)
            activate
            display dialog (eNumber & return & eMessage & return & return) as Unicode text buttons {"OK"} default button 1 with icon 0
        end tell
        return ""
    end try
end encodeURL

検索結果を使って商品へのリンクタグを作っています。実際に利用するには Amazon でデベロッパー登録をしてアクセスキーをもらう必要があります。アフィリエイト ID は特に必要ないですが、あると検索結果の商品の URL にアフィリエイト ID が埋め込まれます。

検索結果がなかったときと Amazon でエラーが起きた時の処理は行っていませんので、その辺りご注意を。

0 件のコメント :

コメントを投稿