python-amazon-ad-api 1.5.7__py3-none-any.whl → 1.5.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ad_api/api/eligibility.py +68 -40
- ad_api/version.py +1 -1
- {python_amazon_ad_api-1.5.7.dist-info → python_amazon_ad_api-1.5.8.dist-info}/METADATA +1 -1
- {python_amazon_ad_api-1.5.7.dist-info → python_amazon_ad_api-1.5.8.dist-info}/RECORD +7 -7
- {python_amazon_ad_api-1.5.7.dist-info → python_amazon_ad_api-1.5.8.dist-info}/WHEEL +0 -0
- {python_amazon_ad_api-1.5.7.dist-info → python_amazon_ad_api-1.5.8.dist-info}/licenses/LICENSE +0 -0
- {python_amazon_ad_api-1.5.7.dist-info → python_amazon_ad_api-1.5.8.dist-info}/top_level.txt +0 -0
ad_api/api/eligibility.py
CHANGED
|
@@ -1,72 +1,100 @@
|
|
|
1
1
|
from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
|
|
2
|
-
import json
|
|
3
2
|
import logging
|
|
4
3
|
|
|
5
4
|
|
|
6
5
|
class Eligibility(Client):
|
|
7
|
-
r""" """
|
|
6
|
+
r"""Product and program eligibility for Amazon ads."""
|
|
8
7
|
|
|
9
8
|
@sp_endpoint('/eligibility/product/list', method='POST')
|
|
10
9
|
def get_eligibility(self, **kwargs) -> ApiResponse:
|
|
11
10
|
r"""
|
|
12
|
-
|
|
13
11
|
get_eligibility(body: (dict, str)) -> ApiResponse
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
Product eligibility for a set of ASINs. Only products sold by the
|
|
14
|
+
merchant behind the profile are accepted. The request carries ASINs,
|
|
15
|
+
but several SKUs may come back for one ASIN, and an ineligible
|
|
16
|
+
product comes back with the reasons rather than being left out.
|
|
16
17
|
|
|
17
18
|
body: | REQUIRED
|
|
19
|
+
'**adType**': *string* [dsp, sb, sd, sp] default sp
|
|
20
|
+
'**productDetailsList**': list of {asin, sku}
|
|
21
|
+
'**locale**': *string*
|
|
22
|
+
"""
|
|
23
|
+
body = Utils.convert_body(kwargs.pop('body'), wrap=False)
|
|
24
|
+
return self._request(kwargs.pop('path'), data=body, params=kwargs)
|
|
18
25
|
|
|
19
|
-
|
|
26
|
+
@sp_endpoint('/eligibility/product/list', method='POST')
|
|
27
|
+
def get_eligibility_assistant(self, asin_list: list, sku_list: list = None,
|
|
28
|
+
ad_type: str = 'sp', locale: str = 'en-GB',
|
|
29
|
+
**kwargs) -> ApiResponse:
|
|
30
|
+
r"""
|
|
31
|
+
get_eligibility_assistant(asin_list, sku_list=None, ad_type='sp', locale='en-GB')
|
|
20
32
|
|
|
21
|
-
|
|
33
|
+
Builds the body for get_eligibility from plain lists.
|
|
22
34
|
|
|
23
|
-
|
|
35
|
+
sku_list is optional. When given it must be a list of the same length
|
|
36
|
+
as asin_list, so each entry pairs by position; a mismatch raises here
|
|
37
|
+
rather than sending a body the service will refuse.
|
|
38
|
+
"""
|
|
24
39
|
|
|
25
|
-
|
|
40
|
+
if not asin_list:
|
|
41
|
+
raise ValueError('asin_list is empty; at least one ASIN is required')
|
|
26
42
|
|
|
27
|
-
|
|
43
|
+
if sku_list is not None:
|
|
44
|
+
if not isinstance(sku_list, list):
|
|
45
|
+
raise TypeError(
|
|
46
|
+
'sku_list must be a list or None, got %s' % type(sku_list).__name__
|
|
47
|
+
)
|
|
48
|
+
if len(sku_list) != len(asin_list):
|
|
49
|
+
raise ValueError(
|
|
50
|
+
'asin_list and sku_list must have the same length: %d != %d'
|
|
51
|
+
% (len(asin_list), len(sku_list))
|
|
52
|
+
)
|
|
28
53
|
|
|
29
|
-
|
|
30
|
-
body = Utils.convert_body(kwargs.pop('body'), wrap=False)
|
|
31
|
-
return self._request(kwargs.pop('path'), data=body, params=kwargs)
|
|
54
|
+
details = []
|
|
32
55
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
56
|
+
for index, asin in enumerate(asin_list):
|
|
57
|
+
entry = {'asin': asin}
|
|
58
|
+
if sku_list is not None:
|
|
59
|
+
entry['sku'] = sku_list[index]
|
|
60
|
+
details.append(entry)
|
|
36
61
|
|
|
37
|
-
|
|
62
|
+
body = {'adType': ad_type, 'productDetailsList': details, 'locale': locale}
|
|
38
63
|
|
|
39
|
-
|
|
64
|
+
logging.debug('get_eligibility_assistant body: %s', body)
|
|
40
65
|
|
|
41
|
-
|
|
42
|
-
| **sku_list**: 'A list of SKU: A seller product identifier'
|
|
43
|
-
| **adType**: *string*, {'description': 'Set to 'sp' to check product eligibility for Sponsored Products advertisements. Set to 'sb' to check product eligibility for Sponsored Brands advertisements. default: sp. [ sp, sb ]'}
|
|
44
|
-
| **locale**': *string*, {'description': 'Set to the locale string in the table below to specify the language in which the response is returned. default: en_GB'}
|
|
66
|
+
return self.get_eligibility(body=body, **kwargs)
|
|
45
67
|
|
|
46
|
-
|
|
68
|
+
@sp_endpoint('/eligibility/programs', method='POST')
|
|
69
|
+
def get_program_eligibility(self, **kwargs) -> ApiResponse:
|
|
70
|
+
r"""
|
|
71
|
+
get_program_eligibility(body: dict) -> ApiResponse
|
|
47
72
|
|
|
48
|
-
|
|
73
|
+
Account level eligibility for the Amazon ad programs, not for a
|
|
74
|
+
product: Sponsored Products, Sponsored Brands, Sponsored Display,
|
|
75
|
+
Stores, DirectToConsumer, Amazon Attribution and the rest.
|
|
49
76
|
|
|
50
|
-
|
|
77
|
+
Two media types are declared:
|
|
51
78
|
|
|
52
|
-
|
|
79
|
+
application/json the default shape, with skipChecks
|
|
80
|
+
application/vnd.programeligibility.v2+json
|
|
81
|
+
v2, with maxResults and nextToken
|
|
53
82
|
|
|
54
|
-
|
|
55
|
-
|
|
83
|
+
Pass media_type='v2' for the paginated one.
|
|
84
|
+
"""
|
|
56
85
|
|
|
57
|
-
|
|
58
|
-
for asin in asin_list:
|
|
59
|
-
asin_dict.append({'asin': asin})
|
|
86
|
+
media_type = kwargs.pop('media_type', None)
|
|
60
87
|
|
|
61
|
-
if
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
else:
|
|
66
|
-
logging.error("No coinciden las listas")
|
|
88
|
+
if media_type == 'v2':
|
|
89
|
+
content_type = 'application/vnd.programeligibility.v2+json'
|
|
90
|
+
else:
|
|
91
|
+
content_type = 'application/json'
|
|
67
92
|
|
|
68
|
-
|
|
69
|
-
required.update({'locale': locale})
|
|
93
|
+
headers = {'Content-Type': content_type, 'Accept': 'application/json'}
|
|
70
94
|
|
|
71
|
-
|
|
72
|
-
|
|
95
|
+
return self._request(
|
|
96
|
+
kwargs.pop('path'),
|
|
97
|
+
data=Utils.convert_body(kwargs.pop('body'), wrap=False),
|
|
98
|
+
params=kwargs,
|
|
99
|
+
headers=headers,
|
|
100
|
+
)
|
ad_api/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.5.
|
|
1
|
+
__version__ = "1.5.8"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
ad_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
ad_api/version.py,sha256=
|
|
2
|
+
ad_api/version.py,sha256=aGdl9Y3XkJkVSG47nNBoRdRr4veFwvs7t9uDlneAtdg,22
|
|
3
3
|
ad_api/api/__init__.py,sha256=M07SD5BRC1L4_PqxLc8cKPI9Iq5zC2jPhkFUeHoh6CM,1632
|
|
4
4
|
ad_api/api/account.py,sha256=CmOvCfHoPWaeTUJvtB0pNoNulZVSz4oMMCKIpVTpHos,2931
|
|
5
5
|
ad_api/api/account_budgets.py,sha256=jFce5eLWAFK3ydjnYR7_Sv7B0-gHTG5bMTx_TcHyy1A,2319
|
|
@@ -9,7 +9,7 @@ ad_api/api/audiences.py,sha256=TQPt4avswFdCodNfQGDGxcJ2mY2LP2BfYvjxP6oJ0qY,3491
|
|
|
9
9
|
ad_api/api/billing.py,sha256=pmBQzejCM8YIsI51KTVunDTVTKMIaox0D2B4acH4w6Y,23526
|
|
10
10
|
ad_api/api/brand_metrics.py,sha256=DVg9qu_-sALxaQhQjRG6Isi_5SYxA5nmTg99jTe5Tls,9237
|
|
11
11
|
ad_api/api/creative_assets.py,sha256=u0bCnioUFpGOQO5Z_MO0ErSLcAgSZB5GWM5wm2oW6L0,9687
|
|
12
|
-
ad_api/api/eligibility.py,sha256=
|
|
12
|
+
ad_api/api/eligibility.py,sha256=LS8CsTXRRVyBdVWOH_3cVybxTXUHahZMsrQHwdmuSxA,3893
|
|
13
13
|
ad_api/api/exports.py,sha256=Y59C99axCAltMgu3gbfzdnoLKjNTsJ7s1z18yzcxzls,2788
|
|
14
14
|
ad_api/api/history.py,sha256=tB4XawmQNxDMolaubDUjuIHtrYXRFuhOr4WCB8OJ1t8,2568
|
|
15
15
|
ad_api/api/insights.py,sha256=b0m2_khfDGskbvn4sidsUpOvV-gr2bsjUup0kSo8HV8,2398
|
|
@@ -124,8 +124,8 @@ ad_api/base/exceptions.py,sha256=9D3M40ZIlLS0fA-aQh1BTWPOW-Nvf0tRhbA85jFnDJ4,438
|
|
|
124
124
|
ad_api/base/helpers.py,sha256=UK7Q13vZ0mNdF54xzfzoGDn2O_cd2yPrK2X4rOzC41c,2334
|
|
125
125
|
ad_api/base/marketplaces.py,sha256=44lvCcluXNpqTprWQ80e3weSQmQbJoWL-WDSOWVbCyQ,4657
|
|
126
126
|
ad_api/base/utils.py,sha256=_qnCBOvyJTLgaZjJzUWTi38GGLHkQszXELs79133Rb4,5618
|
|
127
|
-
python_amazon_ad_api-1.5.
|
|
128
|
-
python_amazon_ad_api-1.5.
|
|
129
|
-
python_amazon_ad_api-1.5.
|
|
130
|
-
python_amazon_ad_api-1.5.
|
|
131
|
-
python_amazon_ad_api-1.5.
|
|
127
|
+
python_amazon_ad_api-1.5.8.dist-info/licenses/LICENSE,sha256=h2rpqlmmLy-4l1tN6KpWAFxx1JEMYeEFrMrZUbx_B_o,1105
|
|
128
|
+
python_amazon_ad_api-1.5.8.dist-info/METADATA,sha256=H-CSkEpq4IYNWM_YPyh57IIeZcPCnxrdrWgtapxHJh8,24150
|
|
129
|
+
python_amazon_ad_api-1.5.8.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
130
|
+
python_amazon_ad_api-1.5.8.dist-info/top_level.txt,sha256=nN9twUos-8pkP514ZwpvRU9YL9L2XyQyHsMQFfudGTU,7
|
|
131
|
+
python_amazon_ad_api-1.5.8.dist-info/RECORD,,
|
|
File without changes
|
{python_amazon_ad_api-1.5.7.dist-info → python_amazon_ad_api-1.5.8.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|