|  | @@ -78,13 +78,15 @@ class Common_ETLMethod(BaseClient):
 | 
											
												
													
														|  |      def get_keyOvalue(self,expressions, result: Literal['value', 'type']):
 |  |      def get_keyOvalue(self,expressions, result: Literal['value', 'type']):
 | 
											
												
													
														|  |          if expressions not in [None,pd.NA,pd.NaT]:
 |  |          if expressions not in [None,pd.NA,pd.NaT]:
 | 
											
												
													
														|  |              if len(expressions) > 1:
 |  |              if len(expressions) > 1:
 | 
											
												
													
														|  | -                return [i[result] for i in expressions]
 |  | 
 | 
											
												
													
														|  | 
 |  | +                return [i.get(result) for i in expressions]
 | 
											
												
													
														|  |              if len(expressions) == 1:
 |  |              if len(expressions) == 1:
 | 
											
												
													
														|  | -                sub_ = expressions[0][result]
 |  | 
 | 
											
												
													
														|  | -                if type(sub_) == str:
 |  | 
 | 
											
												
													
														|  | 
 |  | +                sub_ = expressions[0].get(result)
 | 
											
												
													
														|  | 
 |  | +                if sub_ is None:
 | 
											
												
													
														|  | 
 |  | +                    return None
 | 
											
												
													
														|  | 
 |  | +                elif type(sub_) == str:
 | 
											
												
													
														|  |                      return sub_
 |  |                      return sub_
 | 
											
												
													
														|  |                  elif type(sub_) == list:
 |  |                  elif type(sub_) == list:
 | 
											
												
													
														|  | -                    return [i[result] for i in sub_]
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    return [i.get(result) for i in sub_]
 | 
											
												
													
														|  |                  else:
 |  |                  else:
 | 
											
												
													
														|  |                      return expressions
 |  |                      return expressions
 | 
											
												
													
														|  |          else:
 |  |          else:
 | 
											
										
											
												
													
														|  | @@ -167,9 +169,14 @@ class SP_ETL(SPClient, Common_ETLMethod):
 | 
											
												
													
														|  |          return self.columnsName_modify(df_keywords_SP)
 |  |          return self.columnsName_modify(df_keywords_SP)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def targets_ETL(self):
 |  |      def targets_ETL(self):
 | 
											
												
													
														|  | -        list_targets = list(self.iter_targets())
 |  | 
 | 
											
												
													
														|  | 
 |  | +        list_targets = list(self.iter_targets(**{"includeExtendedDataFields": True}))
 | 
											
												
													
														|  |          df_targets = pd.json_normalize(list_targets)
 |  |          df_targets = pd.json_normalize(list_targets)
 | 
											
												
													
														|  | 
 |  | +        print("--")
 | 
											
												
													
														|  |          df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
 |  |          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)
 |  |          return self.columnsName_modify(df_targets)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def budget_ETL(self, campaign_ids: list):
 |  |      def budget_ETL(self, campaign_ids: list):
 | 
											
										
											
												
													
														|  | @@ -1002,8 +1009,8 @@ class SD_ETL(SDClient, Common_ETLMethod):
 | 
											
												
													
														|  |          df_targets = pd.json_normalize(list_targets)
 |  |          df_targets = pd.json_normalize(list_targets)
 | 
											
												
													
														|  |          # df_targets = self.expression_split(df_targets, "resolvedExpression")
 |  |          # df_targets = self.expression_split(df_targets, "resolvedExpression")
 | 
											
												
													
														|  |          df_targets = self.id_type_trans(df_targets)
 |  |          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'))
 |  | 
 | 
											
												
													
														|  | 
 |  | +        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)
 |  |          return self.columnsName_modify(df_targets)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def budget_ETL(self, campaignsIds: list):
 |  |      def budget_ETL(self, campaignsIds: list):
 | 
											
										
											
												
													
														|  | @@ -1784,9 +1791,12 @@ if __name__ == '__main__':
 | 
											
												
													
														|  |      conn = Common_ETLMethod(**AWS_CREDENTIALS).clickhouse_connect()
 |  |      conn = Common_ETLMethod(**AWS_CREDENTIALS).clickhouse_connect()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      # SD
 |  |      # SD
 | 
											
												
													
														|  | -    ac_etl = SD_ETL(**AWS_CREDENTIALS)
 |  | 
 | 
											
												
													
														|  | -    ls = ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
 |  | 
 | 
											
												
													
														|  | 
 |  | +    ac_etl = SB_ETL(**AWS_CREDENTIALS)
 | 
											
												
													
														|  | 
 |  | +    # ls = ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
 | 
											
												
													
														|  | 
 |  | +    ls = ac_etl.targets_ETL()
 | 
											
												
													
														|  |      print(ls)
 |  |      print(ls)
 | 
											
												
													
														|  | 
 |  | +    # ls.to_csv('temp.csv')
 | 
											
												
													
														|  | 
 |  | +    # print(ls)
 | 
											
												
													
														|  |      # print(ls.info())
 |  |      # print(ls.info())
 | 
											
												
													
														|  |      # print(ls.to_excel('obse11.xlsx'))
 |  |      # print(ls.to_excel('obse11.xlsx'))
 | 
											
												
													
														|  |      # ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
 |  |      # ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
 |