80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
|
|
import requests
|
||
|
|
from flask import json
|
||
|
|
from flask_ask import logger
|
||
|
|
|
||
|
|
class Product():
|
||
|
|
'''
|
||
|
|
Object model for inSkillProducts and methods to access products.
|
||
|
|
|
||
|
|
{"inSkillProducts":[
|
||
|
|
{"productId":"amzn1.adg.product.your_product_id",
|
||
|
|
"referenceName":"product_name",
|
||
|
|
"type":"ENTITLEMENT",
|
||
|
|
"name":"product name",
|
||
|
|
"summary":"This product has helped many people.",
|
||
|
|
"entitled":"NOT_ENTITLED",
|
||
|
|
"purchasable":"NOT_PURCHASABLE"}],
|
||
|
|
"nextToken":null,
|
||
|
|
"truncated":false}
|
||
|
|
|
||
|
|
'''
|
||
|
|
|
||
|
|
def __init__(self, apiAccessToken):
|
||
|
|
self.token = apiAccessToken
|
||
|
|
self.product_list = self.query()
|
||
|
|
|
||
|
|
|
||
|
|
def query(self):
|
||
|
|
# Information required to invoke the API is available in the session
|
||
|
|
apiEndpoint = "https://api.amazonalexa.com"
|
||
|
|
apiPath = "/v1/users/~current/skills/~current/inSkillProducts"
|
||
|
|
token = "bearer " + self.token
|
||
|
|
language = "en-US" #self.event.request.locale
|
||
|
|
|
||
|
|
url = apiEndpoint + apiPath
|
||
|
|
headers = {
|
||
|
|
"Content-Type" : 'application/json',
|
||
|
|
"Accept-Language" : language,
|
||
|
|
"Authorization" : token
|
||
|
|
}
|
||
|
|
#Call the API
|
||
|
|
res = requests.get(url, headers=headers)
|
||
|
|
logger.info('PRODUCTS:' + '*' * 80)
|
||
|
|
logger.info(res.status_code)
|
||
|
|
logger.info(res.text)
|
||
|
|
if res.status_code == 200:
|
||
|
|
data = json.loads(res.text)
|
||
|
|
return data['inSkillProducts']
|
||
|
|
else:
|
||
|
|
return None
|
||
|
|
|
||
|
|
def list(self):
|
||
|
|
""" return list of purchasable and not entitled products"""
|
||
|
|
mylist = []
|
||
|
|
for prod in self.product_list:
|
||
|
|
if self.purchasable(prod) and not self.entitled(prod):
|
||
|
|
mylist.append(prod)
|
||
|
|
return mylist
|
||
|
|
|
||
|
|
def purchasable(self, product):
|
||
|
|
""" return True if purchasable product"""
|
||
|
|
return 'PURCHASABLE' == product['purchasable']
|
||
|
|
|
||
|
|
def entitled(self, product):
|
||
|
|
""" return True if entitled product"""
|
||
|
|
return 'ENTITLED' == product['entitled']
|
||
|
|
|
||
|
|
|
||
|
|
def productId(self, name):
|
||
|
|
print(self.product_list)
|
||
|
|
for prod in self.product_list:
|
||
|
|
if name == prod['name'].lower():
|
||
|
|
return prod['productId']
|
||
|
|
return None
|
||
|
|
|
||
|
|
def productName(self, id):
|
||
|
|
for prod in self.product_list:
|
||
|
|
if id == prod['productId']:
|
||
|
|
return prod['name']
|
||
|
|
return None
|