Data_ETL.py 89 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516
  1. from sync_amz_data.public.amz_ad_client import SPClient, Account, SBClient, SDClient, BaseClient
  2. import pandas as pd
  3. import numpy as np
  4. from dateutil.parser import parse
  5. pd.set_option('display.max_columns', None)
  6. import warnings
  7. warnings.filterwarnings('ignore')
  8. pd.set_option('expand_frame_repr', False)
  9. from datetime import datetime, timezone, timedelta
  10. import clickhouse_connect
  11. import pytz
  12. from typing import Literal
  13. class Common_ETLMethod(BaseClient):
  14. def timeZone(self):
  15. rel = self.get_profilesInfo()
  16. profileId = int(self.profile_id)
  17. df_info = pd.json_normalize(rel)
  18. return df_info.query("profileId==@profileId")['timezone'].values[0]
  19. def clickhouse_connect(self):
  20. conn = clickhouse_connect.get_client(host='3.93.43.158', port=8123, username='root',
  21. password='6f0eyLuiVn3slzbGWpzI')
  22. return conn
  23. def columnsName_modify(self, df):
  24. """
  25. 列名.换_,设置全部小写
  26. """
  27. df.columns = [i.replace(".", "_").lower() for i in df.columns]
  28. return df
  29. def time_stamp_convert(self, df, time_columns: list):
  30. """
  31. 时间戳转换为utc
  32. """
  33. for time_column in time_columns:
  34. df[time_column] = pd.to_datetime(df[time_column] * 1000000).map(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))
  35. df[time_columns] = df[time_columns].astype("datetime64")
  36. return df
  37. def TZ_Deal(self, df, time_columns):
  38. """
  39. TZ时间格式转换为utc
  40. """
  41. for time_column in time_columns:
  42. df[time_column] = df[time_column].map(lambda x: parse(x).strftime("%Y-%m-%d %H:%M:%S"))
  43. df[time_columns] = df[time_columns].astype("datetime64")
  44. return df
  45. def placement_segmentsplit(self, df, segment):
  46. """
  47. 拆分placement与percentage列
  48. """
  49. df[segment] = df[segment].astype("string")
  50. df[segment + str("_percentage")] = df[segment].str.extract("'percentage':.+([\d\.]{1,}),").astype('float32')
  51. df[segment + str("_placement")] = df[segment].str.extract("'placement':.+'(.+)'")
  52. df.replace(['nan', 'Nan', 'NaN'], np.nan, inplace=True)
  53. df.drop(columns=[segment], inplace=True)
  54. return df
  55. def expression_split(self, df, segment):
  56. """
  57. 拆分type,value列
  58. """
  59. df[segment] = df[segment].astype("string")
  60. df[segment + str("_type")] = df[segment].str.extract(r"'type':\s{0,1}'(.+?)',")
  61. df[segment + str("_value")] = df[segment].str.extract(r"'value':\s{0,1}[\'\[\{](.+)'")
  62. df[segment + str("_value")] = df[segment + str("_value")].map(
  63. lambda x: x if pd.isna(x) or "," not in x else "[{" + x + "'}]").str.replace("{{","{")
  64. df.replace(['nan', 'Nan', 'NaN'], np.nan, inplace=True)
  65. df.drop(columns=[segment], inplace=True)
  66. return df
  67. def get_keyOvalue(self,expressions, result: Literal['value', 'type']):
  68. if expressions not in [None,pd.NA,pd.NaT]:
  69. if len(expressions) > 1:
  70. return [i[result] for i in expressions]
  71. if len(expressions) == 1:
  72. sub_ = expressions[0][result]
  73. if type(sub_) == str:
  74. return sub_
  75. elif type(sub_) == list:
  76. return [i[result] for i in sub_]
  77. else:
  78. return expressions
  79. else:
  80. return '-'
  81. def id_type_trans(self,df):
  82. id_columns = [i for i in df.columns if 'id' in i.lower() and 'bid' not in i.lower()]
  83. df[id_columns] = df[id_columns].fillna(-1).applymap(lambda x: round(int(x), 0)).astype("string")
  84. df[id_columns] = df[id_columns].applymap(lambda x: '' if x == '-1' else x)
  85. return df
  86. def type_trans(self, df_report, columns: list, timeZone_: str, extra_columns: list = []):
  87. # 添加字段
  88. df_report['profileId'] = self.profile_id
  89. df_report['timeZone'] = timeZone_
  90. df_needManualAdd = [i for i in columns if i not in df_report.columns]
  91. if len(df_needManualAdd) > 0:
  92. df_report[df_needManualAdd] = None
  93. columns.extend(extra_columns)
  94. columns.append("date") if "date" not in columns else columns
  95. columns.extend(["timeZone", "profileId"])
  96. # 修改字段类型
  97. df_report = self.id_type_trans(df_report)
  98. df_report['date'] = df_report['date'].astype("datetime64")
  99. # df_report[df_report.select_dtypes('O').columns] = df_report[df_report.select_dtypes('O').columns].astype('string')
  100. toFloat = [i for i in columns if 'sales' in i.lower() or 'percent' in i.lower() or 'video' in i.lower()]
  101. if len(toFloat) > 0:
  102. df_report[toFloat] = df_report[toFloat].applymap(lambda x: np.nan if pd.isna(x) or x == '' else float(x))
  103. df_report.fillna(np.nan, inplace=True)
  104. # print(df_report[columns].info())
  105. # df_report.to_excel("df.xlsx")
  106. return df_report
  107. class Acount_ETL(Account, Common_ETLMethod):
  108. def portfolio_ETL(self):
  109. list_portfolio = self.get_portfolios()
  110. df_portfolio = pd.json_normalize(list_portfolio)
  111. # print(self.columnsName_modify(df_portfolio))
  112. return self.columnsName_modify(df_portfolio)
  113. class SP_ETL(SPClient, Common_ETLMethod):
  114. def campaigns_ETL(self):
  115. list_campaign_SP = list(self.iter_campaigns(**{"includeExtendedDataFields": True}))
  116. df_campaign = pd.json_normalize(list_campaign_SP)
  117. df_campaign = self.placement_segmentsplit(df_campaign, "dynamicBidding.placementBidding")
  118. df_campaign = self.TZ_Deal(df_campaign, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  119. # print(df_campaign)
  120. return self.columnsName_modify(df_campaign)
  121. def adGroups_ETL(self):
  122. list_adGroup_SP = list(self.iter_adGroups(**{"includeExtendedDataFields": True}))
  123. df_adGroup_SP = pd.json_normalize(list_adGroup_SP)
  124. df_adGroup_SP = self.TZ_Deal(df_adGroup_SP,
  125. ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  126. return self.columnsName_modify(df_adGroup_SP)
  127. def ads_ETL(self):
  128. list_adId_SP = list(self.iter_ads(**{"includeExtendedDataFields": True}))
  129. df_adId_SP = pd.json_normalize(list_adId_SP)
  130. df_adId_SP = self.TZ_Deal(df_adId_SP, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  131. return self.columnsName_modify(df_adId_SP)
  132. def keywords_ETL(self):
  133. list_keywords_SP = list(self.iter_keywords(**{"includeExtendedDataFields": True}))
  134. df_keywords_SP = pd.json_normalize(list_keywords_SP)
  135. df_keywords_SP = self.TZ_Deal(df_keywords_SP,
  136. ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  137. return self.columnsName_modify(df_keywords_SP)
  138. def targets_ETL(self):
  139. list_targets = list(self.iter_targets())
  140. df_targets = pd.json_normalize(list_targets)
  141. df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  142. return self.columnsName_modify(df_targets)
  143. def budget_ETL(self, campaign_ids: list):
  144. list_budget = self.get_budget(campaign_ids=campaign_ids)['success']
  145. df_budget = pd.json_normalize(list_budget)
  146. df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
  147. return self.columnsName_modify(df_budget)
  148. def reportV3_campaign_spCampaignsETL(self, conn, params={}):
  149. timeZone_ = self.timeZone()
  150. today = datetime.now(tz=pytz.timezone(timeZone_))
  151. if params.get("endDate") == None:
  152. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  153. if params.get("startDate") == None:
  154. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  155. "%Y-%m-%d")
  156. params['reportType'] = "spCampaigns"
  157. params['columns'] = [
  158. 'campaignName', 'campaignId', 'campaignStatus', 'campaignBudgetAmount', 'campaignBudgetType',
  159. 'campaignRuleBasedBudgetAmount', 'campaignApplicableBudgetRuleId', 'campaignApplicableBudgetRuleName',
  160. 'campaignBudgetCurrencyCode', 'topOfSearchImpressionShare',
  161. 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
  162. 'purchasesSameSku1d',
  163. 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
  164. 'unitsSoldClicks7d',
  165. 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
  166. 'attributedSalesSameSku1d',
  167. 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
  168. 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
  169. 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
  170. 'clickThroughRate', 'spend'
  171. ] # 'startDate', 'endDate',
  172. params['groupby'] = ['campaign']
  173. params['timeUnit'] = 'DAILY'
  174. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  175. columns=params['columns'], startDate=params['startDate'],
  176. endDate=params['endDate'], reportType=params['reportType'])
  177. # print(list_report)
  178. df_report = pd.json_normalize(list_report)
  179. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  180. conn.insert_df("AmazonReport.SP_spCampaigns_campaignV3", df_report[params['columns']])
  181. print("插入完成")
  182. return df_report[params['columns']]
  183. def reportV3_adGroup_spCampaignsETL(self, conn, params={}):
  184. timeZone_ = self.timeZone()
  185. today = datetime.now(tz=pytz.timezone(timeZone_))
  186. if params.get("endDate") == None:
  187. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  188. if params.get("startDate") == None:
  189. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  190. "%Y-%m-%d")
  191. params['reportType'] = "spCampaigns"
  192. params['columns'] = [
  193. 'adGroupName', 'adGroupId', 'adStatus',
  194. 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
  195. 'purchasesSameSku1d',
  196. 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
  197. 'unitsSoldClicks7d',
  198. 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
  199. 'attributedSalesSameSku1d',
  200. 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
  201. 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
  202. 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
  203. 'clickThroughRate', 'spend'
  204. ] # 'startDate', 'endDate',
  205. params['groupby'] = ['adGroup']
  206. params['timeUnit'] = 'DAILY'
  207. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  208. columns=params['columns'], startDate=params['startDate'],
  209. endDate=params['endDate'], reportType=params['reportType'])
  210. # print(list_report)
  211. df_report = pd.json_normalize(list_report)
  212. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  213. conn.insert_df("AmazonReport.SP_spCampaigns_adGroupV3", df_report[params['columns']])
  214. print("插入完成")
  215. return df_report[params['columns']]
  216. #
  217. def reportV3_campaignPlacement_spCampaignsETL(self, conn, params={}):
  218. timeZone_ = self.timeZone()
  219. today = datetime.now(tz=pytz.timezone(timeZone_))
  220. if params.get("endDate") == None:
  221. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  222. if params.get("startDate") == None:
  223. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  224. "%Y-%m-%d")
  225. params['reportType'] = "spCampaigns"
  226. params['columns'] = [
  227. 'placementClassification',
  228. 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
  229. 'purchasesSameSku1d',
  230. 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
  231. 'unitsSoldClicks7d',
  232. 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
  233. 'attributedSalesSameSku1d',
  234. 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
  235. 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
  236. 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
  237. 'clickThroughRate', 'spend'
  238. ] # 'startDate', 'endDate',
  239. params['groupby'] = ['campaignPlacement']
  240. params['timeUnit'] = 'DAILY'
  241. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  242. columns=params['columns'], startDate=params['startDate'],
  243. endDate=params['endDate'], reportType=params['reportType'])
  244. # print(list_report)
  245. df_report = pd.json_normalize(list_report)
  246. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  247. conn.insert_df("AmazonReport.SP_spCampaigns_placementV3", df_report[params['columns']])
  248. print("插入完成")
  249. return df_report[params['columns']]
  250. def reportV3_targeting_spTargetingETL(self, conn, params={}):
  251. timeZone_ = self.timeZone()
  252. today = datetime.now(tz=pytz.timezone(timeZone_))
  253. if params.get("endDate") == None:
  254. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  255. if params.get("startDate") == None:
  256. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  257. "%Y-%m-%d")
  258. params['reportType'] = "spTargeting"
  259. params['columns'] = [
  260. 'adKeywordStatus',
  261. 'impressions', 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'purchases1d', 'purchases7d',
  262. 'purchases14d',
  263. 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
  264. 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
  265. 'sales14d',
  266. 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
  267. 'attributedSalesSameSku30d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d', 'unitsSoldSameSku14d',
  268. 'unitsSoldSameSku30d',
  269. 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d', 'salesOtherSku7d',
  270. 'unitsSoldOtherSku7d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d', 'keywordId',
  271. 'keyword',
  272. 'campaignBudgetCurrencyCode', 'date', 'portfolioId', 'campaignName', 'campaignId',
  273. 'campaignBudgetType', 'campaignBudgetAmount', 'campaignStatus', 'keywordBid', 'adGroupName', 'adGroupId',
  274. 'keywordType',
  275. 'matchType', 'targeting', 'topOfSearchImpressionShare'
  276. ] # 'startDate', 'endDate',
  277. params['groupby'] = ['targeting']
  278. params['timeUnit'] = 'DAILY'
  279. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  280. columns=params['columns'], startDate=params['startDate'],
  281. endDate=params['endDate'], reportType=params['reportType'])
  282. # print(list_report)
  283. df_report = pd.json_normalize(list_report)
  284. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  285. conn.insert_df("AmazonReport.SP_spTargeting_targetingV3", df_report[params['columns']])
  286. print("插入完成")
  287. return df_report[params['columns']]
  288. def reportV3_searchTerm_spSearchTermETL(self, conn, params={}):
  289. timeZone_ = self.timeZone()
  290. today = datetime.now(tz=pytz.timezone(timeZone_))
  291. if params.get("endDate") == None:
  292. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  293. if params.get("startDate") == None:
  294. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  295. "%Y-%m-%d")
  296. params['reportType'] = "spSearchTerm"
  297. params['columns'] = [
  298. 'adKeywordStatus',
  299. 'impressions', 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'purchases1d', 'purchases7d',
  300. 'purchases14d',
  301. 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
  302. 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
  303. 'sales14d',
  304. 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
  305. 'attributedSalesSameSku30d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d', 'unitsSoldSameSku14d',
  306. 'unitsSoldSameSku30d',
  307. 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d', 'salesOtherSku7d',
  308. 'unitsSoldOtherSku7d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d', 'keywordId',
  309. 'keyword',
  310. 'campaignBudgetCurrencyCode', 'date', 'portfolioId', 'searchTerm', 'campaignName', 'campaignId',
  311. 'campaignBudgetType', 'campaignBudgetAmount', 'campaignStatus', 'keywordBid', 'adGroupName', 'adGroupId',
  312. 'keywordType',
  313. 'matchType', 'targeting'
  314. ] # 'startDate', 'endDate',
  315. params['groupby'] = ['searchTerm']
  316. params['timeUnit'] = 'DAILY'
  317. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  318. columns=params['columns'], startDate=params['startDate'],
  319. endDate=params['endDate'], reportType=params['reportType'])
  320. # print(list_report)
  321. df_report = pd.json_normalize(list_report)
  322. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  323. conn.insert_df("AmazonReport.SP_spSearchTerm_searchTermV3", df_report[params['columns']])
  324. print("插入完成")
  325. return df_report[params['columns']]
  326. def reportV3_advertiser_spAdvertisedProductETL(self, conn, params={}):
  327. timeZone_ = self.timeZone()
  328. today = datetime.now(tz=pytz.timezone(timeZone_))
  329. if params.get("endDate") == None:
  330. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  331. if params.get("startDate") == None:
  332. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  333. "%Y-%m-%d")
  334. params['reportType'] = "spAdvertisedProduct"
  335. params['columns'] = [
  336. 'date', 'campaignName', 'campaignId', 'adGroupName', 'adGroupId', 'adId', 'portfolioId', 'impressions',
  337. 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'spend', 'campaignBudgetCurrencyCode',
  338. 'campaignBudgetAmount',
  339. 'campaignBudgetType', 'campaignStatus', 'advertisedAsin', 'advertisedSku', 'purchases1d', 'purchases7d',
  340. 'purchases14d',
  341. 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
  342. 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
  343. 'sales14d',
  344. 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
  345. 'attributedSalesSameSku30d', 'salesOtherSku7d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d',
  346. 'unitsSoldSameSku14d',
  347. 'unitsSoldSameSku30d', 'unitsSoldOtherSku7d', 'kindleEditionNormalizedPagesRead14d',
  348. 'kindleEditionNormalizedPagesRoyalties14d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d'
  349. ] # 'startDate', 'endDate',
  350. params['groupby'] = ['advertiser']
  351. params['timeUnit'] = 'DAILY'
  352. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  353. columns=params['columns'], startDate=params['startDate'],
  354. endDate=params['endDate'], reportType=params['reportType'])
  355. # print(list_report)
  356. df_report = pd.json_normalize(list_report)
  357. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  358. conn.insert_df("AmazonReport.SP_spAdvertisedProduct_advertiserV3", df_report[params['columns']])
  359. print("插入完成")
  360. return df_report[params['columns']]
  361. def reportV3_asin_spPurchasedProductETL(self, conn, params={}):
  362. timeZone_ = self.timeZone()
  363. today = datetime.now(tz=pytz.timezone(timeZone_))
  364. if params.get("endDate") == None:
  365. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  366. if params.get("startDate") == None:
  367. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  368. "%Y-%m-%d")
  369. params['reportType'] = "spPurchasedProduct"
  370. params['columns'] = [
  371. 'date', 'portfolioId', 'campaignName', 'campaignId', 'adGroupName', 'adGroupId', 'keywordId', 'keyword',
  372. 'keywordType', 'advertisedAsin', 'purchasedAsin', 'advertisedSku', 'campaignBudgetCurrencyCode',
  373. 'matchType',
  374. 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
  375. 'sales14d',
  376. 'sales30d', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d', 'unitsSoldOtherSku1d',
  377. 'unitsSoldOtherSku7d',
  378. 'unitsSoldOtherSku14d', 'unitsSoldOtherSku30d', 'salesOtherSku1d', 'salesOtherSku7d', 'salesOtherSku14d',
  379. 'salesOtherSku30d', 'purchasesOtherSku1d', 'purchasesOtherSku7d', 'purchasesOtherSku14d',
  380. 'purchasesOtherSku30d',
  381. 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d'
  382. ] # 'startDate', 'endDate',
  383. params['groupby'] = ['asin']
  384. params['timeUnit'] = 'DAILY'
  385. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  386. columns=params['columns'], startDate=params['startDate'],
  387. endDate=params['endDate'], reportType=params['reportType'])
  388. # print(list_report)
  389. df_report = pd.json_normalize(list_report)
  390. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  391. conn.insert_df("AmazonReport.SP_spPurchasedProduct_asinV3", df_report[params['columns']])
  392. print("插入完成")
  393. return df_report[params['columns']]
  394. class SB_ETL(SBClient, Common_ETLMethod):
  395. def campaigns_ETL(self):
  396. list_campaign_SB = list(self.iter_campaigns(**{"includeExtendedDataFields": True}))
  397. df_campaign = pd.json_normalize(list_campaign_SB)
  398. df_campaign = self.placement_segmentsplit(df_campaign, "bidding.bidAdjustmentsByPlacement")
  399. df_campaign = self.time_stamp_convert(df_campaign, ["extendedData.creationDate", "extendedData.lastUpdateDate"])
  400. # print(df_campaign)
  401. return self.columnsName_modify(df_campaign)
  402. def adGroups_ETL(self):
  403. list_adGroup_SB = list(self.iter_adGroups(**{"includeExtendedDataFields": True}))
  404. df_adGroup_SP = pd.json_normalize(list_adGroup_SB)
  405. df_adGroup_SP = self.time_stamp_convert(df_adGroup_SP,
  406. ["extendedData.creationDate", "extendedData.lastUpdateDate"])
  407. return self.columnsName_modify(df_adGroup_SP)
  408. def ads_ETL(self):
  409. list_adId_SB = list(self.iter_ads(**{"includeExtendedDataFields": True}))
  410. df_adId_SP = pd.json_normalize(list_adId_SB)
  411. df_adId_SP = self.time_stamp_convert(df_adId_SP, ["extendedData.creationDate", "extendedData.lastUpdateDate"])
  412. return self.columnsName_modify(df_adId_SP)
  413. def keywords_ETL(self):
  414. list_keywords_SB = [row for _ in list(self.iter_keywords()) for row in _]
  415. df_keywords_SP = pd.json_normalize(list_keywords_SB)
  416. return self.columnsName_modify(df_keywords_SP)
  417. def targets_ETL(self):
  418. list_targets = list(self.iter_targets())
  419. df_targets = pd.json_normalize(list_targets)
  420. # df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  421. # df_targets = self.expression_split(df_targets, "resolvedExpressions")
  422. df_targets = self.id_type_trans(df_targets)
  423. df_targets['resolvedExpressions_type'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'type'))
  424. df_targets['resolvedExpressions_value'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'value'))
  425. return self.columnsName_modify(df_targets)
  426. def budget_ETL(self, campaign_ids: list):
  427. list_budget = self.get_budget(campaignIds=campaign_ids)['success']
  428. df_budget = pd.json_normalize(list_budget)
  429. df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
  430. return self.columnsName_modify(df_budget)
  431. def reportV3_purchasedAsinRecord_ETL(self, conn, params={}):
  432. timeZone_ = self.timeZone()
  433. today = datetime.now(tz=pytz.timezone(timeZone_))
  434. if params.get("endDate") == None:
  435. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  436. if params.get("startDate") == None:
  437. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  438. "%Y-%m-%d")
  439. params['reportType'] = "sbPurchasedProduct"
  440. params['columns'] = [
  441. 'campaignId', 'adGroupId', 'date', 'campaignBudgetCurrencyCode', 'campaignName', 'adGroupName',
  442. 'attributionType', 'purchasedAsin', 'productName', 'productCategory', 'sales14d', 'orders14d',
  443. 'unitsSold14d',
  444. 'newToBrandSales14d', 'newToBrandPurchases14d', 'newToBrandUnitsSold14d', 'newToBrandSalesPercentage14d',
  445. 'newToBrandPurchasesPercentage14d', 'newToBrandUnitsSoldPercentage14d'
  446. ] # 'startDate', 'endDate',
  447. params['groupby'] = ['purchasedAsin']
  448. params['timeUnit'] = 'DAILY'
  449. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  450. columns=params['columns'], startDate=params['startDate'],
  451. endDate=params['endDate'], reportType=params['reportType'])
  452. # print(list_report)
  453. df_report = pd.json_normalize(list_report)
  454. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  455. conn.insert_df("AmazonReport.SB_sbPurchasedProduct_asinV3", df_report[params['columns']])
  456. print("插入完成")
  457. return df_report[params['columns']]
  458. def reportV2_campaignsRecord_ETL(self, conn, params={}):
  459. timeZone_ = self.timeZone()
  460. today = datetime.now(tz=pytz.timezone(timeZone_))
  461. if params.get("date") == None:
  462. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  463. params['record_type'] = 'campaigns'
  464. if params.get('metrics') == None:
  465. params['metrics'] = ['campaignId','campaignName', 'impressions', 'clicks', 'cost',
  466. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName',
  467. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  468. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  469. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  470. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  471. 'campaignBudgetType','campaignRuleBasedBudget','campaignStatus',
  472. 'dpv14d','topOfSearchImpressionShare','unitsSold14d'
  473. ]
  474. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  475. metrics=params['metrics'])
  476. # print(list_report)
  477. df_report = pd.json_normalize(list_report)
  478. date = datetime.strptime(params['date'], '%Y%m%d')
  479. df_report['date'] = date
  480. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  481. conn.insert_df("AmazonReport.SB_campaignsV2", df_report[params['metrics']])
  482. print("插入完成")
  483. return df_report[params['metrics']]
  484. def reportV2_campaignsVideo_ETL(self, conn, params={}):
  485. timeZone_ = self.timeZone()
  486. today = datetime.now(tz=pytz.timezone(timeZone_))
  487. if params.get("date") == None:
  488. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  489. params['record_type'] = 'campaigns'
  490. if params.get('metrics') == None:
  491. params['metrics'] = [
  492. 'campaignId','campaignName','impressions','clicks','cost',
  493. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  494. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  495. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  496. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  497. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  498. 'currency','dpv14d','topOfSearchImpressionShare','vctr','vtr','video5SecondViewRate','video5SecondViews',
  499. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  500. 'viewableImpressions'
  501. ]
  502. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  503. metrics=params['metrics'], creative_type='video')
  504. # print(list_report)
  505. df_report = pd.json_normalize(list_report)
  506. date = datetime.strptime(params['date'], '%Y%m%d')
  507. df_report['date'] = date
  508. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  509. conn.insert_df("AmazonReport.SB_campaignsVideoV2", df_report[params['metrics']])
  510. print("插入完成")
  511. # print(df_report[params['metrics']].info())
  512. return df_report[params['metrics']]
  513. def reportV2_placementRecord_ETL(self, conn, params={}):
  514. timeZone_ = self.timeZone()
  515. today = datetime.now(tz=pytz.timezone(timeZone_))
  516. if params.get("date") == None:
  517. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  518. params['record_type'] = 'campaigns'
  519. if params.get('metrics') == None:
  520. params['metrics'] = ['campaignId','campaignName','impressions','clicks','cost',
  521. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName',
  522. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  523. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  524. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d',
  525. 'attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  526. 'campaignBudget','campaignBudgetType','campaignRuleBasedBudget','campaignStatus','dpv14d','unitsSold14d'
  527. ] # 'placement'
  528. # print(date)
  529. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  530. metrics=params['metrics'], segment='placement')
  531. df_report = pd.json_normalize(list_report)
  532. date = datetime.strptime(params['date'], '%Y%m%d')
  533. df_report['date'] = date
  534. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['placement'])
  535. conn.insert_df("AmazonReport.SB_campaignsPlacementV2", df_report[params['metrics']])
  536. print("插入完成")
  537. # print(df_report[params['metrics']].info())
  538. return df_report[params['metrics']]
  539. def reportV2_placementVideo_ETL(self, conn, params={}):
  540. timeZone_ = self.timeZone()
  541. today = datetime.now(tz=pytz.timezone(timeZone_))
  542. if params.get("date") == None:
  543. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  544. params['record_type'] = 'campaigns'
  545. if params.get('metrics') == None:
  546. params['metrics'] = [
  547. 'campaignId','campaignName','impressions','clicks','cost',
  548. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  549. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  550. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  551. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  552. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  553. 'currency','dpv14d','vctr','vtr','video5SecondViewRate','video5SecondViews','videoCompleteViews',
  554. 'videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  555. ] # 'placement'
  556. # print(date)
  557. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  558. metrics=params['metrics'], segment='placement', creative_type='video')
  559. # print(list_report)
  560. df_report = pd.json_normalize(list_report)
  561. date = datetime.strptime(params['date'], '%Y%m%d')
  562. df_report['date'] = date
  563. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['placement'])
  564. # print(df_report.info())
  565. conn.insert_df("AmazonReport.SB_campaignsPlacementVideoV2", df_report[params['metrics']])
  566. print("插入完成")
  567. return df_report[params['metrics']]
  568. def reportV2_adGroupsRecord_ETL(self, conn, params={}):
  569. timeZone_ = self.timeZone()
  570. today = datetime.now(tz=pytz.timezone(timeZone_))
  571. if params.get("date") == None:
  572. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  573. params['record_type'] = 'adGroups'
  574. if params.get('metrics') == None:
  575. params['metrics'] = [
  576. 'campaignId','campaignName','adGroupId','adGroupName','impressions', 'clicks', 'cost',
  577. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  578. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  579. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  580. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  581. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  582. 'dpv14d','unitsSold14d',
  583. ] #
  584. # print(date)
  585. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  586. metrics=params['metrics'])
  587. # print(list_report)
  588. df_report = pd.json_normalize(list_report)
  589. date = datetime.strptime(params['date'], '%Y%m%d')
  590. df_report['date'] = date
  591. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  592. # print(df_report.info())
  593. conn.insert_df("AmazonReport.SB_adGroupsV2", df_report[params['metrics']])
  594. print("插入完成")
  595. return df_report[params['metrics']]
  596. def reportV2_adGroupsVideo_ETL(self, conn, params={}):
  597. timeZone_ = self.timeZone()
  598. today = datetime.now(tz=pytz.timezone(timeZone_))
  599. if params.get("date") == None:
  600. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  601. params['record_type'] = 'adGroups'
  602. if params.get('metrics') == None:
  603. params['metrics'] = [
  604. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  605. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  606. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  607. 'attributedOrdersNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  608. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  609. 'campaignBudget','campaignBudgetType','campaignStatus','currency','vctr','vtr','video5SecondViewRate',
  610. 'video5SecondViews','videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews',
  611. 'videoUnmutes','viewableImpressions','dpv14d'
  612. ] #
  613. # print(date)
  614. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  615. metrics=params['metrics'], creative_type='video')
  616. # print(list_report)
  617. df_report = pd.json_normalize(list_report)
  618. date = datetime.strptime(params['date'], '%Y%m%d')
  619. df_report['date'] = date
  620. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  621. # print(df_report.info())
  622. conn.insert_df("AmazonReport.SB_adGroupsVideoV2", df_report[params['metrics']])
  623. print("插入完成")
  624. return df_report[params['metrics']]
  625. def reportV2_targetsRecord_ETL(self, conn, params={}):
  626. timeZone_ = self.timeZone()
  627. today = datetime.now(tz=pytz.timezone(timeZone_))
  628. if params.get("date") == None:
  629. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  630. params['record_type'] = 'targets'
  631. if params.get('metrics') == None:
  632. params['metrics'] = [
  633. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions', 'clicks', 'cost',
  634. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  635. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  636. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  637. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  638. 'campaignBudgetType','campaignStatus','dpv14d','targetingExpression','targetingType',
  639. 'topOfSearchImpressionShare','unitsSold14d'
  640. ] #
  641. # print(date)
  642. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  643. metrics=params['metrics'])
  644. # print(list_report)
  645. df_report = pd.json_normalize(list_report)
  646. date = datetime.strptime(params['date'], '%Y%m%d')
  647. df_report['date'] = date
  648. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  649. # print(df_report.info())
  650. conn.insert_df("AmazonReport.SB_targetsV2", df_report[params['metrics']])
  651. print("插入完成")
  652. return df_report[params['metrics']]
  653. def reportV2_targetsVideo_ETL(self, conn, params={}):
  654. timeZone_ = self.timeZone()
  655. today = datetime.now(tz=pytz.timezone(timeZone_))
  656. if params.get("date") == None:
  657. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  658. params['record_type'] = 'targets'
  659. if params.get('metrics') == None:
  660. params['metrics'] = [
  661. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  662. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  663. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  664. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  665. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  666. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  667. 'currency','dpv14d','targetingExpression','targetingType','topOfSearchImpressionShare','vctr','vtr',
  668. 'video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews','videoMidpointViews',
  669. 'videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  670. ] #
  671. # print(date)
  672. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  673. metrics=params['metrics'], creative_type='video')
  674. # print(list_report)
  675. df_report = pd.json_normalize(list_report)
  676. date = datetime.strptime(params['date'], '%Y%m%d')
  677. df_report['date'] = date
  678. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  679. # print(df_report.info())
  680. conn.insert_df("AmazonReport.SB_targetsVideoV2", df_report[params['metrics']])
  681. print("插入完成")
  682. return df_report[params['metrics']]
  683. def reportV2_keywordsRecord_ETL(self, conn, params={}):
  684. timeZone_ = self.timeZone()
  685. today = datetime.now(tz=pytz.timezone(timeZone_))
  686. if params.get("date") == None:
  687. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  688. params['record_type'] = 'keywords'
  689. if params.get('metrics') == None:
  690. params['metrics'] = [
  691. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  692. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName','attributedConversions14d',
  693. 'attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d',
  694. 'attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  695. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  696. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  697. 'campaignBudgetType','campaignRuleBasedBudget','campaignStatus','dpv14d','keywordBid','keywordStatus',
  698. 'matchType','searchTermImpressionRank','searchTermImpressionShare','topOfSearchImpressionShare','unitsSold14d',
  699. ] #
  700. # print(date)
  701. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  702. metrics=params['metrics'])
  703. # print(list_campaigns_report)
  704. df_report = pd.json_normalize(list_report)
  705. date = datetime.strptime(params['date'], '%Y%m%d')
  706. df_report['date'] = date
  707. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  708. # print(df_report.info())
  709. conn.insert_df("AmazonReport.SB_keywordsV2", df_report[params['metrics']])
  710. print("插入完成")
  711. return df_report[params['metrics']]
  712. def reportV2_keywordsVideo_ETL(self, conn, params={}):
  713. timeZone_ = self.timeZone()
  714. today = datetime.now(tz=pytz.timezone(timeZone_))
  715. if params.get("date") == None:
  716. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  717. params['record_type'] = 'keywords'
  718. if params.get('metrics') == None:
  719. params['metrics'] = [
  720. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  721. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  722. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  723. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  724. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  725. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType',
  726. 'campaignStatus','currency','dpv14d','keywordBid','keywordStatus','matchType','topOfSearchImpressionShare',
  727. 'vctr','vtr','video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews',
  728. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  729. ] #
  730. # print(date)
  731. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  732. metrics=params['metrics'], creative_type='video')
  733. # print(list_campaigns_report)
  734. df_report = pd.json_normalize(list_report)
  735. date = datetime.strptime(params['date'], '%Y%m%d')
  736. df_report['date'] = date
  737. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  738. # print(df_report.info())
  739. conn.insert_df("AmazonReport.SB_keywordsVideoV2", df_report[params['metrics']])
  740. print("插入完成")
  741. return df_report[params['metrics']]
  742. def reportV2_searchtermsRecord_ETL(self, conn, params={}):
  743. timeZone_ = self.timeZone()
  744. today = datetime.now(tz=pytz.timezone(timeZone_))
  745. if params.get("date") == None:
  746. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  747. params['record_type'] = 'keywords'
  748. if params.get('metrics') == None:
  749. params['metrics'] = [
  750. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  751. 'attributedConversions14d','attributedSales14d','campaignBudget','campaignBudgetType','campaignStatus','keywordBid',
  752. 'keywordStatus','matchType','searchTermImpressionRank','searchTermImpressionShare'
  753. ] #
  754. # print(date)
  755. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  756. metrics=params['metrics'], segment='query')
  757. # print(list_report)
  758. df_report = pd.json_normalize(list_report)
  759. date = datetime.strptime(params['date'], '%Y%m%d')
  760. df_report['date'] = date
  761. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['query'])
  762. # print(df_report.info())
  763. conn.insert_df("AmazonReport.SB_keywordsQueryV2", df_report[params['metrics']])
  764. print("插入完成")
  765. return df_report[params['metrics']]
  766. def reportV2_searchtermsVideo_ETL(self, conn, params={}):
  767. timeZone_ = self.timeZone()
  768. today = datetime.now(tz=pytz.timezone(timeZone_))
  769. if params.get("date") == None:
  770. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  771. params['record_type'] = 'keywords'
  772. if params.get('metrics') == None:
  773. params['metrics'] = [
  774. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions','clicks','cost',
  775. 'attributedConversions14d','attributedSales14d','campaignBudget','campaignBudgetType','campaignStatus',
  776. 'keywordBid','keywordStatus','matchType','vctr','vtr','video5SecondViewRate','video5SecondViews',
  777. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews',
  778. 'videoUnmutes','viewableImpressions',
  779. ] # 'query','currency'
  780. # print(date)
  781. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  782. metrics=params['metrics'], segment='query', creative_type='video')
  783. # print(list_report)
  784. df_report = pd.json_normalize(list_report)
  785. date = datetime.strptime(params['date'], '%Y%m%d')
  786. df_report['date'] = date
  787. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['query'])
  788. # print(df_report.info())
  789. conn.insert_df("AmazonReport.SB_keywordsQueryVideoV2", df_report[params['metrics']])
  790. print("插入完成")
  791. return df_report[params['metrics']]
  792. def reportV2_adsRecord_ETL(self, conn, params={}):
  793. timeZone_ = self.timeZone()
  794. today = datetime.now(tz=pytz.timezone(timeZone_))
  795. if params.get("date") == None:
  796. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  797. params['record_type'] = 'ads'
  798. if params.get('metrics') == None:
  799. params['metrics'] = [
  800. 'campaignId','campaignName','adGroupId','adGroupName','adId','impressions','clicks','cost',
  801. 'applicableBudgetRuleId','applicableBudgetRuleName','attributedBrandedSearches14d','attributedConversions14d',
  802. 'attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d',
  803. 'attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  804. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  805. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  806. 'campaignBudget','campaignBudgetType','campaignRuleBasedBudget','campaignStatus',
  807. 'dpv14d','unitsSold14d','vctr',
  808. ] #
  809. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  810. metrics=params['metrics'])
  811. df_report = pd.json_normalize(list_report)
  812. date = datetime.strptime(params['date'], '%Y%m%d')
  813. df_report['date'] = date
  814. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  815. conn.insert_df("AmazonReport.SB_adsV2", df_report[params['metrics']])
  816. print("插入完成")
  817. return df_report[params['metrics']]
  818. def reportV2_adsVideo_ETL(self, conn, params={}):
  819. timeZone_ = self.timeZone()
  820. today = datetime.now(tz=pytz.timezone(timeZone_))
  821. if params.get("date") == None:
  822. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  823. params['record_type'] = 'ads'
  824. if params.get('metrics') == None:
  825. params['metrics'] = [
  826. 'campaignId','campaignName','adGroupId','adGroupName','adId', 'impressions', 'clicks', 'cost',
  827. 'applicableBudgetRuleId','applicableBudgetRuleName','attributedBrandedSearches14d',
  828. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  829. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  830. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d',
  831. 'attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  832. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType',
  833. 'campaignRuleBasedBudget','campaignStatus','currency','dpv14d','vctr','vtr',
  834. 'video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews',
  835. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  836. ] #
  837. # print(date)
  838. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  839. metrics=params['metrics'], creative_type='video')
  840. # print(list_report)
  841. df_report = pd.json_normalize(list_report)
  842. date = datetime.strptime(params['date'], '%Y%m%d')
  843. df_report['date'] = date
  844. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=[])
  845. # print(df_report.info())
  846. conn.insert_df("AmazonReport.SB_adsVideoV2", df_report[params['metrics']])
  847. print("插入完成")
  848. return df_report[params['metrics']]
  849. class SD_ETL(SDClient, Common_ETLMethod):
  850. def campaigns_ETL(self):
  851. list_campaign_SD = self.get_campaigns()
  852. df_campaign = pd.json_normalize(list_campaign_SD)
  853. df_campaign['startDate'] = df_campaign['startDate'].map(
  854. lambda x: datetime.strptime(x, "%Y%m%d").date()) # 转换为标准时间格式
  855. df_campaign['portfolioId'] = df_campaign['portfolioId'].fillna(-1).astype("int64") # 将portfolio列为空的填充为-1
  856. return self.columnsName_modify(df_campaign)
  857. def adGroups_ETL(self, **param):
  858. list_adGroups_SD = [row for _ in list(self.iter_adGroups(**param)) for row in _]
  859. df_adGroups_SD = pd.json_normalize(list_adGroups_SD)
  860. tactic = {"T00020": "Contextual targeting", "T00030": "Audiences targeting"}
  861. df_adGroups_SD["tactic_type"] = df_adGroups_SD['tactic'].map(tactic) # T00020、T00030解释字段
  862. return self.columnsName_modify(df_adGroups_SD)
  863. def ads_ETL(self):
  864. list_ads_SD = [row for _ in list(self.iter_ads()) for row in _]
  865. df_ads_SD = pd.json_normalize(list_ads_SD)
  866. return self.columnsName_modify(df_ads_SD)
  867. def targets_ETL(self, **param):
  868. list_targets = [row for _ in list(self.iter_targets(**param)) for row in _]
  869. df_targets = pd.json_normalize(list_targets)
  870. # df_targets = self.expression_split(df_targets, "resolvedExpression")
  871. df_targets = self.id_type_trans(df_targets)
  872. df_targets['resolvedExpressions_type'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'type'))
  873. df_targets['resolvedExpressions_value'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'value'))
  874. return self.columnsName_modify(df_targets)
  875. def budget_ETL(self, campaignsIds: list):
  876. list_budget = self.get_budget(campaignIds=campaignsIds)['success']
  877. df_budget = pd.json_normalize(list_budget)
  878. df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
  879. return self.columnsName_modify(df_budget)
  880. campaigns_metrics = [
  881. 'campaignId','campaignName','impressions','clicks','cost','attributedBrandedSearches14d',
  882. 'attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  883. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU',
  884. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  885. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU',
  886. 'attributedSales7d','attributedSales7dSameSKU','attributedSales14d',
  887. 'attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  888. 'attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d',
  889. 'attributedUnitsOrdered14d','attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d',
  890. 'avgImpressionsFrequency','campaignBudget','campaignStatus','cumulativeReach','costType',
  891. 'currency','vctr','vtr', 'viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  892. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d',
  893. 'viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d',
  894. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  895. ]
  896. def reportV2_campaignsRecord_t2_ETL(self, conn, params={}):
  897. timeZone_ = self.timeZone()
  898. today = datetime.now(tz=pytz.timezone(timeZone_))
  899. if params.get("date") == None:
  900. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  901. params['record_type'] = 'campaigns'
  902. if params.get('metrics') == None:
  903. params['metrics'] = self.campaigns_metrics
  904. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  905. metrics=params['metrics'], tactic="T00020")
  906. # print(list_report)
  907. df_report = pd.json_normalize(list_report)
  908. date = datetime.strptime(params['date'], '%Y%m%d')
  909. df_report['date'] = date
  910. df_report['tactic'] = 'Contextual targeting'
  911. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  912. conn.insert_df("AmazonReport.SD_campaignsV2", df_report[params['metrics']])
  913. print("插入完成")
  914. return df_report[params['metrics']]
  915. def reportV2_campaignsRecord_t3_ETL(self, conn, params={}):
  916. timeZone_ = self.timeZone()
  917. today = datetime.now(tz=pytz.timezone(timeZone_))
  918. if params.get("date") == None:
  919. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  920. params['record_type'] = 'campaigns'
  921. if params.get('metrics') == None:
  922. params['metrics'] = self.campaigns_metrics
  923. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  924. metrics=params['metrics'], tactic="T00030")
  925. df_report = pd.json_normalize(list_report)
  926. date = datetime.strptime(params['date'], '%Y%m%d')
  927. df_report['date'] = date
  928. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  929. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  930. conn.insert_df("AmazonReport.SD_campaignsV2", df_report[params['metrics']])
  931. print("插入完成")
  932. return df_report[params['metrics']]
  933. adGroups_metrics = [
  934. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  935. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU',
  936. 'attributedConversions7d','attributedConversions7dSameSKU','attributedConversions14d',
  937. 'attributedConversions14dSameSKU','attributedConversions30d','attributedConversions30dSameSKU',
  938. 'attributedDetailPageView14d','attributedOrdersNewToBrand14d','attributedSales1d',
  939. 'attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU',
  940. 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  941. 'attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d','attributedUnitsOrdered30d',
  942. 'attributedUnitsOrderedNewToBrand14d','avgImpressionsFrequency','bidOptimization','cumulativeReach',
  943. 'currency','vctr','vtr', 'viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  944. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d',
  945. 'viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d',
  946. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  947. ]
  948. def reportV2_adGroupsRecord_t2_ETL(self, conn, params={}):
  949. timeZone_ = self.timeZone()
  950. today = datetime.now(tz=pytz.timezone(timeZone_))
  951. if params.get("date") == None:
  952. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  953. params['record_type'] = 'adGroups'
  954. if params.get('metrics') == None:
  955. params['metrics'] = self.adGroups_metrics
  956. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  957. metrics=params['metrics'], tactic="T00020")
  958. df_report = pd.json_normalize(list_report)
  959. date = datetime.strptime(params['date'], '%Y%m%d')
  960. df_report['date'] = date
  961. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  962. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  963. conn.insert_df("AmazonReport.SD_adGroupsV2", df_report[params['metrics']])
  964. print("插入完成")
  965. return df_report[params['metrics']]
  966. def reportV2_adGroupsRecord_t3_ETL(self, conn, params={}):
  967. timeZone_ = self.timeZone()
  968. today = datetime.now(tz=pytz.timezone(timeZone_))
  969. if params.get("date") == None:
  970. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  971. params['record_type'] = 'adGroups'
  972. if params.get('metrics') == None:
  973. params['metrics'] = self.adGroups_metrics
  974. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  975. metrics=params['metrics'], tactic="T00020")
  976. df_report = pd.json_normalize(list_report)
  977. date = datetime.strptime(params['date'], '%Y%m%d')
  978. df_report['date'] = date
  979. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  980. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  981. # print(df_report.info())
  982. conn.insert_df("AmazonReport.SD_adGroupsV2", df_report[params['metrics']])
  983. print("插入完成")
  984. return df_report[params['metrics']]
  985. productAds_metrics = [
  986. 'campaignId','campaignName','adGroupId','adGroupName','adId','asin','sku', 'impressions', 'clicks','cost',
  987. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  988. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU',
  989. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  990. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU','attributedSales7d',
  991. 'attributedSales7dSameSKU','attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  992. 'attributedSales30dSameSKU','attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d',
  993. 'attributedUnitsOrdered14d','attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','avgImpressionsFrequency',
  994. 'cumulativeReach','currency','vctr','vtr','viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  995. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  996. 'viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d','videoCompleteViews','videoFirstQuartileViews',
  997. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  998. ]
  999. def reportV2_productAds_t2_ETL(self, conn, params={}):
  1000. timeZone_ = self.timeZone()
  1001. today = datetime.now(tz=pytz.timezone(timeZone_))
  1002. if params.get("date") == None:
  1003. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1004. params['record_type'] = 'productAds'
  1005. if params.get('metrics') == None:
  1006. params['metrics'] = self.productAds_metrics
  1007. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1008. metrics=params['metrics'], tactic="T00020")
  1009. # print(list_report)
  1010. df_report = pd.json_normalize(list_report)
  1011. date = datetime.strptime(params['date'], '%Y%m%d')
  1012. df_report['date'] = date
  1013. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1014. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  1015. conn.insert_df("AmazonReport.SD_adsV2", df_report[params['metrics']])
  1016. print("插入完成")
  1017. return df_report[params['metrics']]
  1018. def reportV2_productAds_t3_ETL(self, conn, params={}):
  1019. timeZone_ = self.timeZone()
  1020. today = datetime.now(tz=pytz.timezone(timeZone_))
  1021. if params.get("date") == None:
  1022. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1023. params['record_type'] = 'productAds'
  1024. if params.get('metrics') == None:
  1025. params['metrics'] = self.productAds_metrics
  1026. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1027. metrics=params['metrics'], tactic="T00030")
  1028. # print(list_report)
  1029. df_report = pd.json_normalize(list_report)
  1030. date = datetime.strptime(params['date'], '%Y%m%d')
  1031. df_report['date'] = date
  1032. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1033. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  1034. # print(df_report.info())
  1035. conn.insert_df("AmazonReport.SD_adsV2", df_report[params['metrics']])
  1036. print("插入完成")
  1037. return df_report[params['metrics']]
  1038. targets_metrics = [
  1039. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  1040. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  1041. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU','attributedConversions30d',
  1042. 'attributedConversions30dSameSKU','attributedDetailPageView14d','attributedOrdersNewToBrand14d',
  1043. 'attributedSales1d','attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU',
  1044. 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  1045. 'attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d',
  1046. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','currency','targetingExpression','targetingType',
  1047. 'vctr','vtr','viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d',
  1048. 'viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  1049. 'viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d','videoCompleteViews',
  1050. 'videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1051. ]
  1052. def reportV2_targets_t2_ETL(self, conn, params={}):
  1053. timeZone_ = self.timeZone()
  1054. today = datetime.now(tz=pytz.timezone(timeZone_))
  1055. if params.get("date") == None:
  1056. params["date"] = (
  1057. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1058. "%Y%m%d")
  1059. params['record_type'] = 'targets'
  1060. if params.get('metrics') == None:
  1061. params['metrics'] = self.targets_metrics
  1062. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1063. metrics=params['metrics'], tactic="T00020")
  1064. # print(list_report)
  1065. df_report = pd.json_normalize(list_report)
  1066. date = datetime.strptime(params['date'], '%Y%m%d')
  1067. df_report['date'] = date
  1068. df_report['tactic'] = 'Contextual targeting' # {"T00020":"","T00030":"Audiences targeting"}
  1069. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  1070. # print(df_report[params['metrics']].info())
  1071. conn.insert_df("AmazonReport.SD_targetsV2", df_report[params['metrics']])
  1072. print("插入完成")
  1073. return df_report[params['metrics']]
  1074. def reportV2_targets_t3_ETL(self, conn, params={}):
  1075. timeZone_ = self.timeZone()
  1076. today = datetime.now(tz=pytz.timezone(timeZone_))
  1077. if params.get("date") == None:
  1078. params["date"] = (
  1079. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1080. "%Y%m%d")
  1081. params['record_type'] = 'targets'
  1082. if params.get('metrics') == None:
  1083. params['metrics'] = self.targets_metrics
  1084. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1085. metrics=params['metrics'], tactic="T00030")
  1086. # print(list_report)
  1087. df_report = pd.json_normalize(list_report)
  1088. date = datetime.strptime(params['date'], '%Y%m%d')
  1089. df_report['date'] = date
  1090. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1091. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  1092. # print(df_report.info())
  1093. conn.insert_df("AmazonReport.SD_targetsV2", df_report[params['metrics']])
  1094. print("插入完成")
  1095. return df_report[params['metrics']]
  1096. asins_metrics = [
  1097. 'campaignId','campaignName','adGroupId','adGroupName','asin','sku','attributedConversions1dOtherSKU',
  1098. 'attributedConversions7dOtherSKU','attributedConversions14dOtherSKU','attributedConversions30dOtherSKU',
  1099. 'attributedSales1dOtherSKU','attributedSales7dOtherSKU','attributedSales14dOtherSKU','attributedSales30dOtherSKU',
  1100. 'attributedUnitsOrdered1dOtherSKU','attributedUnitsOrdered7dOtherSKU','attributedUnitsOrdered14dOtherSKU',
  1101. 'attributedUnitsOrdered30dOtherSKU','currency','otherAsin','viewAttributedUnitsOrdered1dOtherSKU',
  1102. 'viewAttributedUnitsOrdered7dOtherSKU','viewAttributedUnitsOrdered14dOtherSKU','viewAttributedUnitsOrdered30dOtherSKU',
  1103. 'viewAttributedSales1dOtherSKU','viewAttributedSales7dOtherSKU','viewAttributedSales14dOtherSKU',
  1104. 'viewAttributedSales30dOtherSKU','viewAttributedConversions1dOtherSKU','viewAttributedConversions7dOtherSKU',
  1105. 'viewAttributedConversions14dOtherSKU','viewAttributedConversions30dOtherSKU',
  1106. ]
  1107. def reportV2_asins_t2_ETL(self, conn, params={}):
  1108. timeZone_ = self.timeZone()
  1109. today = datetime.now(tz=pytz.timezone(timeZone_))
  1110. if params.get("date") == None:
  1111. params["date"] = (
  1112. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1113. "%Y%m%d")
  1114. params['record_type'] = 'asins'
  1115. if params.get('metrics') == None:
  1116. params['metrics'] = self.asins_metrics
  1117. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1118. metrics=params['metrics'], tactic="T00020")
  1119. # print(list_report)
  1120. df_report = pd.json_normalize(list_report)
  1121. date = datetime.strptime(params['date'], '%Y%m%d')
  1122. df_report['date'] = date
  1123. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1124. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  1125. # print(df_report.info())
  1126. conn.insert_df("AmazonReport.SD_asinsV2", df_report[params['metrics']])
  1127. print("插入完成")
  1128. return df_report[params['metrics']]
  1129. def reportV2_asins_t3_ETL(self, conn, params={}):
  1130. timeZone_ = self.timeZone()
  1131. today = datetime.now(tz=pytz.timezone(timeZone_))
  1132. if params.get("date") == None:
  1133. params["date"] = (
  1134. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1135. "%Y%m%d")
  1136. params['record_type'] = 'asins'
  1137. if params.get('metrics') == None:
  1138. params['metrics'] = self.asins_metrics
  1139. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1140. metrics=params['metrics'], tactic="T00030")
  1141. # print(list_report)
  1142. df_report = pd.json_normalize(list_report)
  1143. date = datetime.strptime(params['date'], '%Y%m%d')
  1144. df_report['date'] = date
  1145. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1146. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['tactic'])
  1147. conn.insert_df("AmazonReport.SD_asinsV2", df_report[params['metrics']])
  1148. print("插入完成")
  1149. return df_report[params['metrics']]
  1150. campaigns_MT_metrics = [
  1151. 'campaignId','campaignName','impressions','clicks','cost','attributedBrandedSearches14d',
  1152. 'attributedConversions1d','attributedConversions1dSameSKU', 'attributedConversions7d',
  1153. 'attributedConversions7dSameSKU', 'attributedConversions14d','attributedConversions14dSameSKU',
  1154. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  1155. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU', 'attributedSales7d',
  1156. 'attributedSales7dSameSKU', 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  1157. 'attributedSales30dSameSKU','attributedSalesNewToBrand14d',
  1158. 'attributedUnitsOrdered1d', 'attributedUnitsOrdered7d', 'attributedUnitsOrdered14d',
  1159. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','campaignBudget',
  1160. 'campaignStatus','costType','currency', 'viewImpressions','viewAttributedBrandedSearches14d',
  1161. 'viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d',
  1162. 'viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  1163. 'viewAttributedUnitsOrderedNewToBrand14d',
  1164. ] # 'matchedTarget'
  1165. def reportV2_campaign_matchedTarget_t2_ETL(self, conn, params={}):
  1166. timeZone_ = self.timeZone()
  1167. today = datetime.now(tz=pytz.timezone(timeZone_))
  1168. if params.get("date") == None:
  1169. params["date"] = (
  1170. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1171. "%Y%m%d")
  1172. params['record_type'] = 'campaigns'
  1173. if params.get('metrics') == None:
  1174. params['metrics'] = self.campaigns_MT_metrics
  1175. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1176. metrics=params['metrics'], tactic="T00020", segment='matchedTarget')
  1177. # print(list_report)
  1178. df_report = pd.json_normalize(list_report)
  1179. date = datetime.strptime(params['date'], '%Y%m%d')
  1180. df_report['date'] = date
  1181. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1182. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1183. conn.insert_df("AmazonReport.SD_campaignsMatchedTargetV2", df_report[params['metrics']])
  1184. print("插入完成")
  1185. return df_report[params['metrics']]
  1186. def reportV2_campaign_matchedTarget_t3_ETL(self, conn, params={}):
  1187. timeZone_ = self.timeZone()
  1188. today = datetime.now(tz=pytz.timezone(timeZone_))
  1189. if params.get("date") == None:
  1190. params["date"] = (
  1191. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1192. "%Y%m%d")
  1193. params['record_type'] = 'campaigns'
  1194. if params.get('metrics') == None:
  1195. params['metrics'] = self.campaigns_MT_metrics
  1196. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1197. metrics=params['metrics'], tactic="T00030", segment='matchedTarget')
  1198. # print(list_report)
  1199. df_report = pd.json_normalize(list_report)
  1200. date = datetime.strptime(params['date'], '%Y%m%d')
  1201. df_report['date'] = date
  1202. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1203. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1204. conn.insert_df("AmazonReport.SD_campaignsMatchedTargetV2", df_report[params['metrics']])
  1205. print("插入完成")
  1206. return df_report[params['metrics']]
  1207. adGroups_MT_metrics = [
  1208. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  1209. 'attributedBrandedSearches14d','attributedConversions1d', 'attributedConversions1dSameSKU',
  1210. 'attributedConversions7d', 'attributedConversions7dSameSKU','attributedConversions14d',
  1211. 'attributedConversions14dSameSKU','attributedConversions30d','attributedConversions30dSameSKU',
  1212. 'attributedDetailPageView14d', 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU',
  1213. 'attributedSales7d','attributedSales7dSameSKU','attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  1214. 'attributedSales30dSameSKU','attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d',
  1215. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','bidOptimization',
  1216. 'currency','viewImpressions','viewAttributedBrandedSearches14d','viewAttributedConversions14d',
  1217. 'viewAttributedDetailPageView14d','viewAttributedSales14d','viewAttributedUnitsOrdered14d',
  1218. 'viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d',
  1219. ] # , 'matchedTarget'
  1220. def reportV2_adGroups_matchedTarget_t2_ETL(self, conn, params={}):
  1221. timeZone_ = self.timeZone()
  1222. today = datetime.now(tz=pytz.timezone(timeZone_))
  1223. if params.get("date") == None:
  1224. params["date"] = (
  1225. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1226. "%Y%m%d")
  1227. params['record_type'] = 'adGroups'
  1228. if params.get('metrics') == None:
  1229. params['metrics'] = self.adGroups_MT_metrics
  1230. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1231. metrics=params['metrics'], tactic="T00020", segment='matchedTarget')
  1232. # print(list_report)
  1233. df_report = pd.json_normalize(list_report)
  1234. date = datetime.strptime(params['date'], '%Y%m%d')
  1235. df_report['date'] = date
  1236. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1237. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1238. conn.insert_df("AmazonReport.SD_adGroupsMatchedTargetV2", df_report[params['metrics']])
  1239. print("插入完成")
  1240. return df_report[params['metrics']]
  1241. def reportV2_adGroups_matchedTarget_t3_ETL(self, conn, params={}):
  1242. timeZone_ = self.timeZone()
  1243. today = datetime.now(tz=pytz.timezone(timeZone_))
  1244. if params.get("date") == None:
  1245. params["date"] = (
  1246. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1247. "%Y%m%d")
  1248. params['record_type'] = 'adGroups'
  1249. if params.get('metrics') == None:
  1250. params['metrics'] = self.adGroups_MT_metrics
  1251. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1252. metrics=params['metrics'], tactic="T00030", segment='matchedTarget')
  1253. df_report = pd.json_normalize(list_report)
  1254. date = datetime.strptime(params['date'], '%Y%m%d')
  1255. df_report['date'] = date
  1256. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1257. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1258. conn.insert_df("AmazonReport.SD_adGroupsMatchedTargetV2", df_report[params['metrics']])
  1259. print("插入完成")
  1260. return df_report[params['metrics']]
  1261. targets_MT_metrics = [
  1262. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  1263. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU',
  1264. 'attributedConversions7d','attributedConversions7dSameSKU','attributedConversions14d',
  1265. 'attributedConversions14dSameSKU','attributedConversions30d', 'attributedConversions30dSameSKU',
  1266. 'attributedDetailPageView14d','attributedOrdersNewToBrand14d','attributedSales1d',
  1267. 'attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU','attributedSales14d',
  1268. 'attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU','attributedSalesNewToBrand14d',
  1269. 'attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d','attributedUnitsOrdered30d',
  1270. 'attributedUnitsOrderedNewToBrand14d','currency','targetingExpression','targetingType','viewAttributedBrandedSearches14d',
  1271. 'viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d','viewAttributedUnitsOrdered14d',
  1272. 'viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d',
  1273. ]
  1274. def reportV2_targets_matchedTarget_t2_ETL(self, conn, params={}):
  1275. timeZone_ = self.timeZone()
  1276. today = datetime.now(tz=pytz.timezone(timeZone_))
  1277. if params.get("date") == None:
  1278. params["date"] = (
  1279. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1280. "%Y%m%d")
  1281. params['record_type'] = 'targets'
  1282. if params.get('metrics') == None:
  1283. params['metrics'] = self.targets_MT_metrics
  1284. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1285. metrics=params['metrics'], tactic="T00020", segment='matchedTarget')
  1286. df_report = pd.json_normalize(list_report)
  1287. date = datetime.strptime(params['date'], '%Y%m%d')
  1288. df_report['date'] = date
  1289. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1290. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1291. conn.insert_df("AmazonReport.SD_targetsMatchedTargetV2", df_report[params['metrics']])
  1292. print("插入完成")
  1293. return df_report[params['metrics']]
  1294. def reportV2_targets_matchedTarget_t3_ETL(self, conn, params={}):
  1295. timeZone_ = self.timeZone()
  1296. today = datetime.now(tz=pytz.timezone(timeZone_))
  1297. if params.get("date") == None:
  1298. params["date"] = (
  1299. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1300. params['record_type'] = 'targets'
  1301. if params.get('metrics') == None:
  1302. params['metrics'] = self.targets_MT_metrics
  1303. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1304. metrics=params['metrics'], tactic="T00030", segment='matchedTarget')
  1305. df_report = pd.json_normalize(list_report)
  1306. date = datetime.strptime(params['date'], '%Y%m%d')
  1307. df_report['date'] = date
  1308. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1309. df_report = self.type_trans(df_report, params['metrics'], timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1310. conn.insert_df("AmazonReport.SD_targetsMatchedTargetV2", df_report[params['metrics']])
  1311. print("插入完成")
  1312. return df_report[params['metrics']]
  1313. if __name__ == '__main__':
  1314. AWS_CREDENTIALS = {
  1315. 'lwa_client_id': 'amzn1.application-oa2-client.ebd701cd07854fb38c37ee49ec4ba109',
  1316. 'refresh_token': "Atzr|IwEBIL4ur8kbcwRyxVu_srprAAoTYzujnBvA6jU-0SMxkRgOhGjYJSUNGKvw24EQwJa1jG5RM76mQD2P22AKSq8qSD94LddoXGdKDO74eQVYl0RhuqOMFqdrEZpp1p4bIR6_N8VeSJDHr7UCuo8FiabkSHrkq7tsNvRP-yI-bnpQv4EayPBh7YwHVX3hYdRbhxaBvgJENgCuiEPb35Q2-Z6w6ujjiKUAK2VSbCFpENlEfcHNsjDeY7RCvFlwlCoHj1IeiNIaFTE9yXFu3aEWlExe3LzHv6PZyunEi88QJSXKSh56Um0e0eEg05rMv-VBM83cAqc5POmZnTP1vUdZO8fQv3NFLZ-xU6e1WQVxVPi5Cyqk4jYhGf1Y9t98N654y0tVvw74qNIsTrB-8bGS0Uhfe24oBEWmzObvBY3zhtT1d42myGUJv4pMTU6yPoS83zhPKm3LbUDEpBA1hvvc_09jHk7vUEAuFB-UAZzlht2C1yklzQ",
  1317. 'lwa_client_secret': 'cbf0514186db4df91e04a8905f0a91b605eae4201254ced879d8bb90df4b474d',
  1318. 'profile_id': "3006125408623189"
  1319. }
  1320. conn = Common_ETLMethod(**AWS_CREDENTIALS).clickhouse_connect()
  1321. # SD
  1322. ac_etl = SB_ETL(**AWS_CREDENTIALS)
  1323. ls = ac_etl.targets_ETL()
  1324. print(ls)
  1325. print(ls.to_excel('obse11.xlsx'))
  1326. # ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
  1327. # ac_etl.reportV2_campaignsRecord_t3_ETL(conn)
  1328. # ac_etl.reportV2_adGroupsRecord_t2_ETL(conn)
  1329. # ac_etl.reportV2_adGroupsRecord_t3_ETL(conn)
  1330. # ac_etl.reportV2_asins_t2_ETL(conn)
  1331. # ac_etl.reportV2_asins_t3_ETL(conn)
  1332. # ac_etl.reportV2_productAds_t2_ETL(conn)
  1333. # ac_etl.reportV2_productAds_t3_ETL(conn)
  1334. # ac_etl.reportV2_targets_t2_ETL(conn)
  1335. # ac_etl.reportV2_productAds_t3_ETL(conn)
  1336. # ac_etl.reportV2_campaign_matchedTarget_t2_ETL(conn)
  1337. # ac_etl.reportV2_campaign_matchedTarget_t3_ETL(conn)
  1338. # ac_etl.reportV2_adGroups_matchedTarget_t2_ETL(conn)
  1339. # ac_etl.reportV2_adGroups_matchedTarget_t3_ETL(conn)
  1340. # ac_etl.reportV2_targets_matchedTarget_t2_ETL(conn)
  1341. # ac_etl.reportV2_targets_matchedTarget_t3_ETL(conn)
  1342. # SB
  1343. # ac_etl = SB_ETL(**AWS_CREDENTIALS)
  1344. # ac_etl.reportV3_purchasedAsinRecord_ETL(conn)
  1345. # ac_etl.reportV2_campaignsRecord_ETL(conn)
  1346. # ac_etl.reportV2_campaignsVideo_ETL(conn)
  1347. # ac_etl.reportV2_adGroupsRecord_ETL(conn)
  1348. # ac_etl.reportV2_adGroupsVideo_ETL(conn)
  1349. # ac_etl.reportV2_adsRecord_ETL(conn)
  1350. # ac_etl.reportV2_adsVideo_ETL(conn)
  1351. # ac_etl.reportV2_keywordsRecord_ETL(conn)
  1352. # ac_etl.reportV2_keywordsVideo_ETL(conn)
  1353. # ac_etl.reportV2_placementRecord_ETL(conn)
  1354. # ac_etl.reportV2_placementVideo_ETL(conn)
  1355. # ac_etl.reportV2_searchtermsRecord_ETL(conn)
  1356. # ac_etl.reportV2_searchtermsVideo_ETL(conn)
  1357. # ac_etl.reportV2_targetsRecord_ETL(conn)
  1358. # ac_etl.reportV2_targetsVideo_ETL(conn)
  1359. # SP
  1360. # ac_etl = SP_ETL(**AWS_CREDENTIALS)
  1361. # ac_etl.reportV3_campaign_spCampaignsETL(conn)
  1362. # ac_etl.reportV3_adGroup_spCampaignsETL(conn)
  1363. # ac_etl.reportV3_campaignPlacement_spCampaignsETL(conn)
  1364. # ac_etl.reportV3_targeting_spTargetingETL(conn)
  1365. # ac_etl.reportV3_searchTerm_spSearchTermETL(conn)
  1366. # ac_etl.reportV3_advertiser_spAdvertisedProductETL(conn)
  1367. # ac_etl.reportV3_asin_spPurchasedProductETL(conn)
  1368. conn.close()
  1369. ###