Data_ETL.py 108 KB

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