|
@@ -104,34 +104,6 @@ class SP_ETL(SPClient,Common_ETLMethod):
|
|
|
return self.columnsName_modify(df_budget)
|
|
|
|
|
|
class SB_ETL(SBClient,Common_ETLMethod):
|
|
|
- reportMetrics = [
|
|
|
- 'applicableBudgetRuleId',
|
|
|
- 'applicableBudgetRuleName',
|
|
|
- 'attributedConversions14d',
|
|
|
- 'attributedConversions14dSameSKU',
|
|
|
- 'attributedDetailPageViewsClicks14d',
|
|
|
- 'attributedOrderRateNewToBrand14d',
|
|
|
- 'attributedOrdersNewToBrand14d',
|
|
|
- 'attributedOrdersNewToBrandPercentage14d',
|
|
|
- 'attributedSales14d',
|
|
|
- 'attributedSales14dSameSKU',
|
|
|
- 'attributedSalesNewToBrand14d',
|
|
|
- 'attributedSalesNewToBrandPercentage14d',
|
|
|
- 'attributedUnitsOrderedNewToBrand14d',
|
|
|
- 'attributedUnitsOrderedNewToBrandPercentage14d',
|
|
|
- 'campaignBudget',
|
|
|
- 'campaignBudgetType',
|
|
|
- 'campaignId',
|
|
|
- 'campaignName',
|
|
|
- 'campaignRuleBasedBudget',
|
|
|
- 'campaignStatus',
|
|
|
- 'clicks',
|
|
|
- 'cost',
|
|
|
- 'dpv14d',
|
|
|
- 'impressions',
|
|
|
- 'unitsSold14d',
|
|
|
- 'attributedBrandedSearches14d',
|
|
|
- 'topOfSearchImpressionShare']
|
|
|
def campaigns_ETL(self):
|
|
|
list_campaign_SB = list(self.iter_campaigns(**{"includeExtendedDataFields":True}))
|
|
|
df_campaign = pd.json_normalize(list_campaign_SB)
|
|
@@ -172,18 +144,162 @@ class SB_ETL(SBClient,Common_ETLMethod):
|
|
|
df_budget = self.TZ_Deal(df_budget,["usageUpdatedTimestamp"])
|
|
|
return self.columnsName_modify(df_budget)
|
|
|
|
|
|
- def report_campaignsRecord_ETL(self):
|
|
|
+ def reportV3_purchasedAsinRecord_ETL(self,**params):
|
|
|
today = datetime.today()
|
|
|
- date = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y%m%d")
|
|
|
- print(date)
|
|
|
- need_removedList = []
|
|
|
- if need_removedList is not None:
|
|
|
- [SB_ETL.reportMetrics.remove(i) for i in need_removedList]
|
|
|
- list_campaigns_report = self.get_v3_report(record_type="campaigns",metrics=SB_ETL.reportMetrics,report_date=date)
|
|
|
+ if params.get("endDate")==None:
|
|
|
+ params["endDate"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y-%m-%d")
|
|
|
+ if params.get("startDate") ==None:
|
|
|
+ params["startDate"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-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_campaigns_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_campaigns_report)
|
|
|
df_campaign_report = pd.json_normalize(list_campaigns_report)
|
|
|
return df_campaign_report
|
|
|
|
|
|
+ def reportV2_campaignsRecord_ETL(self,**params):
|
|
|
+ today = datetime.today()
|
|
|
+ if params.get("date")==None:
|
|
|
+ params["date"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y%m%d")
|
|
|
+ params['record_type']='campaigns'
|
|
|
+ if params.get('metrics')==None:
|
|
|
+ params['metrics'] = [
|
|
|
+ 'applicableBudgetRuleId', 'applicableBudgetRuleName', 'attributedConversions14d',
|
|
|
+ 'attributedConversions14dSameSKU', 'attributedDetailPageViewsClicks14d', 'attributedOrderRateNewToBrand14d',
|
|
|
+ 'attributedOrdersNewToBrand14d', 'attributedOrdersNewToBrandPercentage14d', 'attributedSales14d',
|
|
|
+ 'attributedSales14dSameSKU', 'attributedSalesNewToBrand14d', 'attributedSalesNewToBrandPercentage14d',
|
|
|
+ 'attributedUnitsOrderedNewToBrand14d', 'attributedUnitsOrderedNewToBrandPercentage14d', 'campaignBudget',
|
|
|
+ 'campaignBudgetType', 'campaignId', 'campaignName', 'campaignRuleBasedBudget', 'campaignStatus', 'clicks', 'cost',
|
|
|
+ 'dpv14d', 'impressions', 'unitsSold14d', 'attributedBrandedSearches14d', 'topOfSearchImpressionShare'
|
|
|
+ ]
|
|
|
+ list_campaigns_report = self.get_v2_report(record_type=params['record_type'],report_date=params["date"],metrics=params['metrics'])
|
|
|
+ # print(list_campaigns_report)
|
|
|
+ df_campaign_report = pd.json_normalize(list_campaigns_report)
|
|
|
+ return df_campaign_report
|
|
|
+ def reportV2_placementRecord_ETL(self,**params):
|
|
|
+ today = datetime.today()
|
|
|
+ if params.get("date")==None:
|
|
|
+ params["date"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y%m%d")
|
|
|
+ params['record_type']='campaigns'
|
|
|
+ if params.get('metrics')==None:
|
|
|
+ params['metrics'] = [
|
|
|
+ 'applicableBudgetRuleId', 'applicableBudgetRuleName', 'attributedConversions14d',
|
|
|
+ 'attributedConversions14dSameSKU', 'attributedDetailPageViewsClicks14d',
|
|
|
+ 'attributedOrderRateNewToBrand14d', 'attributedOrdersNewToBrand14d', 'attributedOrdersNewToBrandPercentage14d',
|
|
|
+ 'attributedSales14d', 'attributedSales14dSameSKU',
|
|
|
+ 'attributedSalesNewToBrand14d', 'attributedSalesNewToBrandPercentage14d', 'attributedUnitsOrderedNewToBrand14d',
|
|
|
+ 'attributedUnitsOrderedNewToBrandPercentage14d',
|
|
|
+ 'campaignBudget', 'campaignBudgetType', 'campaignId', 'campaignName', 'campaignRuleBasedBudget',
|
|
|
+ 'campaignStatus',
|
|
|
+ 'clicks', 'cost', 'dpv14d', 'impressions', 'unitsSold14d', 'attributedBrandedSearches14d'
|
|
|
+ ] #'placement'
|
|
|
+ # print(date)
|
|
|
+ list_campaigns_report = self.get_v2_report(record_type=params['record_type'],report_date=params["date"],metrics=params['metrics'],segment='placement')
|
|
|
+ # print(list_campaigns_report)
|
|
|
+ df_campaign_report = pd.json_normalize(list_campaigns_report)
|
|
|
+ return df_campaign_report
|
|
|
+
|
|
|
+ def reportV2_adGroupsRecord_ETL(self,**params):
|
|
|
+ today = datetime.today()
|
|
|
+ if params.get("date")==None:
|
|
|
+ params["date"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y%m%d")
|
|
|
+ params['record_type']='adGroups'
|
|
|
+ if params.get('metrics')==None:
|
|
|
+ params['metrics'] = [
|
|
|
+ 'adGroupId', 'adGroupName','attributedConversions14d', 'attributedConversions14dSameSKU', 'attributedDetailPageViewsClicks14d',
|
|
|
+ 'attributedOrderRateNewToBrand14d', 'attributedOrdersNewToBrand14d', 'attributedOrdersNewToBrandPercentage14d', 'attributedSales14d',
|
|
|
+ 'attributedSales14dSameSKU', 'attributedSalesNewToBrand14d', 'attributedSalesNewToBrandPercentage14d', 'attributedUnitsOrderedNewToBrand14d',
|
|
|
+ 'attributedUnitsOrderedNewToBrandPercentage14d', 'campaignBudget', 'campaignBudgetType', 'campaignId', 'campaignName', 'campaignStatus',
|
|
|
+ 'clicks', 'cost', 'dpv14d', 'impressions', 'unitsSold14d', 'attributedBrandedSearches14d'
|
|
|
+ ] #
|
|
|
+ # print(date)
|
|
|
+ list_campaigns_report = self.get_v2_report(record_type=params['record_type'],report_date=params["date"],metrics=params['metrics'])
|
|
|
+ # print(list_campaigns_report)
|
|
|
+ df_campaign_report = pd.json_normalize(list_campaigns_report)
|
|
|
+ return df_campaign_report
|
|
|
+
|
|
|
+ def reportV2_targetsRecord_ETL(self,**params):
|
|
|
+ today = datetime.today()
|
|
|
+ if params.get("date")==None:
|
|
|
+ params["date"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y%m%d")
|
|
|
+ params['record_type']='targets'
|
|
|
+ if params.get('metrics')==None:
|
|
|
+ params['metrics'] = [
|
|
|
+ 'adGroupId', 'adGroupName', 'attributedConversions14d', 'attributedConversions14dSameSKU', 'attributedDetailPageViewsClicks14d', 'attributedOrderRateNewToBrand14d',
|
|
|
+ 'attributedOrdersNewToBrand14d', 'attributedOrdersNewToBrandPercentage14d', 'attributedSales14d', 'attributedSales14dSameSKU', 'attributedSalesNewToBrand14d',
|
|
|
+ 'attributedSalesNewToBrandPercentage14d', 'attributedUnitsOrderedNewToBrand14d', 'attributedUnitsOrderedNewToBrandPercentage14d', 'campaignBudget', 'campaignBudgetType',
|
|
|
+ 'campaignId', 'campaignName', 'campaignStatus', 'clicks', 'cost', 'dpv14d', 'impressions', 'targetId', 'targetingExpression', 'targetingText', 'targetingType', 'unitsSold14d',
|
|
|
+ 'attributedBrandedSearches14d', 'topOfSearchImpressionShare'
|
|
|
+ ] #
|
|
|
+ # print(date)
|
|
|
+ list_campaigns_report = self.get_v2_report(record_type=params['record_type'],report_date=params["date"],metrics=params['metrics'])
|
|
|
+ # print(list_campaigns_report)
|
|
|
+ df_campaign_report = pd.json_normalize(list_campaigns_report)
|
|
|
+ return df_campaign_report
|
|
|
+
|
|
|
+ def reportV2_keywordsRecord_ETL(self,**params):
|
|
|
+ today = datetime.today()
|
|
|
+ if params.get("date")==None:
|
|
|
+ params["date"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y%m%d")
|
|
|
+ params['record_type']='keywords'
|
|
|
+ if params.get('metrics')==None:
|
|
|
+ params['metrics'] = [
|
|
|
+ 'adGroupId', 'adGroupName', 'applicableBudgetRuleId', 'applicableBudgetRuleName', 'attributedConversions14d', 'attributedConversions14dSameSKU',
|
|
|
+ 'attributedDetailPageViewsClicks14d', 'attributedOrderRateNewToBrand14d', 'attributedOrdersNewToBrand14d', 'attributedOrdersNewToBrandPercentage14d',
|
|
|
+ 'attributedSales14d', 'attributedSales14dSameSKU', 'attributedSalesNewToBrand14d', 'attributedSalesNewToBrandPercentage14d', 'attributedUnitsOrderedNewToBrand14d',
|
|
|
+ 'attributedUnitsOrderedNewToBrandPercentage14d', 'campaignBudget', 'campaignBudgetType', 'campaignId', 'campaignName', 'campaignRuleBasedBudget', 'campaignStatus',
|
|
|
+ 'clicks', 'cost', 'dpv14d', 'impressions', 'keywordBid', 'keywordId', 'keywordStatus', 'keywordText', 'matchType', 'searchTermImpressionRank', 'searchTermImpressionShare',
|
|
|
+ 'unitsSold14d', 'attributedBrandedSearches14d', 'topOfSearchImpressionShare'
|
|
|
+ ] #
|
|
|
+ # print(date)
|
|
|
+ list_campaigns_report = self.get_v2_report(record_type=params['record_type'],report_date=params["date"],metrics=params['metrics'])
|
|
|
+ # print(list_campaigns_report)
|
|
|
+ df_campaign_report = pd.json_normalize(list_campaigns_report)
|
|
|
+ return df_campaign_report
|
|
|
+
|
|
|
+ def reportV2_searchtermsRecord_ETL(self,**params):
|
|
|
+ today = datetime.today()
|
|
|
+ if params.get("date")==None:
|
|
|
+ params["date"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y%m%d")
|
|
|
+ params['record_type']='keywords'
|
|
|
+ if params.get('metrics')==None:
|
|
|
+ params['metrics'] = [
|
|
|
+ 'adGroupId', 'adGroupName', 'attributedConversions14d', 'attributedSales14d', 'campaignBudget',
|
|
|
+ 'campaignBudgetType', 'campaignId', 'campaignName', 'campaignStatus', 'clicks', 'cost', 'impressions', 'keywordBid',
|
|
|
+ 'keywordId', 'keywordStatus', 'keywordText', 'matchType','searchTermImpressionRank',
|
|
|
+ 'searchTermImpressionShare'
|
|
|
+ ] #
|
|
|
+ # print(date)
|
|
|
+ list_campaigns_report = self.get_v2_report(record_type=params['record_type'],report_date=params["date"],metrics=params['metrics'],segment='query')
|
|
|
+ # print(list_campaigns_report)
|
|
|
+ df_campaign_report = pd.json_normalize(list_campaigns_report)
|
|
|
+ return df_campaign_report
|
|
|
+
|
|
|
+ def reportV2_adsRecord_ETL(self,**params):
|
|
|
+ today = datetime.today()
|
|
|
+ if params.get("date")==None:
|
|
|
+ params["date"] = (datetime(today.year,today.month,today.day,tzinfo=timezone.utc)-timedelta(days=1)).strftime("%Y%m%d")
|
|
|
+ params['record_type']='ads'
|
|
|
+ if params.get('metrics')==None:
|
|
|
+ params['metrics'] = [
|
|
|
+ 'adGroupId', 'adGroupName', 'applicableBudgetRuleId', 'applicableBudgetRuleName', 'attributedConversions14d', 'attributedConversions14dSameSKU',
|
|
|
+ 'attributedDetailPageViewsClicks14d', 'attributedOrderRateNewToBrand14d', 'attributedOrdersNewToBrand14d', 'attributedOrdersNewToBrandPercentage14d',
|
|
|
+ 'attributedSales14d', 'attributedSales14dSameSKU', 'attributedSalesNewToBrand14d', 'attributedSalesNewToBrandPercentage14d', 'attributedUnitsOrderedNewToBrand14d',
|
|
|
+ 'attributedUnitsOrderedNewToBrandPercentage14d', 'campaignBudget', 'campaignBudgetType', 'campaignId', 'campaignName', 'campaignRuleBasedBudget', 'campaignStatus',
|
|
|
+ 'clicks', 'cost', 'dpv14d', 'impressions', 'unitsSold14d', 'vctr', 'attributedBrandedSearches14d'
|
|
|
+ ] #
|
|
|
+ # print(date)
|
|
|
+ list_campaigns_report = self.get_v2_report(record_type=params['record_type'],report_date=params["date"],metrics=params['metrics'])
|
|
|
+ # print(list_campaigns_report)
|
|
|
+ df_campaign_report = pd.json_normalize(list_campaigns_report)
|
|
|
+ return df_campaign_report
|
|
|
|
|
|
class SD_ETL(SDClient,Common_ETLMethod):
|
|
|
def campaigns_ETL(self):
|
|
@@ -228,4 +344,4 @@ if __name__ == '__main__':
|
|
|
}
|
|
|
ac_etl = SB_ETL(**AWS_CREDENTIALS)
|
|
|
# print(ac_etl.budget_ETL(campaign_ids=["126327624499318"]))
|
|
|
- print(ac_etl.report_targetsRecord_ETL())
|
|
|
+ print(ac_etl.reportV2_adsRecord_ETL(**{}))
|