Data_ETL.py 91 KB

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