はてなアフィリエイト用Amazonアソシエイト記事作成スクリプト

やっつけなので出来はイマイチ(言い訳)。整形は各自で。

自分のアソシエイトIDのはてなasinページリンク作成。「ISBN⁄ASIN記法」のtitle、detailと同じ形で出力する。


実行例:

> python PyAmaAsso.py "4061822691:t"
sys:1: DeprecationWarning: Non-ASCII character '\x81' in file PyAmaAsso.py on line 20, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
『<a href="http://d.hatena.ne.jp/asin/4061822691/diaryexceptio-22">クリスマス・テロル―invisible×inventor</a>』

クリスマス・テロル―invisible×inventor

> python PyAmaAsso.py "4061822691:d"
sys:1: DeprecationWarning: Non-ASCII character '\x81' in file PyAmaAsso.py on line 20, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
<div class="hatena-asin-detail">
 <a href="http://d.hatena.ne.jp/asin/4061822691/diaryexceptio-22"><img src="http://images-jp.amazon.com/images/P/4061822691.09.MZZZZZZZ.jpg" class="hatena-asin-detail-image" alt="クリスマス・テロル―invisible×inventor" title="クリスマス・テロル―invisible×inventor"></a>
 <div class="hatena-asin-detail-info">
  <p class="hatena-asin-detail-title"><a href="http://d.hatena.ne.jp/asin/4061822691/diaryexceptio-22">クリスマス・テロル―invisible×inventor</a></p>
  <ul>
   <li><span class="hatena-asin-detail-label">作者:</span>佐藤友哉</li>
   <li><span class="hatena-asin-detail-label">出版社&frasl;メーカー:</span> 講談社</li>
   <li><span class="hatena-asin-detail-label">発売日:</span> 2002/08</li>
   <li><span class="hatena-asin-detail-label">メディア:</span> 新書</li>
  </ul>
 </div>
 <div class="hatena-asin-detail-foot"></div>
</div>


クリスマス・テロル―invisible×inventor

クリスマス・テロル―invisible×inventor

ソース:

import sys
import urllib2
import string
import re

affiliate = 'diaryexceptio-22' # AmazonアソシエイトID
html_cod = 'euc-jp'            # はてなasinページの文字コード
plat_cod = 'mbcs'              # プラットフォームの文字コード(不要の場合あり)

if __name__=='__main__' :
 # isbn_type = raw_input('ISBN:t or d: ')    # 標準入力からISBNと出力タイプを指定する
 isbn_type = sys.argv[1]                     # 引数からISBNと出力タイプを指定する
 pair = string.split(isbn_type, ':')
 isbn = pair[0]
 type = pair[1]
 url = 'http://d.hatena.ne.jp/asin/' + isbn
 data = unicode(urllib2.urlopen(url).read(), html_cod, 'replace')
 title = re.search('<span class="title">([^>]+)</span>', data).group(1)
 if type == 't':
  title_data = unicode('『<a href="', plat_cod) + url + '/' + affiliate + '">' + title + unicode('</a>』', plat_cod)
  print title_data.encode(sys.getfilesystemencoding())
 elif type == 'd':
  author_s = unicode('作者:<a href="[^"]+" class="keyword">([^>]+)</a>', plat_cod)
  maker_s = unicode('出版社/メーカー:<a href="[^"]+" class="keyword">([^>]+)</a>', plat_cod)
  date_s = unicode('発売日:([^>]+)</p>', plat_cod)
  media_s = unicode('メディア:([^>]+)</p>', plat_cod)
  aut = re.findall(author_s, data)
  mak = re.findall(maker_s, data)
  dat = re.findall(date_s, data)
  med = re.findall(media_s, data)
  author = ''
  if len(aut) > 0 :
   author = aut.pop(0)
  if len(aut) > 0:
   for a in aut:
    author = author + ', ' + a
  maker = ''
  if len(mak) > 0 :
   maker = mak.pop(0)
  if len(mak) > 0:
   for a in mak:
    maker = maker + ', ' + a
  date = ''
  if len(dat) > 0 :
   date = dat.pop(0)
  if len(dat) > 0:
   for a in dat:
    date = date + ', ' + a
  media = ''
  if len(med) > 0 :
   media = med.pop(0)
  if len(med) > 0:
   for a in med:
    media = media + ', ' + a
  detail_data =\
    '<div class="hatena-asin-detail">\n' +\
    '\t<a href="' + url + '/' + affiliate + '">' +\
    '<img src="http://images-jp.amazon.com/images/P/' + isbn + '.09.MZZZZZZZ.jpg" class="hatena-asin-detail-image" alt="' + title + '" title="' + title + '"></a>\n' +\
    '\t<div class="hatena-asin-detail-info">\n' +\
    '\t\t<p class="hatena-asin-detail-title"><a href="' + url + '/' + affiliate + '">' + title + '</a></p>\n' +\
    '\t\t<ul>\n' +\
    unicode('\t\t\t<li><span class="hatena-asin-detail-label">作者:</span> ', plat_cod) + author + '</li>\n' +\
    unicode('\t\t\t<li><span class="hatena-asin-detail-label">出版社&frasl;メーカー:</span> ', plat_cod) + maker + '</li>\n' +\
    unicode('\t\t\t<li><span class="hatena-asin-detail-label">発売日:</span> ', plat_cod) + date + '</li>\n' +\
    unicode('\t\t\t<li><span class="hatena-asin-detail-label">メディア:</span> ', plat_cod) + media + '</li>\n' +\
    '\t\t</ul>\n' +\
    '\t</div>\n' +\
    '\t<div class="hatena-asin-detail-foot"></div>\n' +\
    '</div>'
  print detail_data.encode(sys.getfilesystemencoding())

検索部・文字コード部で戸惑ったのでちょっと時間が掛かった。