|
@@ -0,0 +1,88 @@
|
|
|
+from sync_amz_data.public.amz_ad_client import SPClient,Account
|
|
|
+import pandas as pd
|
|
|
+import numpy as np
|
|
|
+from dateutil.parser import parse
|
|
|
+
|
|
|
+class Acount_ETL(Account):
|
|
|
+ def columnsName_modify(self,df):
|
|
|
+ df.columns = [i.replace(".","_") for i in df.columns]
|
|
|
+ return df
|
|
|
+
|
|
|
+ def portfolio_ETL(self):
|
|
|
+ list_portfolio = self.get_portfolio()
|
|
|
+ df_portfolio = pd.json_normalize(list_portfolio)
|
|
|
+ print(self.columnsName_modify(df_portfolio))
|
|
|
+ return self.columnsName_modify(df_portfolio)
|
|
|
+
|
|
|
+class SP_ELT(SPClient):
|
|
|
+ def columnsName_modify(self,df):
|
|
|
+ df.columns = [i.replace(".","_") for i in df.columns]
|
|
|
+ return df
|
|
|
+
|
|
|
+ def time_stamp_convert(self,df,time_columns:list):
|
|
|
+ for time_column in time_columns:
|
|
|
+ df[time_column] = pd.to_datetime(df[time_column])
|
|
|
+ df[time_columns] = df[time_columns].astype("datetime64")
|
|
|
+ return df
|
|
|
+
|
|
|
+ def TZ_Deal(self,df, time_columns):
|
|
|
+ for time_column in time_columns:
|
|
|
+ df[time_column] = df[time_column].map(lambda x: parse(x))
|
|
|
+ df[time_columns] = df[time_columns].astype("datetime64")
|
|
|
+ return df
|
|
|
+
|
|
|
+ def placement_segmentsplit(self,df,segment):
|
|
|
+ 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 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 adGroup_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())
|
|
|
+ df_targets = pd.json_normalize(list_targets)
|
|
|
+ df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
|
|
|
+ return self.columnsName_modify(df_targets)
|
|
|
+
|
|
|
+ def budget_ETL(self):
|
|
|
+ list_budget = self.get_budget(campaign_ids = ["254478421786009"])
|
|
|
+ df_budget = pd.json_normalize(list_budget)
|
|
|
+ # df_budget = self.TZ_Deal(df_budget,)
|
|
|
+ print(df_budget)
|
|
|
+
|
|
|
+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"
|
|
|
+ }
|
|
|
+ ac_etl = SP_ELT(**AWS_CREDENTIALS)
|
|
|
+ print(ac_etl.keywords_ETL())
|