Вообщем, простое решение привело меня к Amazon. Вопрос стоял так: чем наполнять сайт, пока нет авторского материала, и не совсем прямым путём пришёл к Амазон. Конечно же брать оттуда контент как дополнительный не стоит, а стоит взять его за основной, а всё что удалось добыть иным путём разместить вместе с ним. Amazon он большой, поэтому здесь сейчас будет краткий обзор, скорей так сказать букмарки с коментами.
Итак с чего начать:
Партнёрская программа
Доступ к API
Полезные доки (из множетсва других)
И наконец песочница, поигратся с запросами
Ещё есть библиотека для питон, но не факт что она заработает в GAE - причём у неё вид страшноватый (огромное количество файлов непонято для чего). Имя всё это и принимая во внимание последнее, решил на написать своюбиблитеку доступа к их базе.
Сначала думал что убдет всё просто, но по факту что-то сразу не пошло, а загвоздка сводилась к тому что они импользуют какой что старый интерфейс OAuth, верней он у них свой, похож просто. Отличие в том сообщение формируют несколько иначе и подписывают не SHA1 а SHA256. Ниже код
Итак с чего начать:
Партнёрская программа
Доступ к API
Полезные доки (из множетсва других)
И наконец песочница, поигратся с запросами
Ещё есть библиотека для питон, но не факт что она заработает в GAE - причём у неё вид страшноватый (огромное количество файлов непонято для чего). Имя всё это и принимая во внимание последнее, решил на написать свою
Сначала думал что убдет всё просто, но по факту что-то сразу не пошло, а загвоздка сводилась к тому что они импользуют какой что старый интерфейс OAuth, верней он у них свой, похож просто. Отличие в том сообщение формируют несколько иначе и подписывают не SHA1 а SHA256. Ниже код
#!/usr/bin/env python
# encoding: utf-8
from google.appengine.api import urlfetch
from urllib import quote, unquote, urlencode
from hmac import new as hmac
from hashlib import sha256
from datetime import datetime
from urlparse import urlparse
import logging
from settings import AMAZON_TAG, AMAZON_KEY, AMAZON_SECRET
try:
import json
except ImportError:
import simplejson as json
def amazon_request(url="", additional_params=None, method=urlfetch.GET):
def _quote(text):
return quote(str(text), "~")
url = url if url else "http://ecs.amazonaws.com/onca/xml"
consumer_key = AMAZON_KEY
consumer_secret = AMAZON_SECRET
params = {"Service": "AWSECommerceService",
"AssociateTag": "AMAZON_TAG",
"AWSAccessKeyId": consumer_key,
"Timestamp": datetime.now().strftime("%Y-%m-%dT%H:%M:%S.000Z")
}
if additional_params:
params.update(additional_params)
for k,v in params.items():
if isinstance(v, unicode):
params[k] = v.encode('utf8')
params_str = "&".join(["%s=%s" % (_quote(k), _quote(params[k])) for k in sorted(params)])
parse_url = urlparse(url)
message = "\n".join(["GET" if method == urlfetch.GET else "POST", parse_url.netloc, parse_url.path, params_str])
params["Signature"] = hmac(consumer_secret, message, sha256).digest().encode("base64").strip()
payload = urlencode(params)
if method == urlfetch.GET:
url = "%s?%s" % (url, payload)
payload = None
rpc = urlfetch.create_rpc(deadline=12.0)
urlfetch.make_fetch_call(rpc, url, method=method, payload=payload)
try:
res = rpc.get_result()
except urlfetch.DownloadError, msg:
logging.error(msg)
logging.error(repr(additional_params))
return None
if res.status_code != 200:
logging.error("amazon_request: status_code")
logging.error(repr(additional_params))
if res.content:
logging.error(res.content)
logging.error("token is %s" % token)
return None
return res.content
P.S.: Если прокатит одна штука, будет статейка про блоггер - уж очень мне их новый дизайн приглянулся, к тому же не надо забывать что это хостинг и притом бесплатный.
Комментариев нет:
Отправить комментарий