start_sync_amz.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. import time
  2. import pandas as pd
  3. from retry import retry
  4. from sync_amz_data.settings import LOG_CONF
  5. import logging.config
  6. logging.config.dictConfig(LOG_CONF)
  7. from sync_amz_data.public.amz_ad_client import shop_infos
  8. from sync_amz_data.DataTransform.Data_ETL import Common_ETLMethod,SP_ETL,SB_ETL,SD_ETL
  9. from apscheduler.schedulers.blocking import BlockingScheduler
  10. from datetime import datetime,timedelta
  11. def pre_func(AWS_CREDENTIALS,date_):
  12. # conn = Common_ETLMethod.clickhouse_connect()
  13. conn = ''
  14. sb_report = SB_ETL(**AWS_CREDENTIALS)
  15. sb_report.reportV3_campaign_sbCampaigns_ETL(conn, params={"startDate": date_, "endDate": date_,
  16. "date": date_.replace("-", "")})
  17. sb_report.reportV3_adGroup_sbAdGroup_ETL(conn, params={"startDate": date_, "endDate": date_,
  18. "date": date_.replace("-", "")})
  19. sb_report.reportV3_adGroup_sbAdGroup_ETL(conn, params={"startDate": date_, "endDate": date_,
  20. "date": date_.replace("-", "")})
  21. sb_report.reportV3_sbCampaignPlacement_ETL(conn, params={"startDate": date_, "endDate": date_,
  22. "date": date_.replace("-", "")})
  23. sb_report.reportV3_sbTargeting_ETL(conn,
  24. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  25. sb_report.reportV3_sbSearchTerm_ETL(conn,
  26. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  27. sb_report.reportV3_sbAds_ETL(conn, params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  28. sb_report.reportV3_purchasedAsinRecord_ETL(conn, params={"startDate": date_, "endDate": date_,
  29. "date": date_.replace("-", "")})
  30. sb_report.reportV3_purchasedAsinRecord_ETL(conn, params={"startDate": date_, "endDate": date_,
  31. "date": date_.replace("-", "")})
  32. sb_report.reportV2_campaignsRecord_ETL(conn, params={"startDate": date_, "endDate": date_,
  33. "date": date_.replace("-", "")})
  34. sb_report.reportV2_campaignsVideo_ETL(conn,
  35. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  36. sb_report.reportV2_adGroupsRecord_ETL(conn,
  37. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  38. sb_report.reportV2_adGroupsVideo_ETL(conn,
  39. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  40. sb_report.reportV2_adsRecord_ETL(conn,
  41. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  42. sb_report.reportV2_adsVideo_ETL(conn, params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  43. sb_report.reportV2_keywordsRecord_ETL(conn,
  44. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  45. sb_report.reportV2_keywordsVideo_ETL(conn,
  46. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  47. sb_report.reportV2_placementRecord_ETL(conn, params={"startDate": date_, "endDate": date_,
  48. "date": date_.replace("-", "")})
  49. sb_report.reportV2_placementVideo_ETL(conn,
  50. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  51. sb_report.reportV2_searchtermsRecord_ETL(conn, params={"startDate": date_, "endDate": date_,
  52. "date": date_.replace("-", "")})
  53. sb_report.reportV2_searchtermsVideo_ETL(conn, params={"startDate": date_, "endDate": date_,
  54. "date": date_.replace("-", "")})
  55. sb_report.reportV2_targetsRecord_ETL(conn,
  56. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  57. sb_report.reportV2_targetsVideo_ETL(conn,
  58. params={"startDate": date_, "endDate": date_, "date": date_.replace("-", "")})
  59. time.sleep(5)
  60. conn = SP_ETL(**AWS_CREDENTIALS).clickhouse_connect()
  61. sp_report = SP_ETL(**AWS_CREDENTIALS)
  62. sp_report.reportV3_campaign_spCampaignsETL(conn, params={"startDate": date_, "endDate": date_,
  63. "date": date_.replace("-", "")})
  64. sp_report.reportV3_adGroup_spCampaignsETL(conn, params={"startDate": date_, "endDate": date_,
  65. "date": date_.replace("-", "")})
  66. sp_report.reportV3_campaignPlacement_spCampaignsETL(conn, params={"startDate": date_, "endDate": date_,
  67. "date": date_.replace("-", "")})
  68. sp_report.reportV3_targeting_spTargetingETL(conn, params={"startDate": date_, "endDate": date_,
  69. "date": date_.replace("-", "")})
  70. sp_report.reportV3_searchTerm_spSearchTermETL(conn, params={"startDate": date_, "endDate": date_,
  71. "date": date_.replace("-", "")})
  72. sp_report.reportV3_advertiser_spAdvertisedProductETL(conn, params={"startDate": date_, "endDate": date_,
  73. "date": date_.replace("-", "")})
  74. sp_report.reportV3_asin_spPurchasedProductETL(conn, params={"startDate": date_, "endDate": date_,
  75. "date": date_.replace("-", "")})
  76. time.sleep(5)
  77. conn = SD_ETL(**AWS_CREDENTIALS).clickhouse_connect()
  78. sd_report = SD_ETL(**AWS_CREDENTIALS)
  79. sd_report.reportV3_campaign_sdCampaigns_ETL(conn, params={"startDate": date_, "endDate": date_,
  80. "date": date_.replace("-", "")})
  81. sd_report.reportV3_campaignMT_sdCampaigns_ETL(conn, params={"startDate": date_, "endDate": date_,
  82. "date": date_.replace("-", "")})
  83. sd_report.reportV3_adgroup_sdAdGroup_ETL(conn, params={"startDate": date_, "endDate": date_,
  84. "date": date_.replace("-", "")})
  85. sd_report.reportV3_adgroupMT_sdAdGroup_ETL(conn, params={"startDate": date_, "endDate": date_,
  86. "date": date_.replace("-", "")})
  87. sd_report.reportV3_targeting_sdTargeting_ETL(conn, params={"startDate": date_, "endDate": date_,
  88. "date": date_.replace("-", "")})
  89. sd_report.reportV3_targetingMT_sdTargeting_ETL(conn, params={"startDate": date_, "endDate": date_,
  90. "date": date_.replace("-", "")})
  91. sd_report.reportV3_asin_sdPurchasedProduct_ETL(conn, params={"startDate": date_, "endDate": date_,
  92. "date": date_.replace("-", "")})
  93. sd_report.reportV3_advertiser_sdAdvertisedProduct_ETL(conn, params={"startDate": date_, "endDate": date_,
  94. "date": date_.replace("-", "")})
  95. # sd_report.reportV2_campaignsRecord_t2_ETL(conn,params=para)
  96. # sd_report.reportV2_campaignsRecord_t3_ETL(conn,params=para)
  97. # sd_report.reportV2_adGroupsRecord_t2_ETL(conn,params=para)
  98. # sd_report.reportV2_adGroupsRecord_t3_ETL(conn,params=para)
  99. # sd_report.reportV2_asins_t2_ETL(conn,params=para)
  100. # sd_report.reportV2_asins_t3_ETL(conn,params=para)
  101. # sd_report.reportV2_productAds_t2_ETL(conn,params=para)
  102. # sd_report.reportV2_productAds_t3_ETL(conn,params=para)
  103. # sd_report.reportV2_targets_t2_ETL(conn,params=para)
  104. # sd_report.reportV2_targets_t3_ETL(conn,params=para)
  105. # sd_report.reportV2_campaign_matchedTarget_t2_ETL(conn,params=para)
  106. # sd_report.reportV2_campaign_matchedTarget_t3_ETL(conn,params=para)
  107. # sd_report.reportV2_adGroups_matchedTarget_t2_ETL(conn,params=para)
  108. # sd_report.reportV2_adGroups_matchedTarget_t3_ETL(conn,params=para)
  109. # sd_report.reportV2_targets_matchedTarget_t2_ETL(conn,params=para)
  110. # sd_report.reportV2_targets_matchedTarget_t3_ETL(conn,params=para)
  111. time.sleep(5)
  112. def amz_report(AWS_CREDENTIALS,para=None):
  113. count = 1
  114. list_date = [((datetime.today()+timedelta(days=i)).date()).isoformat() for i in range(-2,-8,-1)]
  115. # conn = SB_ETL(**AWS_CREDENTIALS).clickhouse_connect()
  116. # conn.command('')
  117. if para is not None:
  118. list_date = [para['startDate']]
  119. # print(list_date)
  120. delete_list = [
  121. 'SB_sbAdGroup_adGroupV3',
  122. 'SB_sbAds_adsV3',
  123. 'SB_sbCampaigns_campaignV3',
  124. 'SB_sbCampaigns_placementV3',
  125. 'SB_sbPurchasedProduct_asinV3',
  126. 'SB_sbSearchTerm_searchTermV3',
  127. 'SB_sbTargeting_targetingV3',
  128. 'SD_advertiser_sdAdvertisedProductV3',
  129. 'SD_asin_sdPurchasedProductV3',
  130. 'SD_sdAdGroup_adGroupMatchedTargetV3',
  131. 'SD_sdAdGroup_adGroupV3',
  132. 'SD_sdCampaigns_campaignMatchedTargetV3',
  133. 'SD_sdCampaigns_campaignV3',
  134. 'SD_targeting_sdTargetingMatchedTargetV3',
  135. 'SD_targeting_sdTargetingV3',
  136. 'SP_spAdvertisedProduct_advertiserV3',
  137. 'SP_spCampaigns_adGroupV3',
  138. 'SP_spCampaigns_campaignV3',
  139. 'SP_spCampaigns_placementV3',
  140. 'SP_spPurchasedProduct_asinV3',
  141. 'SP_spSearchTerm_searchTermV3',
  142. 'SP_spTargeting_targetingV3']
  143. # conn = SP_ETL(**AWS_CREDENTIALS).clickhouse_connect()
  144. # for i in delete_list:
  145. # conn.command(f"delete from AmazonReport.{i} where date='{(datetime.today()-timedelta(days=8)).date().isoformat()}' and profileId='{AWS_CREDENTIALS['profile_id']}'")
  146. for date_ in list_date:
  147. print(date_)
  148. print(date_.replace("-", ""))
  149. # for i in delete_list:
  150. # conn.command(f"delete from AmazonReport.{i} where date='{list_date[-2]}' and profileId='{AWS_CREDENTIALS['profile_id']}'")
  151. try:
  152. refresh_token = shop_infos(AWS_CREDENTIALS['profile_id'])['refresh_token']
  153. AWS_CREDENTIALS['refresh_token'] = refresh_token
  154. pre_func(AWS_CREDENTIALS,date_)
  155. except Exception as e:
  156. print(e)
  157. pre_func(AWS_CREDENTIALS,date_)
  158. if datetime.today().weekday() in [2,6]:
  159. print('execute func2')
  160. try:
  161. date_list = func_2(delete_list)
  162. func_3(date_list)
  163. except Exception as e:
  164. logging.warning(e)
  165. date_list = func_2(delete_list)
  166. func_3(date_list)
  167. def func_2(delete_list):
  168. conn = SP_ETL(**AWS_CREDENTIALS).clickhouse_connect()
  169. date_list = []
  170. for table_name in delete_list:
  171. check_date = (datetime.today() + timedelta(days=-14)).date().isoformat()
  172. try:
  173. locals()[table_name] = conn.query_df(
  174. f"select date,SUM(impressions) as impressions from AmazonReport.`{table_name}` where date >='{check_date}' group by date,profileId")
  175. except:
  176. try:
  177. locals()[table_name] = conn.query_df(
  178. f"select date,SUM(salesOtherSku1d) as salesOtherSku1d from AmazonReport.`{table_name}` where date >='{check_date}' group by date,profileId")
  179. except:
  180. try:
  181. locals()[table_name] = conn.query_df(
  182. f"select date,SUM(salesBrandHalo) as salesBrandHalo from AmazonReport.`{table_name}` where date >='{check_date}' group by date,profileId")
  183. except:
  184. locals()[table_name] = conn.query_df(
  185. f"select date,SUM(sales14d) as sales14d from AmazonReport.`{table_name}` where date >='{check_date}' group by date,profileId")
  186. try:
  187. locals()[table_name].columns = ['date', 'refer_']
  188. locals()[table_name]['refer_'] = locals()[table_name]['refer_'].astype('float64')
  189. todayMinus2 = (datetime.today().date() + timedelta(days=-2))
  190. reback_21days = (todayMinus2 + timedelta(days=-8)).isoformat()
  191. df = pd.date_range(start=reback_21days, end=todayMinus2.isoformat(), freq='1d')
  192. df1 = pd.DataFrame(df, columns=['date_'])
  193. merge_df = df1.merge(locals()[table_name], left_on=['date_'], right_on=['date'], how='left')
  194. rel = merge_df.query("date_!=date or refer_<1 or refer_.isna()")['date_'].map(
  195. lambda x: x.date().isoformat()).tolist()
  196. print(rel, date_list)
  197. if len(rel) > 0:
  198. for date in rel:
  199. date_list.extend([date])
  200. conn = SP_ETL(**AWS_CREDENTIALS).clickhouse_connect()
  201. conn.command(
  202. f"delete from AmazonReport.`{table_name}` where date='{date}' and profileId='{AWS_CREDENTIALS['profile_id']}'")
  203. except Exception as e:
  204. print(e)
  205. return date_list
  206. def func_3(date_list):
  207. if len(date_list) > 0:
  208. print(list(set(date_list)))
  209. for date_retry in list(set(date_list)):
  210. try:
  211. pre_func(AWS_CREDENTIALS, date_retry)
  212. except:
  213. pre_func(AWS_CREDENTIALS, date_retry)
  214. if __name__ == '__main__':
  215. # AccountTask("3006125408623189").do({"record": "portfolios"})
  216. AWS_CREDENTIALS = {
  217. 'lwa_client_id': 'amzn1.application-oa2-client.ebd701cd07854fb38c37ee49ec4ba109',
  218. 'refresh_token': "Atzr|IwEBIL4ur8kbcwRyxVu_srprAAoTYzujnBvA6jU-0SMxkRgOhGjYJSUNGKvw24EQwJa1jG5RM76mQD2P22AKSq8qSD94LddoXGdKDO74eQVYl0RhuqOMFqdrEZpp1p4bIR6_N8VeSJDHr7UCuo8FiabkSHrkq7tsNvRP-yI-bnpQv4EayPBh7YwHVX3hYdRbhxaBvgJENgCuiEPb35Q2-Z6w6ujjiKUAK2VSbCFpENlEfcHNsjDeY7RCvFlwlCoHj1IeiNIaFTE9yXFu3aEWlExe3LzHv6PZyunEi88QJSXKSh56Um0e0eEg05rMv-VBM83cAqc5POmZnTP1vUdZO8fQv3NFLZ-xU6e1WQVxVPi5Cyqk4jYhGf1Y9t98N654y0tVvw74qNIsTrB-8bGS0Uhfe24oBEWmzObvBY3zhtT1d42myGUJv4pMTU6yPoS83zhPKm3LbUDEpBA1hvvc_09jHk7vUEAuFB-UAZzlht2C1yklzQ",
  219. 'lwa_client_secret': 'cbf0514186db4df91e04a8905f0a91b605eae4201254ced879d8bb90df4b474d',
  220. 'profile_id': "3006125408623189"
  221. }
  222. try:
  223. refresh_token = shop_infos(AWS_CREDENTIALS['profile_id'])['refresh_token']
  224. AWS_CREDENTIALS['refresh_token'] = refresh_token
  225. except Exception as e:
  226. print(e)
  227. timezone_ = Common_ETLMethod(**AWS_CREDENTIALS).timeZone()
  228. print(timezone_)
  229. # amz_report(AWS_CREDENTIALS)
  230. sched = BlockingScheduler()
  231. sched.add_job(amz_report,'cron',hour=17,minute=0,second=0,timezone=timezone_, args=(AWS_CREDENTIALS, ))#,params={"startDate":"2023-11-04","endDate":"2023-11-04","date":"20231104"}
  232. sched.start()