|
@@ -6,6 +6,7 @@ pd.set_option('display.max_columns', None)
|
|
|
import warnings
|
|
|
warnings.filterwarnings('ignore')
|
|
|
pd.set_option('expand_frame_repr', False)
|
|
|
+from datetime import datetime,timezone
|
|
|
|
|
|
class Common_ETLMethod:
|
|
|
def columnsName_modify(self,df):
|
|
@@ -34,15 +35,16 @@ class Common_ETLMethod:
|
|
|
|
|
|
def expression_split(self,df,segment):
|
|
|
df[segment] = df[segment].astype("string")
|
|
|
- df[segment+str("_type")] = df[segment].str.extract("'type':.+'(.+)',")
|
|
|
- df[segment+str("_value")] = df[segment].str.extract("'value':.+'(.+)'")
|
|
|
+ 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+"'}]")
|
|
|
df.replace(['nan','Nan','NaN'],np.nan,inplace=True)
|
|
|
df.drop(columns=[segment],inplace=True)
|
|
|
return df
|
|
|
|
|
|
class Acount_ETL(Account,Common_ETLMethod):
|
|
|
def portfolio_ETL(self):
|
|
|
- list_portfolio = self.get_portfolio()
|
|
|
+ list_portfolio = self.get_portfolios()
|
|
|
df_portfolio = pd.json_normalize(list_portfolio)
|
|
|
print(self.columnsName_modify(df_portfolio))
|
|
|
return self.columnsName_modify(df_portfolio)
|
|
@@ -84,7 +86,7 @@ class SP_ETL(SPClient,Common_ETLMethod):
|
|
|
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"])
|
|
|
- print(df_budget)
|
|
|
+ return self.columnsName_modify(df_budget)
|
|
|
|
|
|
class SB_ETL(SBClient,Common_ETLMethod):
|
|
|
def campaigns_ETL(self):
|
|
@@ -127,6 +129,38 @@ class SB_ETL(SBClient,Common_ETLMethod):
|
|
|
df_budget = self.TZ_Deal(df_budget,["usageUpdatedTimestamp"])
|
|
|
print(df_budget)
|
|
|
|
|
|
+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")
|
|
|
+ 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)
|
|
|
+ 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")
|
|
|
+ print(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)
|
|
|
+
|
|
|
if __name__ == '__main__':
|
|
|
AWS_CREDENTIALS = {
|
|
|
'lwa_client_id': 'amzn1.application-oa2-client.ebd701cd07854fb38c37ee49ec4ba109',
|
|
@@ -134,6 +168,6 @@ if __name__ == '__main__':
|
|
|
'lwa_client_secret': 'cbf0514186db4df91e04a8905f0a91b605eae4201254ced879d8bb90df4b474d',
|
|
|
'profile_id': "3006125408623189"
|
|
|
}
|
|
|
- ac_etl = SB_ETL(**AWS_CREDENTIALS)
|
|
|
+ ac_etl = SD_ETL(**AWS_CREDENTIALS)
|
|
|
# print(ac_etl.budget_ETL(campaign_ids=["126327624499318"]))
|
|
|
- print(ac_etl.keyword_ETL())
|
|
|
+ print(ac_etl.budget_ETL(["257424912382921"]))
|