123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848 |
- import logging
- from sync_amz_data.public.amz_ad_client import SPClient, Account, SBClient, SDClient, BaseClient
- import pandas as pd
- import numpy as np
- from dateutil.parser import parse
- pd.set_option('display.max_columns', None)
- import warnings
- warnings.filterwarnings('ignore')
- pd.set_option('expand_frame_repr', False)
- from datetime import datetime, timezone, timedelta
- import clickhouse_connect
- import pytz
- from typing import Literal
- class Common_ETLMethod(BaseClient):
- def timeZone(self):
- rel = self.get_profilesInfo()
- profileId = int(self.profile_id)
- df_info = pd.json_normalize(rel)
- return df_info.query("profileId==@profileId")['timezone'].values[0]
- def clickhouse_connect(self):
- conn = clickhouse_connect.get_client(host='3.93.43.158', port=8123, username='root',
- password='6f0eyLuiVn3slzbGWpzI')
- return conn
- def columnsName_modify(self, df):
- """
- 列名.换_,设置全部小写
- """
- df.columns = [i.replace(".", "_").lower() for i in df.columns]
- return df
- def time_stamp_convert(self, df, time_columns: list):
- """
- 时间戳转换为utc
- """
- for time_column in time_columns:
- df[time_column] = pd.to_datetime(df[time_column] * 1000000).map(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))
- df[time_columns] = df[time_columns].astype("datetime64[ns]")
- return df
- def TZ_Deal(self, df, time_columns):
- """
- TZ时间格式转换为utc
- """
- for time_column in time_columns:
- df[time_column] = df[time_column].map(lambda x: parse(x).strftime("%Y-%m-%d %H:%M:%S"))
- df[time_columns] = df[time_columns].astype("datetime64[ns]")
- return df
- def placement_segmentsplit(self, df, segment):
- """
- 拆分placement与percentage列
- """
- df[segment] = df[segment].astype("string")
- df[segment + str("_percentage")] = df[segment].str.extract("'percentage':.+([\d\.]{1,}),").astype('float32')
- df[segment + str("_placement")] = df[segment].str.extract("'placement':.+'(.+)'")
- df.replace(['nan', 'Nan', 'NaN'], np.nan, inplace=True)
- df.drop(columns=[segment], inplace=True)
- return df
- def expression_split(self, df, segment):
- """
- 拆分type,value列
- """
- df[segment] = df[segment].astype("string")
- df[segment + str("_type")] = df[segment].str.extract(r"'type':\s{0,1}'(.+?)',")
- df[segment + str("_value")] = df[segment].str.extract(r"'value':\s{0,1}[\'\[\{](.+)'")
- df[segment + str("_value")] = df[segment + str("_value")].map(
- lambda x: x if pd.isna(x) or "," not in x else "[{" + x + "'}]").str.replace("{{","{")
- df.replace(['nan', 'Nan', 'NaN'], np.nan, inplace=True)
- df.drop(columns=[segment], inplace=True)
- return df
- def get_keyOvalue(self,expressions, result: Literal['value', 'type']):
- if expressions not in [None,pd.NA,pd.NaT]:
- if len(expressions) > 1:
- return [i.get(result) for i in expressions]
- if len(expressions) == 1:
- sub_ = expressions[0].get(result)
- if sub_ is None:
- return None
- elif type(sub_) == str:
- return sub_
- elif type(sub_) == list:
- return [i.get(result) for i in sub_]
- else:
- return expressions
- else:
- return '-'
- def id_type_trans(self,df):
- id_columns = [i for i in df.columns if 'id' in i.lower() and 'bid' not in i.lower()]
- df[id_columns] = df[id_columns].fillna(-1).applymap(lambda x: round(int(x), 0)).astype("string")
- df[id_columns] = df[id_columns].applymap(lambda x: '' if x == '-1' else x)
- return df
- def type_trans(self, df_report, columns: list, timeZone_: str, extra_columns: list = []):
- # 添加字段
- df_report['profileId'] = self.profile_id
- df_report['timeZone'] = timeZone_
- df_needManualAdd = [i for i in columns if i not in df_report.columns]
- if len(df_needManualAdd) > 0:
- df_report[df_needManualAdd] = None
- columns.extend(extra_columns)
- columns.append("date") if "date" not in columns else columns
- columns.extend(["timeZone", "profileId"])
- # 修改字段类型
- df_report = self.id_type_trans(df_report)
- df_report['date'] = df_report['date'].astype("datetime64[ns]")
- # df_report[df_report.select_dtypes('O').columns] = df_report[df_report.select_dtypes('O').columns].astype('string')
- toFloat = [i for i in columns if 'sales' in i.lower() or 'percent' in i.lower() or 'video' in i.lower()]
- if len(toFloat) > 0:
- df_report[toFloat] = df_report[toFloat].applymap(lambda x: np.nan if pd.isna(x) or x == '' else float(x))
- df_report.fillna(np.nan, inplace=True)
- # print(df_report[columns].info())
- # df_report.to_excel("df.xlsx")
- return df_report
- def today_(self):
- timeZone_ = self.timeZone()
- today_ = datetime.now(tz=pytz.timezone(timeZone_))
- logging.info(f"timezone:{timeZone_},today:{today_}")
- print(timeZone_,today_)
- return timeZone_,today_
- class Acount_ETL(Account, Common_ETLMethod):
- def portfolio_ETL(self):
- list_portfolio = self.get_portfolios()
- df_portfolio = pd.json_normalize(list_portfolio)
- # print(self.columnsName_modify(df_portfolio))
- return self.columnsName_modify(df_portfolio)
- class SP_ETL(SPClient, Common_ETLMethod):
- def campaigns_ETL(self):
- list_campaign_SP = list(self.iter_campaigns(**{"includeExtendedDataFields": True}))
- df_campaign = pd.json_normalize(list_campaign_SP)
- df_campaign = self.placement_segmentsplit(df_campaign, "dynamicBidding.placementBidding")
- df_campaign = self.TZ_Deal(df_campaign, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
- # print(df_campaign)
- return self.columnsName_modify(df_campaign)
- def adGroups_ETL(self):
- list_adGroup_SP = list(self.iter_adGroups(**{"includeExtendedDataFields": True}))
- df_adGroup_SP = pd.json_normalize(list_adGroup_SP)
- df_adGroup_SP = self.TZ_Deal(df_adGroup_SP,
- ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
- return self.columnsName_modify(df_adGroup_SP)
- def ads_ETL(self):
- list_adId_SP = list(self.iter_ads(**{"includeExtendedDataFields": True}))
- df_adId_SP = pd.json_normalize(list_adId_SP)
- df_adId_SP = self.TZ_Deal(df_adId_SP, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
- return self.columnsName_modify(df_adId_SP)
- def keywords_ETL(self):
- list_keywords_SP = list(self.iter_keywords(**{"includeExtendedDataFields": True}))
- df_keywords_SP = pd.json_normalize(list_keywords_SP)
- df_keywords_SP = self.TZ_Deal(df_keywords_SP,
- ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
- return self.columnsName_modify(df_keywords_SP)
- def targets_ETL(self):
- list_targets = list(self.iter_targets(**{"includeExtendedDataFields": True}))
- df_targets = pd.json_normalize(list_targets)
- print("--")
- df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
- df_targets['resolvedExpressions_type'] = df_targets['resolvedExpression'].map(
- lambda x: self.get_keyOvalue(x, 'type'))
- df_targets['resolvedExpressions_value'] = df_targets['resolvedExpression'].map(
- lambda x: self.get_keyOvalue(x, 'value'))
- return self.columnsName_modify(df_targets)
- def budget_ETL(self, campaign_ids: list):
- list_budget = self.get_budget(campaign_ids=campaign_ids)['success']
- df_budget = pd.json_normalize(list_budget)
- df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
- return self.columnsName_modify(df_budget)
- def reportV3_campaign_spCampaignsETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "spCampaigns"
- params['columns'] = [
- 'campaignName', 'campaignId', 'campaignStatus', 'campaignBudgetAmount', 'campaignBudgetType',
- 'campaignRuleBasedBudgetAmount', 'campaignApplicableBudgetRuleId', 'campaignApplicableBudgetRuleName',
- 'campaignBudgetCurrencyCode', 'topOfSearchImpressionShare',
- 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
- 'purchasesSameSku1d',
- 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
- 'unitsSoldClicks7d',
- 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
- 'attributedSalesSameSku1d',
- 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
- 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
- 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
- 'clickThroughRate', 'spend'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['campaign']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SP_spCampaigns_campaignV3", df_report[params['columns']])
- print("插入完成SP_spCampaigns_campaignV3")
- return df_report[params['columns']]
- def reportV3_adGroup_spCampaignsETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "spCampaigns"
- params['columns'] = [
- 'adGroupName', 'adGroupId', 'adStatus','campaignName', 'campaignId', 'campaignStatus', 'campaignBudgetAmount', 'campaignBudgetType',
- 'campaignRuleBasedBudgetAmount', 'campaignApplicableBudgetRuleId', 'campaignApplicableBudgetRuleName',
- 'campaignBudgetCurrencyCode',
- 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
- 'purchasesSameSku1d',
- 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
- 'unitsSoldClicks7d',
- 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
- 'attributedSalesSameSku1d',
- 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
- 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
- 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
- 'clickThroughRate', 'spend'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['adGroup',"campaign"]
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SP_spCampaigns_adGroupV3", df_report[params['columns']])
- print("插入完成SP_spCampaigns_adGroupV3")
- return df_report[params['columns']]
- #
- def reportV3_campaignPlacement_spCampaignsETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "spCampaigns"
- params['columns'] = [
- 'placementClassification','campaignName', 'campaignId','campaignStatus', 'campaignBudgetAmount', 'campaignBudgetType',
- 'campaignRuleBasedBudgetAmount', 'campaignApplicableBudgetRuleId', 'campaignApplicableBudgetRuleName',
- 'campaignBudgetCurrencyCode',
- 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
- 'purchasesSameSku1d',
- 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
- 'unitsSoldClicks7d',
- 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
- 'attributedSalesSameSku1d',
- 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
- 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
- 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
- 'clickThroughRate', 'spend'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['campaign','campaignPlacement']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- # print(df_report)
- # print(df_report.columns)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SP_spCampaigns_placementV3", df_report[params['columns']])
- print("插入完成SP_spCampaigns_placementV3")
- return df_report[params['columns']]
- def reportV3_targeting_spTargetingETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "spTargeting"
- params['columns'] = [
- 'adKeywordStatus',
- 'impressions', 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'purchases1d', 'purchases7d',
- 'purchases14d',
- 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
- 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
- 'sales14d',
- 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
- 'attributedSalesSameSku30d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d', 'unitsSoldSameSku14d',
- 'unitsSoldSameSku30d',
- 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d', 'salesOtherSku7d',
- 'unitsSoldOtherSku7d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d', 'keywordId',
- 'keyword',
- 'campaignBudgetCurrencyCode', 'date', 'portfolioId', 'campaignName', 'campaignId',
- 'campaignBudgetType', 'campaignBudgetAmount', 'campaignStatus', 'keywordBid', 'adGroupName', 'adGroupId',
- 'keywordType',
- 'matchType', 'targeting', 'topOfSearchImpressionShare'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['targeting']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SP_spTargeting_targetingV3", df_report[params['columns']])
- print("插入完成SP_spTargeting_targetingV3")
- return df_report[params['columns']]
- def reportV3_searchTerm_spSearchTermETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "spSearchTerm"
- params['columns'] = [
- 'adKeywordStatus',
- 'impressions', 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'purchases1d', 'purchases7d',
- 'purchases14d',
- 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
- 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
- 'sales14d',
- 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
- 'attributedSalesSameSku30d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d', 'unitsSoldSameSku14d',
- 'unitsSoldSameSku30d',
- 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d', 'salesOtherSku7d',
- 'unitsSoldOtherSku7d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d', 'keywordId',
- 'keyword',
- 'campaignBudgetCurrencyCode', 'date', 'portfolioId', 'searchTerm', 'campaignName', 'campaignId',
- 'campaignBudgetType', 'campaignBudgetAmount', 'campaignStatus', 'keywordBid', 'adGroupName', 'adGroupId',
- 'keywordType',
- 'matchType', 'targeting'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['searchTerm']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SP_spSearchTerm_searchTermV3", df_report[params['columns']])
- print("插入完成SP_spSearchTerm_searchTermV3")
- return df_report[params['columns']]
- def reportV3_advertiser_spAdvertisedProductETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "spAdvertisedProduct"
- params['columns'] = [
- 'date', 'campaignName', 'campaignId', 'adGroupName', 'adGroupId', 'adId', 'portfolioId', 'impressions',
- 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'spend', 'campaignBudgetCurrencyCode',
- 'campaignBudgetAmount',
- 'campaignBudgetType', 'campaignStatus', 'advertisedAsin', 'advertisedSku', 'purchases1d', 'purchases7d',
- 'purchases14d',
- 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
- 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
- 'sales14d',
- 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
- 'attributedSalesSameSku30d', 'salesOtherSku7d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d',
- 'unitsSoldSameSku14d',
- 'unitsSoldSameSku30d', 'unitsSoldOtherSku7d', 'kindleEditionNormalizedPagesRead14d',
- 'kindleEditionNormalizedPagesRoyalties14d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['advertiser']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SP_spAdvertisedProduct_advertiserV3", df_report[params['columns']])
- print("插入完成SP_spAdvertisedProduct_advertiserV3")
- return df_report[params['columns']]
- def reportV3_asin_spPurchasedProductETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "spPurchasedProduct"
- params['columns'] = [
- 'date', 'portfolioId', 'campaignName', 'campaignId', 'adGroupName', 'adGroupId', 'keywordId', 'keyword',
- 'keywordType', 'advertisedAsin', 'purchasedAsin', 'advertisedSku', 'campaignBudgetCurrencyCode',
- 'matchType',
- 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
- 'sales14d',
- 'sales30d', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d', 'unitsSoldOtherSku1d',
- 'unitsSoldOtherSku7d',
- 'unitsSoldOtherSku14d', 'unitsSoldOtherSku30d', 'salesOtherSku1d', 'salesOtherSku7d', 'salesOtherSku14d',
- 'salesOtherSku30d', 'purchasesOtherSku1d', 'purchasesOtherSku7d', 'purchasesOtherSku14d',
- 'purchasesOtherSku30d',
- 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['asin']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SP_spPurchasedProduct_asinV3", df_report[params['columns']])
- print("插入完成SP_spPurchasedProduct_asinV3")
- return df_report[params['columns']]
- class SB_ETL(SBClient, Common_ETLMethod):
- def campaigns_ETL(self):
- list_campaign_SB = list(self.iter_campaigns(**{"includeExtendedDataFields": True}))
- df_campaign = pd.json_normalize(list_campaign_SB)
- df_campaign = self.placement_segmentsplit(df_campaign, "bidding.bidAdjustmentsByPlacement")
- df_campaign = self.time_stamp_convert(df_campaign, ["extendedData.creationDate", "extendedData.lastUpdateDate"])
- # print(df_campaign)
- return self.columnsName_modify(df_campaign)
- def adGroups_ETL(self):
- list_adGroup_SB = list(self.iter_adGroups(**{"includeExtendedDataFields": True}))
- df_adGroup_SP = pd.json_normalize(list_adGroup_SB)
- df_adGroup_SP = self.time_stamp_convert(df_adGroup_SP,
- ["extendedData.creationDate", "extendedData.lastUpdateDate"])
- return self.columnsName_modify(df_adGroup_SP)
- def ads_ETL(self):
- list_adId_SB = list(self.iter_ads(**{"includeExtendedDataFields": True}))
- df_adId_SP = pd.json_normalize(list_adId_SB)
- df_adId_SP = self.time_stamp_convert(df_adId_SP, ["extendedData.creationDate", "extendedData.lastUpdateDate"])
- return self.columnsName_modify(df_adId_SP)
- def keywords_ETL(self):
- list_keywords_SB = [row for _ in list(self.iter_keywords()) for row in _]
- df_keywords_SP = pd.json_normalize(list_keywords_SB)
- return self.columnsName_modify(df_keywords_SP)
- def targets_ETL(self):
- list_targets = list(self.iter_targets())
- df_targets = pd.json_normalize(list_targets)
- # df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
- # df_targets = self.expression_split(df_targets, "resolvedExpressions")
- df_targets = self.id_type_trans(df_targets)
- df_targets['resolvedExpressions_type'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'type'))
- df_targets['resolvedExpressions_value'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'value'))
- return self.columnsName_modify(df_targets)
- def budget_ETL(self, campaign_ids: list):
- list_budget = self.get_budget(campaignIds=campaign_ids)['success']
- df_budget = pd.json_normalize(list_budget)
- df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
- return self.columnsName_modify(df_budget)
- def reportV3_campaign_sbCampaigns_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sbCampaigns" #sbCampaigns
- params['columns'] = ['campaignId',
- 'campaignName','campaignBudgetAmount', 'campaignBudgetCurrencyCode', 'campaignBudgetType', 'topOfSearchImpressionShare',
- 'addToCart', 'addToCartClicks', 'addToCartRate', 'brandedSearches', 'brandedSearchesClicks',
- 'campaignBudgetAmount', 'campaignBudgetCurrencyCode', 'campaignBudgetType', 'campaignStatus', 'clicks', 'cost',
- 'costType', 'date', 'detailPageViews','detailPageViewsClicks', 'eCPAddToCart', 'endDate', 'impressions', 'newToBrandDetailPageViewRate',
- 'newToBrandDetailPageViews', 'newToBrandDetailPageViewsClicks', 'newToBrandECPDetailPageView',
- 'newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandPurchasesPercentage',
- 'newToBrandPurchasesRate', 'newToBrandSales', 'newToBrandSalesClicks', 'newToBrandSalesPercentage',
- 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks', 'newToBrandUnitsSoldPercentage', 'purchases',
- 'purchasesClicks', 'purchasesPromoted', 'sales', 'salesClicks', 'salesPromoted', 'startDate',
- 'topOfSearchImpressionShare', 'unitsSold', 'unitsSoldClicks', 'video5SecondViewRate',
- 'video5SecondViews', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews',
- 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate', 'viewableImpressions',
- 'viewClickThroughRate'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['campaign']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report)
- # conn.insert_df("AmazonReport.SB_sbPurchasedProduct_asinV3", df_report[params['columns']])
- # print("插入完成SB_sbPurchasedProduct_asinV3")
- return df_report[params['columns']]
- def reportV3_purchasedAsinRecord_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sbPurchasedProduct"
- params['columns'] = [
- 'campaignId', 'adGroupId', 'date', 'campaignBudgetCurrencyCode', 'campaignName', 'adGroupName',
- 'attributionType', 'purchasedAsin', 'productName', 'productCategory', 'sales14d', 'orders14d',
- 'unitsSold14d',
- 'newToBrandSales14d', 'newToBrandPurchases14d', 'newToBrandUnitsSold14d', 'newToBrandSalesPercentage14d',
- 'newToBrandPurchasesPercentage14d', 'newToBrandUnitsSoldPercentage14d'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['purchasedAsin']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report)
- conn.insert_df("AmazonReport.SB_sbPurchasedProduct_asinV3", df_report[params['columns']])
- print("插入完成SB_sbPurchasedProduct_asinV3")
- return df_report[params['columns']]
- def reportV2_campaignsRecord_ETL(self, conn, params={}):
- print(params)
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'campaigns'
- metric = ['campaignId','campaignName', 'impressions', 'clicks', 'cost',
- 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName',
- 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
- 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
- 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
- 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
- 'campaignBudgetType','campaignRuleBasedBudget','campaignStatus',
- 'dpv14d','topOfSearchImpressionShare','unitsSold14d'
- ]
- # print(metric)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric)
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SB_campaignsV2", df_report[metric])
- print("插入完成SB_campaignsV2")
- return df_report[metric]
- def reportV2_campaignsVideo_ETL(self, conn, params={}):
- print(params)
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'campaigns'
- metric = [
- 'campaignId','campaignName','impressions','clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
- 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
- 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
- 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
- 'currency','dpv14d','topOfSearchImpressionShare','vctr','vtr','video5SecondViewRate','video5SecondViews',
- 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
- 'viewableImpressions'
- ]
- # print(metric)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, creative_type='video')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SB_campaignsVideoV2", df_report[metric])
- print("插入完成SB_campaignsVideoV2")
- # print(df_report[metric].info())
- return df_report[metric]
- def reportV2_placementRecord_ETL(self, conn, params={}):
- print(params)
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'campaigns'
- metric = ['campaignId','campaignName','impressions','clicks','cost',
- 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName',
- 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
- 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
- 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d',
- 'attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
- 'campaignBudget','campaignBudgetType','campaignRuleBasedBudget','campaignStatus','dpv14d','unitsSold14d'
- ] # 'placement'
- # print(metric)
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, segment='placement')
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['placement'])
- conn.insert_df("AmazonReport.SB_campaignsPlacementV2", df_report[metric])
- print("插入完成SB_campaignsPlacementV2")
- # print(df_report[metric].info())
- return df_report[metric]
- def reportV2_placementVideo_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'campaigns'
- metric = [
- 'campaignId','campaignName','impressions','clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
- 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
- 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
- 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
- 'currency','dpv14d','vctr','vtr','video5SecondViewRate','video5SecondViews','videoCompleteViews',
- 'videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
- ] # 'placement'
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, segment='placement', creative_type='video')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['placement'])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_campaignsPlacementVideoV2", df_report[metric])
- print("插入完成SB_campaignsPlacementVideoV2")
- return df_report[metric]
- def reportV2_adGroupsRecord_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'adGroups'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','impressions', 'clicks', 'cost',
- 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
- 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
- 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
- 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
- 'dpv14d','unitsSold14d',
- ] #
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric)
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_adGroupsV2", df_report[metric])
- print("插入完成SB_adGroupsV2")
- return df_report[metric]
- def reportV2_adGroupsVideo_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'adGroups'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
- 'attributedOrdersNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
- 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
- 'campaignBudget','campaignBudgetType','campaignStatus','currency','vctr','vtr','video5SecondViewRate',
- 'video5SecondViews','videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews',
- 'videoUnmutes','viewableImpressions','dpv14d'
- ] #
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, creative_type='video')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_adGroupsVideoV2", df_report[metric])
- print("插入完成SB_adGroupsVideoV2")
- return df_report[metric]
- def reportV2_targetsRecord_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'targets'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions', 'clicks', 'cost',
- 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
- 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
- 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
- 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
- 'campaignBudgetType','campaignStatus','dpv14d','targetingExpression','targetingType',
- 'topOfSearchImpressionShare','unitsSold14d'
- ] #
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric)
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_targetsV2", df_report[metric])
- print("插入完成SB_targetsV2")
- return df_report[metric]
- def reportV2_targetsVideo_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'targets'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
- 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
- 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
- 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
- 'currency','dpv14d','targetingExpression','targetingType','topOfSearchImpressionShare','vctr','vtr',
- 'video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews','videoMidpointViews',
- 'videoThirdQuartileViews','videoUnmutes','viewableImpressions',
- ] #
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, creative_type='video')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_targetsVideoV2", df_report[metric])
- print("插入完成SB_targetsVideoV2")
- return df_report[metric]
- def reportV2_keywordsRecord_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'keywords'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
- 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName','attributedConversions14d',
- 'attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d',
- 'attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
- 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
- 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
- 'campaignBudgetType','campaignRuleBasedBudget','campaignStatus','dpv14d','keywordBid','keywordStatus',
- 'matchType','searchTermImpressionRank','searchTermImpressionShare','topOfSearchImpressionShare','unitsSold14d',
- ] #
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric)
- # print(list_campaigns_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_keywordsV2", df_report[metric])
- print("插入完成SB_keywordsV2")
- return df_report[metric]
- def reportV2_keywordsVideo_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'keywords'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
- 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
- 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
- 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
- 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType',
- 'campaignStatus','currency','dpv14d','keywordBid','keywordStatus','matchType','topOfSearchImpressionShare',
- 'vctr','vtr','video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews',
- 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
- ] #
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, creative_type='video')
- # print(list_campaigns_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_keywordsVideoV2", df_report[metric])
- print("插入完成SB_keywordsVideoV2")
- return df_report[metric]
- def reportV2_searchtermsRecord_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'keywords'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
- 'attributedConversions14d','attributedSales14d','campaignBudget','campaignBudgetType','campaignStatus','keywordBid',
- 'keywordStatus','matchType','searchTermImpressionRank','searchTermImpressionShare'
- ] #
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, segment='query')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['query'])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_keywordsQueryV2", df_report[metric])
- print("插入完成SB_keywordsQueryV2")
- return df_report[metric]
- def reportV2_searchtermsVideo_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'keywords'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions','clicks','cost',
- 'attributedConversions14d','attributedSales14d','campaignBudget','campaignBudgetType','campaignStatus',
- 'keywordBid','keywordStatus','matchType','vctr','vtr','video5SecondViewRate','video5SecondViews',
- 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews',
- 'videoUnmutes','viewableImpressions',
- ] # 'query','currency'
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, segment='query', creative_type='video')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['query'])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_keywordsQueryVideoV2", df_report[metric])
- print("插入完成SB_keywordsQueryVideoV2")
- return df_report[metric]
- def reportV2_adsRecord_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'ads'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','adId','impressions','clicks','cost',
- 'applicableBudgetRuleId','applicableBudgetRuleName','attributedBrandedSearches14d','attributedConversions14d',
- 'attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d',
- 'attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
- 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
- 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
- 'campaignBudget','campaignBudgetType','campaignRuleBasedBudget','campaignStatus',
- 'dpv14d','unitsSold14d','vctr',
- ] #
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- conn.insert_df("AmazonReport.SB_adsV2", df_report[metric])
- print("插入完成SB_adsV2")
- return df_report[metric]
- def reportV2_adsVideo_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'ads'
- metric = [
- 'campaignId','campaignName','adGroupId','adGroupName','adId', 'impressions', 'clicks', 'cost',
- 'applicableBudgetRuleId','applicableBudgetRuleName','attributedBrandedSearches14d',
- 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
- 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
- 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d',
- 'attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
- 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType',
- 'campaignRuleBasedBudget','campaignStatus','currency','dpv14d','vctr','vtr',
- 'video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews',
- 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
- ] #
- # print(date)
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, creative_type='video')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SB_adsVideoV2", df_report[metric])
- print("插入完成SB_adsVideoV2")
- return df_report[metric]
- class SD_ETL(SDClient, Common_ETLMethod):
- def campaigns_ETL(self):
- list_campaign_SD = self.get_campaigns()
- df_campaign = pd.json_normalize(list_campaign_SD)
- df_campaign['startDate'] = df_campaign['startDate'].map(
- lambda x: datetime.strptime(x, "%Y%m%d").date()) # 转换为标准时间格式
- df_campaign['portfolioId'] = df_campaign['portfolioId'].fillna(-1).astype("int64") # 将portfolio列为空的填充为-1
- return self.columnsName_modify(df_campaign)
- def adGroups_ETL(self, **param):
- list_adGroups_SD = [row for _ in list(self.iter_adGroups(**param)) for row in _]
- df_adGroups_SD = pd.json_normalize(list_adGroups_SD)
- tactic = {"T00020": "Contextual targeting", "T00030": "Audiences targeting"}
- df_adGroups_SD["tactic_type"] = df_adGroups_SD['tactic'].map(tactic) # T00020、T00030解释字段
- return self.columnsName_modify(df_adGroups_SD)
- def ads_ETL(self):
- list_ads_SD = [row for _ in list(self.iter_ads()) for row in _]
- df_ads_SD = pd.json_normalize(list_ads_SD)
- return self.columnsName_modify(df_ads_SD)
- def targets_ETL(self, **param):
- list_targets = [row for _ in list(self.iter_targets(**param)) for row in _]
- df_targets = pd.json_normalize(list_targets)
- # df_targets = self.expression_split(df_targets, "resolvedExpression")
- df_targets = self.id_type_trans(df_targets)
- df_targets['resolvedExpressions_type'] = df_targets['resolvedExpression'].map(lambda x:self.get_keyOvalue(x,'type'))
- df_targets['resolvedExpressions_value'] = df_targets['resolvedExpression'].map(lambda x:self.get_keyOvalue(x,'value'))
- return self.columnsName_modify(df_targets)
- def budget_ETL(self, campaignsIds: list):
- list_budget = self.get_budget(campaignIds=campaignsIds)['success']
- df_budget = pd.json_normalize(list_budget)
- df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
- return self.columnsName_modify(df_budget)
- def reportV3_campaign_sdCampaigns_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sdCampaigns"
- params['columns'] = [ 'campaignName', 'campaignId','campaignStatus','campaignBudgetAmount', 'impressions','clicks', 'cost',
- 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
- 'brandedSearches', 'brandedSearchesClicks','brandedSearchesViews', 'brandedSearchRate',
- 'costType', 'cumulativeReach','detailPageViews', 'detailPageViewsClicks','eCPAddToCart', 'eCPBrandSearch',
- 'newToBrandDetailPageViewClicks','newToBrandDetailPageViewRate', 'newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView',
- 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks','newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
- 'campaignBudgetCurrencyCode','date',
- 'impressionsViews','impressionsFrequencyAverage', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
- 'sales','salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews',
- 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate','viewClickThroughRate'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['campaign']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report.columns)
- conn.insert_df("AmazonReport.SD_sdCampaigns_campaignV3", df_report[params['columns']])
- print("插入完成SD_sdCampaigns_campaignV3")
- return df_report[params['columns']]
- def reportV3_campaignMT_sdCampaigns_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sdCampaigns"
- params['columns'] = [
- 'matchedTargetAsin','campaignName', 'campaignId','campaignStatus','campaignBudgetAmount', 'impressions','clicks', 'cost',
- 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
- 'brandedSearches', 'brandedSearchesClicks','brandedSearchesViews', 'brandedSearchRate',
- 'costType', 'detailPageViews', 'detailPageViewsClicks','eCPAddToCart', 'eCPBrandSearch',
- 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks','newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
- 'campaignBudgetCurrencyCode','date',
- 'impressionsViews', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
- 'sales','salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews',
- 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate','viewClickThroughRate'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['campaign',"matchedTarget"]
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report.columns)
- conn.insert_df("AmazonReport.SD_sdCampaigns_campaignMatchedTargetV3", df_report[params['columns']])
- print("插入完成SD_sdCampaigns_campaignMatchedTargetV3")
- return df_report[params['columns']]
- def reportV3_adgroup_sdAdGroup_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sdAdGroup"
- params['columns'] = ['campaignName','campaignId', 'adGroupName', 'adGroupId', 'impressions','clicks', 'cost',
- 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
- 'bidOptimization','brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
- 'cumulativeReach','detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart','eCPBrandSearch',
- 'newToBrandDetailPageViewClicks', 'newToBrandDetailPageViewRate','newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView',
- 'newToBrandSales', 'newToBrandPurchases', 'newToBrandPurchasesClicks','newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
- 'campaignBudgetCurrencyCode','date', 'impressionsViews', 'impressionsFrequencyAverage', 'purchases',
- 'purchasesClicks', 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'unitsSold',
- 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
- 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['adGroup']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report)
- conn.insert_df("AmazonReport.SD_sdAdGroup_adGroupV3", df_report[params['columns']])
- print("插入完成SD_sdAdGroup_adGroupV3")
- return df_report[params['columns']]
- def reportV3_adgroupMT_sdAdGroup_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sdAdGroup"
- params['columns'] = [
- 'matchedTargetAsin','campaignName','campaignId', 'adGroupName', 'adGroupId', 'impressions','clicks', 'cost',
- 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
- 'bidOptimization','brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
- 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart','eCPBrandSearch',
- 'newToBrandSales', 'newToBrandPurchases', 'newToBrandPurchasesClicks','newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
- 'campaignBudgetCurrencyCode','date', 'impressionsViews', 'purchases',
- 'purchasesClicks', 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'unitsSold',
- 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
- 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['adGroup',"matchedTarget"]
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report)
- conn.insert_df("AmazonReport.SD_sdAdGroup_adGroupMatchedTargetV3", df_report[params['columns']])
- print("插入完成SD_sdAdGroup_adGroupMatchedTargetV3")
- return df_report[params['columns']]
- def reportV3_targeting_sdTargeting_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sdTargeting"
- params['columns'] = ['campaignName', 'campaignId','adGroupName','adGroupId', 'targetingText','targetingId','impressions','clicks', 'cost',
- 'adKeywordStatus', 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
- 'brandedSearches',
- 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
- 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart', 'eCPBrandSearch',
- 'newToBrandDetailPageViewClicks', 'newToBrandDetailPageViewRate', 'newToBrandDetailPageViews',
- 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView','newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks',
- 'newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
- 'campaignBudgetCurrencyCode',
- 'date',
- 'impressionsViews', 'purchases', 'purchasesClicks',
- 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'targetingExpression',
- 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews','videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
- 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['targeting']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report)
- conn.insert_df("AmazonReport.SD_targeting_sdTargetingV3", df_report[params['columns']])
- print("插入完成SD_targeting_sdTargetingV3")
- return df_report[params['columns']]
- def reportV3_targetingMT_sdTargeting_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sdTargeting"
- params['columns'] = [
- 'matchedTargetAsin',
- 'campaignName', 'campaignId','adGroupName','adGroupId', 'targetingText','targetingId','impressions','clicks', 'cost',
- 'adKeywordStatus', 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
- 'brandedSearches',
- 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
- 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart', 'eCPBrandSearch',
- 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks',
- 'newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
- 'campaignBudgetCurrencyCode',
- 'date',
- 'impressionsViews', 'purchases', 'purchasesClicks',
- 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'targetingExpression',
- 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews','videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
- 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['targeting',"matchedTarget"]
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report)
- conn.insert_df("AmazonReport.SD_targeting_sdTargetingMatchedTargetV3", df_report[params['columns']])
- print("插入完成SD_targeting_sdTargetingMatchedTargetV3")
- return df_report[params['columns']]
- def reportV3_advertiser_sdAdvertisedProduct_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sdAdvertisedProduct"
- params['columns'] = ['campaignName','campaignId','adGroupName','adGroupId','adId','impressions','clicks', 'cost',
- 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews', 'bidOptimization',
- 'brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
- 'detailPageViews', 'detailPageViewsClicks','eCPAddToCart',
- 'eCPBrandSearch','newToBrandDetailPageViewClicks',
- 'newToBrandDetailPageViewRate', 'newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView','newToBrandSales',
- 'newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks', 'newToBrandUnitsSold',
- 'newToBrandUnitsSoldClicks',
- 'campaignBudgetCurrencyCode',
- 'cumulativeReach', 'date', 'impressionsFrequencyAverage', 'impressionsViews', 'promotedAsin', 'promotedSku', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
- 'sales',
- 'salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews',
- 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['advertiser']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report)
- conn.insert_df("AmazonReport.SD_advertiser_sdAdvertisedProductV3", df_report[params['columns']])
- print("插入完成SD_advertiser_sdAdvertisedProductV3")
- return df_report[params['columns']]
- def reportV3_asin_sdPurchasedProduct_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("endDate") == None:
- params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
- if params.get("startDate") == None:
- params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y-%m-%d")
- params['reportType'] = "sdPurchasedProduct"
- params['columns'] = ['campaignName','campaignId', 'adGroupName','adGroupId', 'promotedAsin', 'promotedSku',
- 'asinBrandHalo', 'campaignBudgetCurrencyCode',
- 'conversionsBrandHalo', 'conversionsBrandHaloClicks', 'date', 'salesBrandHalo',
- 'salesBrandHaloClicks', 'unitsSoldBrandHalo', 'unitsSoldBrandHaloClicks'
- ] # 'startDate', 'endDate',
- params['groupby'] = ['asin']
- params['timeUnit'] = 'DAILY'
- list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
- columns=params['columns'], startDate=params['startDate'],
- endDate=params['endDate'], reportType=params['reportType'])
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
- # print(df_report)
- conn.insert_df("AmazonReport.SD_asin_sdPurchasedProductV3", df_report[params['columns']])
- print("插入完成SD_asin_sdPurchasedProductV3")
- return df_report[params['columns']]
- campaigns_metrics = [
- 'campaignId','campaignName','impressions','clicks','cost','attributedBrandedSearches14d',
- 'attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
- 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
- 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU',
- 'attributedSales7d','attributedSales7dSameSKU','attributedSales14d',
- 'attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
- 'attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d',
- 'attributedUnitsOrdered14d','attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d',
- 'avgImpressionsFrequency','campaignBudget','campaignStatus','cumulativeReach','costType',
- 'currency','vctr','vtr', 'viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
- 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d',
- 'viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d',
- 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
- ]
- def reportV2_campaignsRecord_t2_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'campaigns'
- metric = self.campaigns_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020")
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Contextual targeting'
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- conn.insert_df("AmazonReport.SD_campaignsV2", df_report[metric])
- print("插入完成SD_campaignsV2—")
- return df_report[metric]
- def reportV2_campaignsRecord_t3_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'campaigns'
- metric = self.campaigns_metrics
- print("tactic:t3")
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00030")#
- df_report = pd.json_normalize(list_report)
- print(df_report.columns)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- conn.insert_df("AmazonReport.SD_campaignsV2", df_report[metric])
- print("插入完成SD_campaignsV2")
- return df_report[metric]
- adGroups_metrics = [
- 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU',
- 'attributedConversions7d','attributedConversions7dSameSKU','attributedConversions14d',
- 'attributedConversions14dSameSKU','attributedConversions30d','attributedConversions30dSameSKU',
- 'attributedDetailPageView14d','attributedOrdersNewToBrand14d','attributedSales1d',
- 'attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU',
- 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
- 'attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d','attributedUnitsOrdered30d',
- 'attributedUnitsOrderedNewToBrand14d','avgImpressionsFrequency','bidOptimization','cumulativeReach',
- 'currency','vctr','vtr', 'viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
- 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d',
- 'viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d',
- 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
- ]
- def reportV2_adGroupsRecord_t2_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'adGroups'
- metric = self.adGroups_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020")
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- conn.insert_df("AmazonReport.SD_adGroupsV2", df_report[metric])
- print("插入完成SD_adGroupsV2")
- return df_report[metric]
- def reportV2_adGroupsRecord_t3_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'adGroups'
- metric = self.adGroups_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020")
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SD_adGroupsV2", df_report[metric])
- print("插入完成SD_adGroupsV2")
- return df_report[metric]
- productAds_metrics = [
- 'campaignId','campaignName','adGroupId','adGroupName','adId','asin','sku', 'impressions', 'clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
- 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
- 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU','attributedSales7d',
- 'attributedSales7dSameSKU','attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
- 'attributedSales30dSameSKU','attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d',
- 'attributedUnitsOrdered14d','attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','avgImpressionsFrequency',
- 'cumulativeReach','currency','vctr','vtr','viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
- 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
- 'viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d','videoCompleteViews','videoFirstQuartileViews',
- 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
- ]
- def reportV2_productAds_t2_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'productAds'
- metric = self.productAds_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020")
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- conn.insert_df("AmazonReport.SD_adsV2", df_report[metric])
- print("插入完成SD_adsV2")
- return df_report[metric]
- def reportV2_productAds_t3_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'productAds'
- metric = self.productAds_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00030")
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SD_adsV2", df_report[metric])
- print("插入完成SD_adsV2")
- return df_report[metric]
- targets_metrics = [
- 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
- 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU','attributedConversions30d',
- 'attributedConversions30dSameSKU','attributedDetailPageView14d','attributedOrdersNewToBrand14d',
- 'attributedSales1d','attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU',
- 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
- 'attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d',
- 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','currency','targetingExpression','targetingType',
- 'vctr','vtr','viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d',
- 'viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
- 'viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d','videoCompleteViews',
- 'videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
- ]
- def reportV2_targets_t2_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'targets'
- metric = self.targets_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020")
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Contextual targeting' # {"T00020":"","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- # print(df_report[metric].info())
- conn.insert_df("AmazonReport.SD_targetsV2", df_report[metric])
- print("插入完成SD_targetsV2")
- return df_report[metric]
- def reportV2_targets_t3_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'targets'
- metric = self.targets_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00030")
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SD_targetsV2", df_report[metric])
- print("插入完成SD_targetsV2")
- return df_report[metric]
- asins_metrics = [
- 'campaignId','campaignName','adGroupId','adGroupName','asin','sku','attributedConversions1dOtherSKU',
- 'attributedConversions7dOtherSKU','attributedConversions14dOtherSKU','attributedConversions30dOtherSKU',
- 'attributedSales1dOtherSKU','attributedSales7dOtherSKU','attributedSales14dOtherSKU','attributedSales30dOtherSKU',
- 'attributedUnitsOrdered1dOtherSKU','attributedUnitsOrdered7dOtherSKU','attributedUnitsOrdered14dOtherSKU',
- 'attributedUnitsOrdered30dOtherSKU','currency','otherAsin','viewAttributedUnitsOrdered1dOtherSKU',
- 'viewAttributedUnitsOrdered7dOtherSKU','viewAttributedUnitsOrdered14dOtherSKU','viewAttributedUnitsOrdered30dOtherSKU',
- 'viewAttributedSales1dOtherSKU','viewAttributedSales7dOtherSKU','viewAttributedSales14dOtherSKU',
- 'viewAttributedSales30dOtherSKU','viewAttributedConversions1dOtherSKU','viewAttributedConversions7dOtherSKU',
- 'viewAttributedConversions14dOtherSKU','viewAttributedConversions30dOtherSKU',
- ]
- def reportV2_asins_t2_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'asins'
- metric = self.asins_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020")
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- # print(df_report.info())
- conn.insert_df("AmazonReport.SD_asinsV2", df_report[metric])
- print("插入完成SD_asinsV2")
- return df_report[metric]
- def reportV2_asins_t3_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'asins'
- metric = self.asins_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00030")
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
- conn.insert_df("AmazonReport.SD_asinsV2", df_report[metric])
- print("插入完成SD_asinsV2")
- return df_report[metric]
- campaigns_MT_metrics = [
- 'campaignId','campaignName','impressions','clicks','cost','attributedBrandedSearches14d',
- 'attributedConversions1d','attributedConversions1dSameSKU', 'attributedConversions7d',
- 'attributedConversions7dSameSKU', 'attributedConversions14d','attributedConversions14dSameSKU',
- 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
- 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU', 'attributedSales7d',
- 'attributedSales7dSameSKU', 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
- 'attributedSales30dSameSKU','attributedSalesNewToBrand14d',
- 'attributedUnitsOrdered1d', 'attributedUnitsOrdered7d', 'attributedUnitsOrdered14d',
- 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','campaignBudget',
- 'campaignStatus','costType','currency', 'viewImpressions','viewAttributedBrandedSearches14d',
- 'viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d',
- 'viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
- 'viewAttributedUnitsOrderedNewToBrand14d',
- ] # 'matchedTarget'
- def reportV2_campaign_matchedTarget_t2_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'campaigns'
- metric = self.campaigns_MT_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020", segment='matchedTarget')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
- conn.insert_df("AmazonReport.SD_campaignsMatchedTargetV2", df_report[metric])
- print("插入完成SD_campaignsMatchedTargetV2")
- return df_report[metric]
- def reportV2_campaign_matchedTarget_t3_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'campaigns'
- metric = self.campaigns_MT_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00030", segment='matchedTarget')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
- conn.insert_df("AmazonReport.SD_campaignsMatchedTargetV2", df_report[metric])
- print("插入完成SD_campaignsMatchedTargetV2")
- return df_report[metric]
- adGroups_MT_metrics = [
- 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions1d', 'attributedConversions1dSameSKU',
- 'attributedConversions7d', 'attributedConversions7dSameSKU','attributedConversions14d',
- 'attributedConversions14dSameSKU','attributedConversions30d','attributedConversions30dSameSKU',
- 'attributedDetailPageView14d', 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU',
- 'attributedSales7d','attributedSales7dSameSKU','attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
- 'attributedSales30dSameSKU','attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d',
- 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','bidOptimization',
- 'currency','viewImpressions','viewAttributedBrandedSearches14d','viewAttributedConversions14d',
- 'viewAttributedDetailPageView14d','viewAttributedSales14d','viewAttributedUnitsOrdered14d',
- 'viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d',
- ] # , 'matchedTarget'
- def reportV2_adGroups_matchedTarget_t2_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'adGroups'
- metric = self.adGroups_MT_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020", segment='matchedTarget')
- # print(list_report)
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
- conn.insert_df("AmazonReport.SD_adGroupsMatchedTargetV2", df_report[metric])
- print("插入完成SD_adGroupsMatchedTargetV2")
- return df_report[metric]
- def reportV2_adGroups_matchedTarget_t3_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'adGroups'
- metric = self.adGroups_MT_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00030", segment='matchedTarget')
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
- conn.insert_df("AmazonReport.SD_adGroupsMatchedTargetV2", df_report[metric])
- print("插入完成SD_adGroupsMatchedTargetV2")
- return df_report[metric]
- targets_MT_metrics = [
- 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
- 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU',
- 'attributedConversions7d','attributedConversions7dSameSKU','attributedConversions14d',
- 'attributedConversions14dSameSKU','attributedConversions30d', 'attributedConversions30dSameSKU',
- 'attributedDetailPageView14d','attributedOrdersNewToBrand14d','attributedSales1d',
- 'attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU','attributedSales14d',
- 'attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU','attributedSalesNewToBrand14d',
- 'attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d','attributedUnitsOrdered30d',
- 'attributedUnitsOrderedNewToBrand14d','currency','targetingExpression','targetingType','viewAttributedBrandedSearches14d',
- 'viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d','viewAttributedUnitsOrdered14d',
- 'viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d',
- ]
- def reportV2_targets_matchedTarget_t2_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
- "%Y%m%d")
- params['record_type'] = 'targets'
- metric = self.targets_MT_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00020", segment='matchedTarget')
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
- conn.insert_df("AmazonReport.SD_targetsMatchedTargetV2", df_report[metric])
- print("插入完成SD_targetsMatchedTargetV2")
- return df_report[metric]
- def reportV2_targets_matchedTarget_t3_ETL(self, conn, params={}):
- timeZone_,today = self.today_()
- if params.get("date") == None:
- params["date"] = (
- datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
- params['record_type'] = 'targets'
- metric = self.targets_MT_metrics
- list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
- metrics=metric, tactic="T00030", segment='matchedTarget')
- df_report = pd.json_normalize(list_report)
- date = datetime.strptime(params['date'], '%Y%m%d')
- df_report['date'] = date
- df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
- df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
- conn.insert_df("AmazonReport.SD_targetsMatchedTargetV2", df_report[metric])
- print("插入完成SD_targetsMatchedTargetV2")
- return df_report[metric]
- if __name__ == '__main__':
- AWS_CREDENTIALS = {
- 'lwa_client_id': 'amzn1.application-oa2-client.ebd701cd07854fb38c37ee49ec4ba109',
- 'refresh_token': "Atzr|IwEBIL4ur8kbcwRyxVu_srprAAoTYzujnBvA6jU-0SMxkRgOhGjYJSUNGKvw24EQwJa1jG5RM76mQD2P22AKSq8qSD94LddoXGdKDO74eQVYl0RhuqOMFqdrEZpp1p4bIR6_N8VeSJDHr7UCuo8FiabkSHrkq7tsNvRP-yI-bnpQv4EayPBh7YwHVX3hYdRbhxaBvgJENgCuiEPb35Q2-Z6w6ujjiKUAK2VSbCFpENlEfcHNsjDeY7RCvFlwlCoHj1IeiNIaFTE9yXFu3aEWlExe3LzHv6PZyunEi88QJSXKSh56Um0e0eEg05rMv-VBM83cAqc5POmZnTP1vUdZO8fQv3NFLZ-xU6e1WQVxVPi5Cyqk4jYhGf1Y9t98N654y0tVvw74qNIsTrB-8bGS0Uhfe24oBEWmzObvBY3zhtT1d42myGUJv4pMTU6yPoS83zhPKm3LbUDEpBA1hvvc_09jHk7vUEAuFB-UAZzlht2C1yklzQ",
- 'lwa_client_secret': 'cbf0514186db4df91e04a8905f0a91b605eae4201254ced879d8bb90df4b474d',
- 'profile_id': "3006125408623189"
- }
- conn = Common_ETLMethod(**AWS_CREDENTIALS).clickhouse_connect()
- # SD
- ac_etl = SB_ETL(**AWS_CREDENTIALS)
- # ls = ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
- ls = ac_etl.targets_ETL()
- print(ls)
- # ls.to_csv('temp.csv')
- # print(ls)
- # print(ls.info())
- # print(ls.to_excel('obse11.xlsx'))
- # ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
- # ac_etl.reportV2_campaignsRecord_t3_ETL(conn)
- # ac_etl.reportV2_adGroupsRecord_t2_ETL(conn)
- # ac_etl.reportV2_adGroupsRecord_t3_ETL(conn)
- # ac_etl.reportV2_asins_t2_ETL(conn)
- # ac_etl.reportV2_asins_t3_ETL(conn)
- # ac_etl.reportV2_productAds_t2_ETL(conn)
- # ac_etl.reportV2_productAds_t3_ETL(conn)
- # ac_etl.reportV2_targets_t2_ETL(conn)
- # ac_etl.reportV2_productAds_t3_ETL(conn)
- # ac_etl.reportV2_campaign_matchedTarget_t2_ETL(conn)
- # ac_etl.reportV2_campaign_matchedTarget_t3_ETL(conn)
- # ac_etl.reportV2_adGroups_matchedTarget_t2_ETL(conn)
- # ac_etl.reportV2_adGroups_matchedTarget_t3_ETL(conn)
- # ac_etl.reportV2_targets_matchedTarget_t2_ETL(conn)
- # ac_etl.reportV2_targets_matchedTarget_t3_ETL(conn)
- # SB
- # ac_etl = SB_ETL(**AWS_CREDENTIALS)
- # ac_etl.reportV3_purchasedAsinRecord_ETL(conn)
- # ac_etl.reportV2_campaignsRecord_ETL(conn)
- # ac_etl.reportV2_campaignsVideo_ETL(conn)
- # ac_etl.reportV2_adGroupsRecord_ETL(conn)
- # ac_etl.reportV2_adGroupsVideo_ETL(conn)
- # ac_etl.reportV2_adsRecord_ETL(conn)
- # ac_etl.reportV2_adsVideo_ETL(conn)
- # ac_etl.reportV2_keywordsRecord_ETL(conn)
- # ac_etl.reportV2_keywordsVideo_ETL(conn)
- # ac_etl.reportV2_placementRecord_ETL(conn)
- # ac_etl.reportV2_placementVideo_ETL(conn)
- # ac_etl.reportV2_searchtermsRecord_ETL(conn)
- # ac_etl.reportV2_searchtermsVideo_ETL(conn)
- # ac_etl.reportV2_targetsRecord_ETL(conn)
- # ac_etl.reportV2_targetsVideo_ETL(conn)
- # SP
- # ac_etl = SP_ETL(**AWS_CREDENTIALS)
- # ac_etl.reportV3_campaign_spCampaignsETL(conn)
- # ac_etl.reportV3_adGroup_spCampaignsETL(conn)
- # ac_etl.reportV3_campaignPlacement_spCampaignsETL(conn)
- # ac_etl.reportV3_targeting_spTargetingETL(conn)
- # ac_etl.reportV3_searchTerm_spSearchTermETL(conn)
- # ac_etl.reportV3_advertiser_spAdvertisedProductETL(conn)
- # ac_etl.reportV3_asin_spPurchasedProductETL(conn)
- conn.close()
- ###
|