python-amazon-ad-api 1.0.4__py3-none-any.whl → 1.0.6__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/sp/__init__.py +5 -29
- ad_api/api/sp/campaign_negative_targets.py +1 -1
- ad_api/version.py +1 -1
- {python_amazon_ad_api-1.0.4.dist-info → python_amazon_ad_api-1.0.6.dist-info}/METADATA +4 -14
- {python_amazon_ad_api-1.0.4.dist-info → python_amazon_ad_api-1.0.6.dist-info}/RECORD +8 -25
- ad_api/api/dsp/__init__.py +0 -11
- ad_api/api/dsp/access_token_client.py +0 -6
- ad_api/api/dsp/client.py +0 -13
- ad_api/api/dsp/credential_provider.py +0 -15
- ad_api/api/dsp/reports.py +0 -71
- ad_api/api/sp/ad_groups.py +0 -158
- ad_api/api/sp/bid_recommendations.py +0 -81
- ad_api/api/sp/campaign_negative_keywords.py +0 -155
- ad_api/api/sp/campaigns.py +0 -398
- ad_api/api/sp/keywords.py +0 -172
- ad_api/api/sp/negative_keywords.py +0 -164
- ad_api/api/sp/negative_product_targeting.py +0 -163
- ad_api/api/sp/product_ads.py +0 -154
- ad_api/api/sp/product_targeting.py +0 -323
- ad_api/api/sp/reports.py +0 -65
- ad_api/api/sp/snapshots.py +0 -54
- ad_api/api/sp/suggested_keywords.py +0 -86
- {python_amazon_ad_api-1.0.4.dist-info → python_amazon_ad_api-1.0.6.dist-info}/WHEEL +0 -0
- {python_amazon_ad_api-1.0.4.dist-info → python_amazon_ad_api-1.0.6.dist-info}/licenses/LICENSE +0 -0
- {python_amazon_ad_api-1.0.4.dist-info → python_amazon_ad_api-1.0.6.dist-info}/top_level.txt +0 -0
ad_api/api/sp/__init__.py
CHANGED
|
@@ -1,25 +1,13 @@
|
|
|
1
|
-
from .campaigns import Campaigns
|
|
2
1
|
from .campaigns_v3 import CampaignsV3
|
|
3
|
-
from .ad_groups import AdGroups
|
|
4
2
|
from .ad_groups_v3 import AdGroupsV3
|
|
5
3
|
from .keywords_v3 import KeywordsV3
|
|
6
4
|
from .negative_keywords_v3 import NegativeKeywordsV3
|
|
7
5
|
from .negative_product_targeting_v3 import NegativeTargetsV3
|
|
8
|
-
from .product_ads import ProductAds
|
|
9
6
|
from .product_ads_v3 import ProductAdsV3
|
|
10
|
-
from .bid_recommendations import BidRecommendations
|
|
11
7
|
from .bid_recommendations_v3 import BidRecommendationsV3
|
|
12
|
-
from .keywords import Keywords
|
|
13
|
-
from .negative_keywords import NegativeKeywords
|
|
14
|
-
from .campaign_negative_keywords import CampaignNegativeKeywords
|
|
15
8
|
from .campaign_negative_keywords_v3 import CampaignNegativeKeywordsV3
|
|
16
|
-
from .campaign_negative_targets import CampaignNegativeTargets
|
|
17
9
|
from .product_targeting_v3 import TargetsV3
|
|
18
|
-
from .
|
|
19
|
-
from .product_targeting import Targets
|
|
20
|
-
from .negative_product_targeting import NegativeTargets
|
|
21
|
-
from .reports import Reports
|
|
22
|
-
from .snapshots import Snapshots
|
|
10
|
+
from .campaign_negative_targets import CampaignNegativeTargets
|
|
23
11
|
from .budget_rules import BudgetRules
|
|
24
12
|
from .budget_initial_recommendation import InitialBudgetRecommendation
|
|
25
13
|
from .campaings_optimization import CampaignOptimization
|
|
@@ -32,27 +20,16 @@ from .campaigns_budget_usage import CampaignsBudgetUsage
|
|
|
32
20
|
from .schedule_based_bid_optimization import ScheduleBasedBidOptimizationRules
|
|
33
21
|
|
|
34
22
|
__all__ = [
|
|
35
|
-
"Campaigns",
|
|
36
23
|
"CampaignsV3",
|
|
37
|
-
"AdGroups",
|
|
38
24
|
"AdGroupsV3",
|
|
39
|
-
"ProductAds",
|
|
40
|
-
"ProductAdsV3",
|
|
41
|
-
"BidRecommendations",
|
|
42
|
-
"Keywords",
|
|
43
25
|
"KeywordsV3",
|
|
44
|
-
"NegativeKeywords",
|
|
45
26
|
"NegativeKeywordsV3",
|
|
46
|
-
"
|
|
27
|
+
"NegativeTargetsV3",
|
|
28
|
+
"ProductAdsV3",
|
|
29
|
+
"BidRecommendationsV3",
|
|
47
30
|
"CampaignNegativeKeywordsV3",
|
|
48
|
-
"CampaignNegativeTargets",
|
|
49
|
-
"SuggestedKeywords",
|
|
50
|
-
"Targets",
|
|
51
31
|
"TargetsV3",
|
|
52
|
-
"
|
|
53
|
-
"NegativeTargetsV3",
|
|
54
|
-
"Reports",
|
|
55
|
-
"Snapshots",
|
|
32
|
+
"CampaignNegativeTargets",
|
|
56
33
|
"BudgetRules",
|
|
57
34
|
"InitialBudgetRecommendation",
|
|
58
35
|
"CampaignOptimization",
|
|
@@ -63,5 +40,4 @@ __all__ = [
|
|
|
63
40
|
"ProductRecommendations",
|
|
64
41
|
"CampaignsBudgetUsage",
|
|
65
42
|
"ScheduleBasedBidOptimizationRules",
|
|
66
|
-
"BidRecommendationsV3",
|
|
67
43
|
]
|
|
@@ -87,7 +87,7 @@ class CampaignNegativeTargets(Client):
|
|
|
87
87
|
Returns
|
|
88
88
|
ApiResponse
|
|
89
89
|
"""
|
|
90
|
-
json_version = 'application/vnd.
|
|
90
|
+
json_version = 'application/vnd.spCampaignNegativeTargetingClause.v' + str(version) + "+json"
|
|
91
91
|
headers = {"Accept": json_version, "Content-Type": json_version}
|
|
92
92
|
|
|
93
93
|
prefer_value = 'return=representation'
|
ad_api/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.0.
|
|
1
|
+
__version__ = "1.0.6"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-amazon-ad-api
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.6
|
|
4
4
|
Summary: Python wrapper for the Amazon Advertising API
|
|
5
5
|
Home-page: https://github.com/denisneuf/python-amazon-ad-api
|
|
6
6
|
Author: Daniel Alvaro
|
|
@@ -309,22 +309,16 @@ The v1 API lives under `/adsApi/v1/` and is **not** split by product: every call
|
|
|
309
309
|
* [Targets](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/targets.html#ad_api.api.v1.Targets.Targets.query_targets)
|
|
310
310
|
|
|
311
311
|
|
|
312
|
-
### [Modules Available Sponsored Products
|
|
312
|
+
### [Modules Available Sponsored Products](https://python-amazon-ad-api.readthedocs.io/en/latest/sp.html)
|
|
313
313
|
|
|
314
|
-
Warning:
|
|
315
|
-
There is a new version 3 of Sponsored Product API, please check the [migration guide](https://advertising.amazon.com/API/docs/en-us/sponsored-products/v3-migration-guide).
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
### [Modules Available Sponsored Products 3.0](https://python-amazon-ad-api.readthedocs.io/en/latest/sp_v3.html)
|
|
319
|
-
|
|
320
|
-
Warning: `list_campaigns` is deprecated. Use the v1 `query_campaigns` method instead.
|
|
314
|
+
Warning: the campaign, ad group and product ad operations are deprecated in favour of the v1 endpoints. In product targeting only the four CRUD operations are deprecated; its helper endpoints remain supported. Keywords, negative keywords and negative product targeting have no v1 equivalent yet and stay supported.
|
|
321
315
|
|
|
322
316
|
|
|
323
317
|
* [ThemeBased Bid Recommendation](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/bid_recommendations_v3.html)
|
|
324
318
|
* [Keyword Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/ranked_keywords_recommendations.html)
|
|
325
319
|
* [Keywords](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/keywords_v3.html)
|
|
326
320
|
* [Negative Keywords](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/negative_keywords_v3.html)
|
|
327
|
-
* [Product Targeting](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/
|
|
321
|
+
* [Product Targeting](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/product_targeting_v3.html)
|
|
328
322
|
* [Campaign Optimization](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/campaign_optimization_rules.html)
|
|
329
323
|
* [Budget Rules](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/budget_rules.html)
|
|
330
324
|
* [Product Ads](https://python-amazon-ad-api.readthedocs.io/en/latest/sp/product_ads_v3.html)
|
|
@@ -383,10 +377,6 @@ Warning: `list_campaigns` is deprecated. Use the v1 `query_campaigns` method ins
|
|
|
383
377
|
* [Forecasts](https://python-amazon-ad-api.readthedocs.io/en/latest/sd/forecast.html)
|
|
384
378
|
* [Recommendations](https://python-amazon-ad-api.readthedocs.io/en/latest/sd/recommendations.html)
|
|
385
379
|
|
|
386
|
-
### [Modules Available DSP](https://python-amazon-ad-api.readthedocs.io/en/latest/dsp.html)
|
|
387
|
-
|
|
388
|
-
* [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/dsp/reports.html)
|
|
389
|
-
|
|
390
380
|
### Amazon Ads API v1 - basic example
|
|
391
381
|
|
|
392
382
|
```python
|
|
@@ -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=mqMuQB3aqJVPrHHqJMLjqiMKUiJjozc7EPLcX5DpKHg,22
|
|
3
3
|
ad_api/api/__init__.py,sha256=E9c0ZyK4vplMlKKEBF8CV5u7P4uSkTMSQsAuSQu5bfY,1514
|
|
4
4
|
ad_api/api/account.py,sha256=CmOvCfHoPWaeTUJvtB0pNoNulZVSz4oMMCKIpVTpHos,2931
|
|
5
5
|
ad_api/api/advertising_test_account.py,sha256=btOVbdk2tBDmyKSJaQbcIFyzNG8KFJVUmTe4p9xMhpU,1507
|
|
@@ -24,11 +24,6 @@ ad_api/api/reports.py,sha256=gNmDHLULD2uaJgsMpIbCX9kabwhMXRr9WfZBtHUdsOY,6043
|
|
|
24
24
|
ad_api/api/stores.py,sha256=7W3RJKZyZOQ3nHzInvK9FDhWTXCH6Xe9a6dCBatEZ-o,2484
|
|
25
25
|
ad_api/api/stream.py,sha256=JpnF8SKniOAHiEnEq1RPrh6tNy-Q2-8GPBTmnlxEXqQ,2989
|
|
26
26
|
ad_api/api/validation_configurations.py,sha256=V3o06uWGwvA_Ly1x2lAiCk35Wo7DC_k8AtHgMdpm6wU,3830
|
|
27
|
-
ad_api/api/dsp/__init__.py,sha256=fpRoJS94V4UiFkSMCFqoSPAszNEagTiwP9GznPq8qSM,272
|
|
28
|
-
ad_api/api/dsp/access_token_client.py,sha256=KOMoz4pnsyUAHLLOGsRh6yyHX6JY6fvtazZ7NTW4inY,234
|
|
29
|
-
ad_api/api/dsp/client.py,sha256=wm6gw41PkWXINz7SAipookWO1RG4rO9zUFGkS4eOcYc,398
|
|
30
|
-
ad_api/api/dsp/credential_provider.py,sha256=1XjyLn3nhLNn37pYx8IelesI_CMz1e8ax0st_c3vmFI,555
|
|
31
|
-
ad_api/api/dsp/reports.py,sha256=BBaS02PYVn2Z2Lsj2ra0YWikLzfg1ioZH4v8IzN3Ej4,6408
|
|
32
27
|
ad_api/api/sb/__init__.py,sha256=jfU2t4144El09YYXugAge5aSS0f6yhNW0R36tI26JLg,1377
|
|
33
28
|
ad_api/api/sb/ad_creatives_v4.py,sha256=VwBDMnYdf10wtP6bVnTQjOLp7ZzJYueU_q_xN6Yxie4,10490
|
|
34
29
|
ad_api/api/sb/ad_groups.py,sha256=gcCEbkrnndx5WD4gv5ph0MBJxFqTOQIQUXRlOsn0NO0,2860
|
|
@@ -70,39 +65,27 @@ ad_api/api/sd/recommendations.py,sha256=cwNIlvc3bBnmzKCHmV4KFQP_F4Uora5J5VhRKQKX
|
|
|
70
65
|
ad_api/api/sd/reports.py,sha256=qtzUCJdddYLNKJuJJPPPG6WcMsEUweF8ObU2zSsdpbk,4713
|
|
71
66
|
ad_api/api/sd/snapshots.py,sha256=XJ5s0Hd74KpNllIrb4-31_Wh_sLyQTnpZb7eHW-LRHc,2288
|
|
72
67
|
ad_api/api/sd/targeting_recommendations.py,sha256=FmuJxGS5GIXod8iFTS1Ryls_-QFTdf8B3uWL_nne80U,3668
|
|
73
|
-
ad_api/api/sp/__init__.py,sha256=
|
|
74
|
-
ad_api/api/sp/ad_groups.py,sha256=5UIzpc9t1fzUFR4ycVHKOtaR2dkZu40jJJcIbjOZzrE,7926
|
|
68
|
+
ad_api/api/sp/__init__.py,sha256=FSa1GNhjWljF2S3QMXDUtVng3L1YoKeCyXQTro1hYHc,1704
|
|
75
69
|
ad_api/api/sp/ad_groups_v3.py,sha256=UCK0es4KvWcYMtlO01pel52T2ZBaWDgW0iGKYueK7Rg,5294
|
|
76
|
-
ad_api/api/sp/bid_recommendations.py,sha256=vEcW6ZRYAzsRPYraJk0syc3JWK8uq0sIjZY8-KOaXas,3337
|
|
77
70
|
ad_api/api/sp/bid_recommendations_v3.py,sha256=gcbPuunUo29SCynBwpvC0F-F3YE4_oNcFLCIOPXotmI,5366
|
|
78
71
|
ad_api/api/sp/budget_initial_recommendation.py,sha256=xYmrbJ8AFxc4ineLMrQ6cT9kx2PQnalDXElntxAuobA,529
|
|
79
72
|
ad_api/api/sp/budget_recommendations.py,sha256=Ow8NbZyTua_YqNt_-JjM5dUQN8fq7B862WeQASTuXs8,954
|
|
80
73
|
ad_api/api/sp/budget_rules.py,sha256=ZtsCcJlRw-atzmI6HtzS0gj1D9MavnfJOY13wiNIcqM,12770
|
|
81
74
|
ad_api/api/sp/budget_rules_recommendations.py,sha256=MRRAWu3FICGrysMZy_JdNWCbr6E2X4_CsPZ3Fsru_qk,961
|
|
82
75
|
ad_api/api/sp/campaign_consolidated_recommendations.py,sha256=AZS8A0ZH_GRCZ5uExqfaEN8xHhMNEbg6nSI6LkTsP8I,764
|
|
83
|
-
ad_api/api/sp/campaign_negative_keywords.py,sha256=4Jj8CFt4YX36N4YhXDDVabOiPOfCtQ2kYqYoS2Xejoc,6344
|
|
84
76
|
ad_api/api/sp/campaign_negative_keywords_v3.py,sha256=3y5PHA_r6GtBAFbAXiGH5q6ByWsG2alA3DCqdRiaO3w,6592
|
|
85
|
-
ad_api/api/sp/campaign_negative_targets.py,sha256=
|
|
86
|
-
ad_api/api/sp/campaigns.py,sha256=5N8wsB4-tgbOE61f4aNY9VZRz8EZE6zJ8pyLVcSxU14,21790
|
|
77
|
+
ad_api/api/sp/campaign_negative_targets.py,sha256=DqPZozdx8ZtG7FoC6uNWfiHy-Lq0xwDp1sNfgBVeQMs,8318
|
|
87
78
|
ad_api/api/sp/campaigns_budget_usage.py,sha256=njn-Wd3xvbJbL5HMSNQK4RyxCgAflqUgVFo7XhlXmB8,862
|
|
88
79
|
ad_api/api/sp/campaigns_v3.py,sha256=hT8vVmsvOxllgi9f069q4ha_Dy9Dfm12l2x0vXFvke4,7897
|
|
89
80
|
ad_api/api/sp/campaings_optimization.py,sha256=CrH9x-KNTsRc56tn_TCDxDTZIF9pYdqDT48LTepys2w,6673
|
|
90
|
-
ad_api/api/sp/keywords.py,sha256=DR_y4BUrL2P_lSqw3RwHmIBFI634ekbCaEHDuDqyqwI,7851
|
|
91
81
|
ad_api/api/sp/keywords_v3.py,sha256=tvpNY0rzCeLVNGLdN2NNa8Y9DyAH9D3GQUnaEieYpXE,3850
|
|
92
|
-
ad_api/api/sp/negative_keywords.py,sha256=heo7HSnUX3IQhes-oRhWF_gJ2DoQlDCBnT35WecfKGg,7078
|
|
93
82
|
ad_api/api/sp/negative_keywords_v3.py,sha256=EwCTmQZTUvzaXSdbhOvM4WFJTpl6BsbeJ8DyOQ18r_Y,3914
|
|
94
|
-
ad_api/api/sp/negative_product_targeting.py,sha256=Ti7diEJPxF0rqf2h4HtPXFuR4JyYa4ZwUvG6S3-91sk,7706
|
|
95
83
|
ad_api/api/sp/negative_product_targeting_v3.py,sha256=aAVwLialz5qxO1FfYwA1kJ8I6A8wB14-GBHB-i2tOEQ,6647
|
|
96
|
-
ad_api/api/sp/product_ads.py,sha256=n8S91HYNckZkKhjqUOmVdgmAY5InarL8NYFygcqZK5Y,6525
|
|
97
84
|
ad_api/api/sp/product_ads_v3.py,sha256=_-KgP2qbsSLrPlI9N6-v3OeiS30bXp0vLs9vzA1EfjI,5975
|
|
98
85
|
ad_api/api/sp/product_recommendations.py,sha256=vXoZIRqcFc5bo9MUprArKndxcEYe_PuySUnw634Ed4U,499
|
|
99
|
-
ad_api/api/sp/product_targeting.py,sha256=oULvw43bzYD2beR-WboRF0gP6WI-dB0a1Xy5jEp3oY8,15950
|
|
100
86
|
ad_api/api/sp/product_targeting_v3.py,sha256=vk_T0piHzP5uwt8HSHm5hFKP_0sXJD8nbyooPtM-BTs,9567
|
|
101
87
|
ad_api/api/sp/ranked_keywords_recommendations.py,sha256=hVB3-pF0RDgX4ZeeblFk0F_pnRxM3JmulNGdIiKSzI0,13092
|
|
102
|
-
ad_api/api/sp/reports.py,sha256=OMNHL86doMZpbcLixIN1GLf6Mtm_KRxxxs6_vuzMLbU,5381
|
|
103
88
|
ad_api/api/sp/schedule_based_bid_optimization.py,sha256=G8VkS7iP1lTIAxZgbfRCLz8njw1DkVH9HQPOZ63pWNU,2371
|
|
104
|
-
ad_api/api/sp/snapshots.py,sha256=Pl72FpsTRhgA-FQYapTCAqhKLioUMn_Bdru502TS_RE,2969
|
|
105
|
-
ad_api/api/sp/suggested_keywords.py,sha256=cmE8W6q9bIBVt9Zuy1bZKOWErvcIuOyCt8-XAgrhnu8,3553
|
|
106
89
|
ad_api/api/v1/__init__.py,sha256=F2CvJLkWZDG_ykzVnivBb10CvmSWw2lVf-7dy5oH8LM,189
|
|
107
90
|
ad_api/api/v1/ad_groups.py,sha256=pQhCVdve_O6kbL4mBA5bxxhKcKNl_BKqa7z9DvrxwaM,12626
|
|
108
91
|
ad_api/api/v1/ads.py,sha256=YwZGQ-4WuYquleELtwRI9L8w0fGw7FBRejQE-tZ5hKY,7941
|
|
@@ -123,8 +106,8 @@ ad_api/base/exceptions.py,sha256=9D3M40ZIlLS0fA-aQh1BTWPOW-Nvf0tRhbA85jFnDJ4,438
|
|
|
123
106
|
ad_api/base/helpers.py,sha256=naUkDLK466x_OBCPXxMlzRc2nPC6iQ6H_vyUji0MJJ0,2282
|
|
124
107
|
ad_api/base/marketplaces.py,sha256=44lvCcluXNpqTprWQ80e3weSQmQbJoWL-WDSOWVbCyQ,4657
|
|
125
108
|
ad_api/base/utils.py,sha256=_qnCBOvyJTLgaZjJzUWTi38GGLHkQszXELs79133Rb4,5618
|
|
126
|
-
python_amazon_ad_api-1.0.
|
|
127
|
-
python_amazon_ad_api-1.0.
|
|
128
|
-
python_amazon_ad_api-1.0.
|
|
129
|
-
python_amazon_ad_api-1.0.
|
|
130
|
-
python_amazon_ad_api-1.0.
|
|
109
|
+
python_amazon_ad_api-1.0.6.dist-info/licenses/LICENSE,sha256=h2rpqlmmLy-4l1tN6KpWAFxx1JEMYeEFrMrZUbx_B_o,1105
|
|
110
|
+
python_amazon_ad_api-1.0.6.dist-info/METADATA,sha256=VvH1i_eSp9vmSGoy-m0PQ7jwTWu4oZx3dhV-BmpeiEI,20294
|
|
111
|
+
python_amazon_ad_api-1.0.6.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
112
|
+
python_amazon_ad_api-1.0.6.dist-info/top_level.txt,sha256=nN9twUos-8pkP514ZwpvRU9YL9L2XyQyHsMQFfudGTU,7
|
|
113
|
+
python_amazon_ad_api-1.0.6.dist-info/RECORD,,
|
ad_api/api/dsp/__init__.py
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
from .reports import Reports
|
|
2
|
-
from .client import DspClient
|
|
3
|
-
from .access_token_client import DspAccessTokenClient
|
|
4
|
-
from .credential_provider import DspCredentialProvider
|
|
5
|
-
|
|
6
|
-
__all__ = [
|
|
7
|
-
"Reports",
|
|
8
|
-
"DspClient",
|
|
9
|
-
"DspAccessTokenClient",
|
|
10
|
-
"DspCredentialProvider",
|
|
11
|
-
]
|
ad_api/api/dsp/client.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from typing import Dict
|
|
2
|
-
from ad_api.base import Client
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class DspClient(Client):
|
|
6
|
-
@property
|
|
7
|
-
def headers(self) -> Dict[str, str]:
|
|
8
|
-
return {
|
|
9
|
-
'User-Agent': self.user_agent,
|
|
10
|
-
'Amazon-Advertising-API-ClientId': self.credentials['client_id'],
|
|
11
|
-
'Authorization': f'Bearer {self.auth.access_token}',
|
|
12
|
-
'Content-Type': 'application/json',
|
|
13
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from ad_api.base.config import BaseConfig
|
|
2
|
-
from ad_api.base.credential_provider import CredentialProvider
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class DspCredentialProvider(CredentialProvider):
|
|
6
|
-
config_class = BaseConfig
|
|
7
|
-
|
|
8
|
-
def from_env(self):
|
|
9
|
-
account_data = dict(
|
|
10
|
-
refresh_token=self._get_env('AD_API_REFRESH_TOKEN'),
|
|
11
|
-
client_id=self._get_env('AD_API_CLIENT_ID'),
|
|
12
|
-
client_secret=self._get_env('AD_API_CLIENT_SECRET'),
|
|
13
|
-
)
|
|
14
|
-
self.credentials = self.config_class(**account_data)
|
|
15
|
-
return len(self.credentials.check_config()) == 0
|
ad_api/api/dsp/reports.py
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
from ad_api.api.dsp.client import DspClient as Client
|
|
2
|
-
from ad_api.base import sp_endpoint, fill_query_params, ApiResponse, Utils
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class Reports(Client):
|
|
6
|
-
"""Amazon DSP Reports
|
|
7
|
-
|
|
8
|
-
Documentation: https://advertising.amazon.com/API/docs/en-us/dsp-reports-beta-3p/#/Reports
|
|
9
|
-
|
|
10
|
-
Amazon DSP is a demand-side platform (DSP) that enables advertisers to programmatically buy display, video, and audio ads both on and off Amazon. Using Amazon's DSP, you can reach audiences across the web on both Amazon sites and apps as well as through our publishing partners and third-party exchanges. Amazon DSP is available to both advertisers who sell products on Amazon and those who do not.
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
@sp_endpoint('/accounts/{}/dsp/reports', method='POST')
|
|
14
|
-
def post_report(self, dspAccountId, accept='application/vnd.dspcreatereports.v3+json', **kwargs) -> ApiResponse:
|
|
15
|
-
r"""
|
|
16
|
-
Request reports with performance metrics for DSP campaigns.
|
|
17
|
-
|
|
18
|
-
Request creation of a report that includes metrics about your Amazon DSP campaigns. Specify the type of report and the metrics you'd like to include. Note that the value specified for the dimensions field affects the metrics included in the report. See the dimensions field description for more information.
|
|
19
|
-
|
|
20
|
-
Keyword Args
|
|
21
|
-
| path **dspAccountId** (string): Account Identifier you use to access the DSP. This is your DSP Entity ID if you have access to all DSP advertisers within that entity, or your DSP Advertiser ID if you only have access to a specific advertiser ID. [required]
|
|
22
|
-
|
|
23
|
-
Request body
|
|
24
|
-
| **advertiserIds** (list > string): [optional] List of advertisers specified by identifier to include in the report. This should not be present if accountId is advertiser.
|
|
25
|
-
| **endDate** (string): [required] Date in yyyy-MM-dd format. The report contains only metrics generated on the specified date range between startDate and endDate. The maximum date range between startDate and endDate is 31 days. The endDate can be up to 90 days older from today.
|
|
26
|
-
| **format** (string): [optional] Enum: The report file format. [JSON]
|
|
27
|
-
| **orderIds** (list > string): [optional] List of orders specified by identifier to include in the report.
|
|
28
|
-
| **metrics** (list > string): [optional] Specify a list of metrics field names to include in the report. For example: ["impressions", "clickThroughs", "CTR", "eCPC", "totalCost", "eCPM"]. If no metric field names are specified, only the default fields and selected DIMENSION fields are included by default. Specifying default fields returns an error.
|
|
29
|
-
| **type** (string): [optional] Enum: The report type. [CAMPAIGN]
|
|
30
|
-
| **startDate** (string): [required] Date in yyyy-MM-dd format. The report contains only metrics generated on the specified date range between startDate and endDate. The maximum date range between startDate and endDate is 31 days. The startDate can be up to 90 days older from today.
|
|
31
|
-
| **dimensions** (list > string): [optional] List of dimensions to include in the report. Specify one or many comma-delimited strings of dimensions. For example: ["ORDER", "LINE_ITEM", "CREATIVE"]. Adding a dimension in this array determines the aggregation level of the report data and also adds the fields for that dimension in the report. If the list is null or empty, the aggregation of the report data is at ORDER level. The allowed values can be used together in this array as an allowed value in which case the report aggregation will be at the lowest aggregation level and the report will contain the fields for all the dimensions included in the report.
|
|
32
|
-
| **timeUnit** (string): [optional] Enum: Adding timeUnit determines the aggregation level (SUMMARY or DAILY) of the report data. If the timeUnit is null or empty, the aggregation of the report data is at the SUMMARY level and aggregated at the time period specified. DAILY timeUnit is not supported for AUDIENCE report type. The report will contain the fields based on timeUnit. [SUMMARY]
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
ApiResponse
|
|
36
|
-
"""
|
|
37
|
-
path = fill_query_params(kwargs.pop('path'), dspAccountId)
|
|
38
|
-
return self._request(path, data=Utils.convert_body(kwargs.pop('body'), False), headers={'Accept': accept}, params=kwargs)
|
|
39
|
-
|
|
40
|
-
@sp_endpoint('/accounts/{}/dsp/reports/{}', method='GET')
|
|
41
|
-
def get_report(self, dspAccountId, reportId, accept='application/vnd.dspgetreports.v3+json', **kwargs) -> ApiResponse:
|
|
42
|
-
r"""
|
|
43
|
-
Gets a previously requested report specified by identifier.
|
|
44
|
-
|
|
45
|
-
Keyword Args
|
|
46
|
-
| path **dspAccountId** (string): Account Identifier for DSP. Please input DSP entity ID if you want to retrieve reports for a group of advertisers, or input DSP advertiser ID if you want to retrieve reports for a single advertiser. [required]
|
|
47
|
-
| path **reportId** (string): The identifier of the requested report. [required]
|
|
48
|
-
|
|
49
|
-
Returns:
|
|
50
|
-
ApiResponse
|
|
51
|
-
"""
|
|
52
|
-
path = fill_query_params(kwargs.pop('path'), dspAccountId, reportId)
|
|
53
|
-
return self._request(path, headers={'Accept': accept}, params=kwargs)
|
|
54
|
-
|
|
55
|
-
def download_report(self, **kwargs) -> ApiResponse:
|
|
56
|
-
r"""
|
|
57
|
-
Downloads the report previously get report specified by location (this is not part of the official Amazon Advertising API, is a helper method to download the report). Take in mind that a direct download of location returned in get_report will return 401 - Unauthorized.
|
|
58
|
-
|
|
59
|
-
kwarg parameter **file** if not provided will take the default amazon name from path download (add a path with slash / if you want a specific folder, do not add extension as the return will provide the right extension based on format choosed if needed)
|
|
60
|
-
|
|
61
|
-
kwarg parameter **format** if not provided a format will return a url to download the report (this url has a expiration time)
|
|
62
|
-
|
|
63
|
-
Keyword Args
|
|
64
|
-
| **url** (string): The location obatined from get_report [required]
|
|
65
|
-
| **file** (string): The path to save the file if mode is download json, zip or gzip. [optional]
|
|
66
|
-
| **format** (string): The mode to download the report: data (list), raw, url, json, zip, gzip. Default (url) [optional]
|
|
67
|
-
|
|
68
|
-
Returns:
|
|
69
|
-
ApiResponse
|
|
70
|
-
"""
|
|
71
|
-
return self._download(self, params=kwargs, headers={'User-Agent': self.user_agent})
|
ad_api/api/sp/ad_groups.py
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class AdGroups(Client):
|
|
5
|
-
@sp_endpoint('/v2/sp/adGroups', method='POST')
|
|
6
|
-
@Utils.deprecated
|
|
7
|
-
def create_ad_groups(self, **kwargs) -> ApiResponse:
|
|
8
|
-
r"""
|
|
9
|
-
create_ad_groups(self, \*\*kwargs) -> ApiResponse
|
|
10
|
-
|
|
11
|
-
Creates one or more ad groups.
|
|
12
|
-
|
|
13
|
-
body: | REQUIRED {'description': 'An array of ad groups.}'
|
|
14
|
-
|
|
15
|
-
| '**name**': *string*, {'description': 'A name for the ad group'}
|
|
16
|
-
| '**campaignId**': *number*, {'description': 'An existing campaign to which the ad group is associated'}
|
|
17
|
-
| '**defaultBid**': *number($float)*, {'description': 'A bid value for use when no bid is specified for keywords in the ad group', 'minimum': '0.02'}
|
|
18
|
-
| '**state**': *string*, {'description': 'A name for the ad group', 'Enum': '[ enabled, paused, archived ]'}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Returns:
|
|
22
|
-
|
|
23
|
-
ApiResponse
|
|
24
|
-
|
|
25
|
-
"""
|
|
26
|
-
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
|
|
27
|
-
|
|
28
|
-
@sp_endpoint('/v2/sp/adGroups', method='PUT')
|
|
29
|
-
@Utils.deprecated
|
|
30
|
-
def edit_ad_groups(self, **kwargs) -> ApiResponse:
|
|
31
|
-
r"""
|
|
32
|
-
edit_ad_group(self, \*\*kwargs) -> ApiResponse
|
|
33
|
-
|
|
34
|
-
Updates one or more ad groups.
|
|
35
|
-
|
|
36
|
-
body: | REQUIRED {'description': 'An array of ad groups.}'
|
|
37
|
-
|
|
38
|
-
| '**adGroupId**': *number*, {'description': 'The identifier of the ad group.'}
|
|
39
|
-
| '**name**': *string*, {'description': 'The name of the ad group.'}
|
|
40
|
-
| '**defaultBid**': *number($float)*, {'description': 'The bid value used when no bid is specified for keywords in the ad group.', 'minimum': '0.02'}
|
|
41
|
-
| '**state**': *string*, {'description': 'The current resource state', 'Enum': '[ enabled, paused, archived ]'}
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
|
|
45
|
-
ApiResponse
|
|
46
|
-
|
|
47
|
-
"""
|
|
48
|
-
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
|
|
49
|
-
|
|
50
|
-
@sp_endpoint('/v2/sp/adGroups', method='GET')
|
|
51
|
-
@Utils.deprecated
|
|
52
|
-
def list_ad_groups(self, **kwargs) -> ApiResponse:
|
|
53
|
-
r"""
|
|
54
|
-
list_ad_groups(self, \*\*kwargs) -> ApiResponse
|
|
55
|
-
|
|
56
|
-
Gets an array of AdGroup objects for a requested set of Sponsored Display ad groups. Note that the AdGroup object is designed for performance, and includes a small set of commonly used fields to reduce size. If the extended set of fields is required, use the ad group operations that return the AdGroupResponseEx object.
|
|
57
|
-
|
|
58
|
-
query **startIndex**:*integer* | Optional. Sets a cursor into the requested set of campaigns. Use in conjunction with the count parameter to control pagination of the returned array. 0-indexed record offset for the result set, defaults to 0.
|
|
59
|
-
|
|
60
|
-
query **count**:*integer* | Optional. Sets the number of AdGroup objects in the returned array. Use in conjunction with the startIndex parameter to control pagination. For example, to return the first ten ad groups set startIndex=0 and count=10. To return the next ten ad groups, set startIndex=10 and count=10, and so on. Defaults to max page size.
|
|
61
|
-
|
|
62
|
-
query **stateFilter**:*string* | Optional. The returned array is filtered to include only ad groups with state set to one of the values in the specified comma-delimited list. Available values : enabled, paused, archived, enabled, paused, enabled, archived, paused, archived, enabled, paused, archived Default value : enabled, paused, archived
|
|
63
|
-
|
|
64
|
-
query **campaignIdFilter**:*string* | Optional. The returned array is filtered to include only ad groups associated with the campaign identifiers in the specified comma-delimited list.
|
|
65
|
-
|
|
66
|
-
query **adGroupIdFilter**:*string* | Optional. The returned array is filtered to include only ad groups with an identifier specified in the comma-delimited list.
|
|
67
|
-
|
|
68
|
-
query **name**:*string* | Optional. The returned array includes only ad groups with the specified name.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Returns:
|
|
73
|
-
|
|
74
|
-
ApiResponse
|
|
75
|
-
|
|
76
|
-
"""
|
|
77
|
-
return self._request(kwargs.pop('path'), params=kwargs)
|
|
78
|
-
|
|
79
|
-
@sp_endpoint('/v2/sp/adGroups/{}', method='GET')
|
|
80
|
-
@Utils.deprecated
|
|
81
|
-
def get_ad_group(self, adGroupId, **kwargs) -> ApiResponse:
|
|
82
|
-
r"""
|
|
83
|
-
|
|
84
|
-
get_ad_group(self, adGroupId, \*\*kwargs) -> ApiResponse
|
|
85
|
-
|
|
86
|
-
Gets an ad group specified by identifier.
|
|
87
|
-
|
|
88
|
-
path **adGroupId**:*number* | Required. The identifier of an existing ad group.
|
|
89
|
-
|
|
90
|
-
Returns:
|
|
91
|
-
|
|
92
|
-
ApiResponse
|
|
93
|
-
|
|
94
|
-
"""
|
|
95
|
-
return self._request(fill_query_params(kwargs.pop('path'), adGroupId), params=kwargs)
|
|
96
|
-
|
|
97
|
-
@sp_endpoint('/v2/sp/adGroups/{}', method='DELETE')
|
|
98
|
-
@Utils.deprecated
|
|
99
|
-
def delete_ad_group(self, adGroupId, **kwargs) -> ApiResponse:
|
|
100
|
-
r"""
|
|
101
|
-
|
|
102
|
-
delete_ad_group(self, adGroupId, \*\*kwargs) -> ApiResponse
|
|
103
|
-
|
|
104
|
-
Sets the ad group status to archived. Archived entities cannot be made active again. See developer notes for more information.
|
|
105
|
-
|
|
106
|
-
path **adGroupId**:*number* | Required. The identifier of an existing ad group.
|
|
107
|
-
|
|
108
|
-
Returns:
|
|
109
|
-
|
|
110
|
-
ApiResponse
|
|
111
|
-
|
|
112
|
-
"""
|
|
113
|
-
return self._request(fill_query_params(kwargs.pop('path'), adGroupId), params=kwargs)
|
|
114
|
-
|
|
115
|
-
@sp_endpoint('/v2/sp/adGroups/extended', method='GET')
|
|
116
|
-
@Utils.deprecated
|
|
117
|
-
def list_ad_groups_extended(self, **kwargs) -> ApiResponse:
|
|
118
|
-
r"""
|
|
119
|
-
list_ad_groups_extended(self, \*\*kwargs) -> ApiResponse
|
|
120
|
-
|
|
121
|
-
Gets an array of AdGroup objects for a requested set of Sponsored Display ad groups. Note that the AdGroup object is designed for performance, and includes a small set of commonly used fields to reduce size. If the extended set of fields is required, use the ad group operations that return the AdGroupResponseEx object.
|
|
122
|
-
|
|
123
|
-
query: **startIndex**:*integer* | Optional. Sets a cursor into the requested set of campaigns. Use in conjunction with the count parameter to control pagination of the returned array. 0-indexed record offset for the result set, defaults to 0.
|
|
124
|
-
|
|
125
|
-
query **count**:*integer* | Optional. Sets the number of AdGroup objects in the returned array. Use in conjunction with the startIndex parameter to control pagination. For example, to return the first ten ad groups set startIndex=0 and count=10. To return the next ten ad groups, set startIndex=10 and count=10, and so on. Defaults to max page size.
|
|
126
|
-
|
|
127
|
-
query **stateFilter**:*string* | Optional. The returned array is filtered to include only ad groups with state set to one of the values in the specified comma-delimited list. Available values : enabled, paused, archived, enabled, paused, enabled, archived, paused, archived, enabled, paused, archived Default value : enabled, paused, archived
|
|
128
|
-
|
|
129
|
-
query **campaignIdFilter**:*string* | Optional. The returned array is filtered to include only ad groups associated with the campaign identifiers in the specified comma-delimited list.
|
|
130
|
-
|
|
131
|
-
query **adGroupIdFilter**:*string* | Optional. The returned array is filtered to include only ad groups with an identifier specified in the comma-delimited list.
|
|
132
|
-
|
|
133
|
-
query **name**:*string* | Optional. The returned array includes only ad groups with the specified name.
|
|
134
|
-
|
|
135
|
-
Returns:
|
|
136
|
-
|
|
137
|
-
ApiResponse
|
|
138
|
-
|
|
139
|
-
"""
|
|
140
|
-
return self._request(kwargs.pop('path'), params=kwargs)
|
|
141
|
-
|
|
142
|
-
@sp_endpoint('/v2/sp/adGroups/extended/{}', method='GET')
|
|
143
|
-
@Utils.deprecated
|
|
144
|
-
def get_ad_group_extended(self, adGroupId, **kwargs) -> ApiResponse:
|
|
145
|
-
r"""
|
|
146
|
-
|
|
147
|
-
get_ad_group_extended(self, adGroupId, \*\*kwargs) -> ApiResponse
|
|
148
|
-
|
|
149
|
-
Gets an ad group that has extended data fields.
|
|
150
|
-
|
|
151
|
-
path **adGroupId**:*number* | Required. The identifier of an existing ad group.
|
|
152
|
-
|
|
153
|
-
Returns:
|
|
154
|
-
|
|
155
|
-
ApiResponse
|
|
156
|
-
|
|
157
|
-
"""
|
|
158
|
-
return self._request(fill_query_params(kwargs.pop('path'), adGroupId), params=kwargs)
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
from ad_api.base import Client, sp_endpoint, fill_query_params, ApiResponse, Utils
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class BidRecommendations(Client):
|
|
5
|
-
@sp_endpoint('/v2/sp/adGroups/{}/bidRecommendations', method='GET')
|
|
6
|
-
def get_ad_group_bid_recommendations(self, adGroupId, **kwargs) -> ApiResponse:
|
|
7
|
-
r"""
|
|
8
|
-
get_ad_group_bid_recommendations(self, adGroupId, \*\*kwargs) -> ApiResponse
|
|
9
|
-
|
|
10
|
-
Gets a bid recommendation for an ad group.
|
|
11
|
-
|
|
12
|
-
path **adGroupId**:*number* | Required. The identifier of an existing ad group.
|
|
13
|
-
|
|
14
|
-
Returns:
|
|
15
|
-
|
|
16
|
-
ApiResponse
|
|
17
|
-
|
|
18
|
-
"""
|
|
19
|
-
return self._request(fill_query_params(kwargs.pop('path'), adGroupId), params=kwargs)
|
|
20
|
-
|
|
21
|
-
@sp_endpoint('/v2/sp/keywords/{}/bidRecommendations', method='GET')
|
|
22
|
-
def get_keyword_bid_recommendations(self, keywordId, **kwargs) -> ApiResponse:
|
|
23
|
-
r"""
|
|
24
|
-
get_ad_group_bid_recommendations(self, adGroupId, \*\*kwargs) -> ApiResponse
|
|
25
|
-
|
|
26
|
-
Gets a bid recommendation for a keyword.
|
|
27
|
-
|
|
28
|
-
path **keywordId**:*number* | Required. The identifier of an existing keyword.
|
|
29
|
-
|
|
30
|
-
Returns:
|
|
31
|
-
|
|
32
|
-
ApiResponse
|
|
33
|
-
|
|
34
|
-
"""
|
|
35
|
-
return self._request(fill_query_params(kwargs.pop('path'), keywordId), params=kwargs)
|
|
36
|
-
|
|
37
|
-
@sp_endpoint('/v2/sp/keywords/bidRecommendations', method='POST')
|
|
38
|
-
def get_keywords_bid_recommendations(self, **kwargs) -> ApiResponse:
|
|
39
|
-
r"""
|
|
40
|
-
get_keywords_bid_recommendations(self, \*\*kwargs) -> ApiResponse:
|
|
41
|
-
|
|
42
|
-
Gets bid recommendations for keywords.
|
|
43
|
-
|
|
44
|
-
body: | REQUIRED {'description': 'An array of ad groups.}'
|
|
45
|
-
|
|
46
|
-
| '**adGroupId**': *number*, {'description': 'The identifier of the ad group.'}
|
|
47
|
-
| keywords {
|
|
48
|
-
| '**keywords**': *string*, {'description': 'The keyword text.'}
|
|
49
|
-
| '**matchType**': *string*, {'description': 'The type of match', 'Enum': '[ exact, phrase, broad ]'}
|
|
50
|
-
| }
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
Returns:
|
|
54
|
-
|
|
55
|
-
ApiResponse
|
|
56
|
-
|
|
57
|
-
"""
|
|
58
|
-
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
|
|
59
|
-
|
|
60
|
-
@sp_endpoint('/v2/sp/targets/bidRecommendations', method='POST')
|
|
61
|
-
def get_targets_bid_recommendations(self, **kwargs) -> ApiResponse:
|
|
62
|
-
r"""
|
|
63
|
-
get_targets_bid_recommendations(self, \*\*kwargs) -> ApiResponse:
|
|
64
|
-
|
|
65
|
-
Gets a list of bid recommendations for keyword, product, or auto targeting expressions.
|
|
66
|
-
|
|
67
|
-
body: | REQUIRED {'description': 'An array of ad groups.}'
|
|
68
|
-
|
|
69
|
-
| '**adGroupId**': *number*, {'description': 'The ad group identifier.'}
|
|
70
|
-
| expressions {
|
|
71
|
-
| '**value**': *string*, {'description': 'The expression value.'}
|
|
72
|
-
| '**type**': *string*, {'description': 'The type of targeting expression', 'Enum': '[ queryBroadMatches, queryPhraseMatches, queryExactMatches, asinCategorySameAs, asinBrandSameAs, asinPriceLessThan, asinPriceBetween, asinPriceGreaterThan, asinReviewRatingLessThan, asinReviewRatingBetween, asinReviewRatingGreaterThan, asinSameAs, queryBroadRelMatches, queryHighRelMatches, asinSubstituteRelated, asinAccessoryRelated, asinAgeRangeSameAs, asinGenreSameAs, asinIsPrimeShippingEligible ]'}
|
|
73
|
-
| }
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
Returns:
|
|
77
|
-
|
|
78
|
-
ApiResponse
|
|
79
|
-
|
|
80
|
-
"""
|
|
81
|
-
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs)
|