sp_api_client.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. import clickhouse_connect
  2. import time
  3. import numpy as np
  4. from pymysql import Timestamp
  5. from sp_api.util import throttle_retry, load_all_pages
  6. from sp_api.api import Orders,ListingsItems,Inventories,Reports
  7. from sp_api.base import Marketplaces,ReportType,ProcessingStatus
  8. import pandas as pd
  9. import gzip
  10. from io import BytesIO,StringIO
  11. from datetime import datetime, timedelta,timezone
  12. import pytz
  13. import time
  14. from sync_amz_data.public.amz_ad_client import shop_infos
  15. from dateutil.parser import parse
  16. import pymysql
  17. class SpApiRequest:
  18. def __init__(self, credentials, marketplace,profile_id):
  19. self.credentials = credentials
  20. self.marketplace = marketplace
  21. self.shopInfo = shop_infos(profile_id)
  22. self.timezone = self.shopInfo['time_zone']
  23. def mysql_connect(self):
  24. conn = pymysql.connect(user="huangyifan",
  25. password="123456",
  26. host="192.168.1.18",
  27. database="amz_sp_api",
  28. port=3306)
  29. return conn
  30. def timeToLocalTime(self,para_time=None):
  31. if para_time is not None:
  32. if ":" not in para_time:
  33. para_time = para_time+' 0:0:0'
  34. report_USTime = datetime.strptime(para_time,"%Y-%m-%d %H:%M:%S")
  35. else:
  36. report_USTime = datetime.now(tz=pytz.timezone(self.timezone)) + timedelta(days=-1)
  37. USTime = pytz.timezone(self.timezone)
  38. ustime_end = USTime.localize(datetime(report_USTime.year,report_USTime.month,report_USTime.day,23,59,59,999999))
  39. ustime_start = USTime.localize(datetime(report_USTime.year,report_USTime.month,report_USTime.day,0,0,0))
  40. print(self.timezone+": ","\n",ustime_start,"-",ustime_end)
  41. # utctime = pytz.timezone("UTC")
  42. timezoneutc = pytz.timezone('UTC')
  43. startTimeutc = ustime_start.astimezone(timezoneutc)
  44. endTimeutc = ustime_end.astimezone(timezoneutc)
  45. formatTime = "%Y-%m-%dT%H:%M:%S+00:00"
  46. startTimeutc = startTimeutc.strftime(formatTime)
  47. endTimeutc = endTimeutc.strftime(formatTime)
  48. print("UTC: ","\n",startTimeutc,"-",endTimeutc)
  49. return startTimeutc,endTimeutc
  50. def timeDeal(self,orgTime):
  51. orgTime = parse(orgTime)
  52. timezone = pytz.timezone(self.timezone)
  53. shopTime = orgTime.astimezone(timezone)
  54. shopTime_datetime = datetime(shopTime.year,shopTime.month,shopTime.day,shopTime.hour,shopTime.minute,shopTime.second)
  55. return shopTime_datetime
  56. def nowTime(self):
  57. computerTimenow = datetime.now()
  58. localTimeNow = datetime.now(tz=pytz.timezone(self.timezone))
  59. utctimeNow = datetime.utcnow()
  60. return {"computerTimenow":computerTimenow,"localTimeNow":localTimeNow,"utctimeNow":utctimeNow}
  61. def create_report(self,**kwargs):
  62. reportType = kwargs['reportType']
  63. reportOptions =kwargs.get("reportOptions")
  64. dataStartTime = datetime.now(tz=pytz.timezone(self.timezone)).strftime("%Y-%m-%dT%H:%M:%S") if kwargs.get("dataStartTime") is None else kwargs.get("dataStartTime")+"T00:00:00"
  65. dataEndTime = datetime.now(tz=pytz.timezone(self.timezone)).strftime("%Y-%m-%dT%H:%M:%S") if kwargs.get("dataEndTime") is None else kwargs.get("dataEndTime")+"T23:59:59"
  66. report = Reports(credentials=self.credentials, marketplace=self.marketplace)
  67. rel = report.create_report(
  68. reportType=reportType,marketplaceIds=[self.marketplace.marketplace_id],reportOptions=reportOptions,
  69. dataStartTime=dataStartTime,dataEndTime=dataEndTime
  70. )
  71. reportId = rel.payload.get("reportId")
  72. print(reportId)
  73. return reportId
  74. def decompression(self,reportId):
  75. report = Reports(credentials=self.credentials, marketplace=self.marketplace)
  76. while True:
  77. time.sleep(15)
  78. reportId_info = report.get_report(reportId=reportId)
  79. # print(reportId_info.payload)
  80. print("please wait...")
  81. if reportId_info.payload.get("processingStatus")==ProcessingStatus.DONE:
  82. reportDocumentId = reportId_info.payload.get("reportDocumentId")
  83. rp_table = report.get_report_document(reportDocumentId=reportDocumentId,download=False)
  84. print(rp_table)
  85. if rp_table.payload.get('compressionAlgorithm') is not None:
  86. df = pd.read_table(filepath_or_buffer=rp_table.payload['url'],compression={"method":'gzip'},encoding='iso-8859-1')
  87. return df
  88. else:
  89. df = pd.read_table(rp_table.payload.get("url"),encoding='iso-8859-1')
  90. return df
  91. else:
  92. if reportId_info.payload.get("processingStatus") in [ProcessingStatus.CANCELLED,ProcessingStatus.FATAL]:
  93. print("取消或失败")
  94. break
  95. print("please wait...")
  96. def test_(self):
  97. conn = self.mysql_connect()
  98. cursor = conn.cursor()
  99. sql = "select * from amz_sp_api.productInfo"
  100. # query_rel = conn.query(sql)
  101. # cursor.execute(sql)
  102. # col = [i[0] for i in cursor.description]
  103. # rel = cursor.fetchall()
  104. # print(col)
  105. # print(rel)
  106. sql1 = "select * from amz_sp_api.orderReport where `promotion-ids` in ['', Null]"
  107. query_rel1 = conn.query(sql1)
  108. cursor.execute(sql1)
  109. col = [i[0] for i in cursor.description]
  110. rel1 = cursor.fetchall()
  111. df = pd.DataFrame(rel1,columns=col)
  112. df['ReportDate'] = df['ReportDate'].astype("datetime64[ns]")
  113. print(df.info())
  114. # print(df)
  115. bondary_date = (datetime.today() + timedelta(days=7))
  116. list_ = ['',None]
  117. df1 = df.query("ReportDate>@bondary_date or `promotion-ids` in @list_")
  118. print(df1)
  119. def data_deal(self,decom_df):
  120. decom_df['mainImageUrl'] = decom_df['seller-sku'].map(lambda x: self.get_mainImage_url(x))
  121. url_columns = [i for i in decom_df.columns if "url" in i.lower()]
  122. if len(url_columns) > 0:
  123. decom_df[url_columns] = decom_df[url_columns].astype("string")
  124. asin_columns = [i for i in decom_df.columns if 'asin' in i.lower()]
  125. if len(asin_columns) > 0:
  126. decom_df[asin_columns] = decom_df[asin_columns].astype("string")
  127. if 'pending-quantity' in decom_df.columns:
  128. decom_df['pending-quantity'] = decom_df['pending-quantity'].map(
  129. lambda x: 0 if pd.isna(x) or np.isinf(x) else x).astype("int32")
  130. deletecolumns = [i for i in decom_df.columns if 'zshop' in i.lower()]
  131. decom_df.drop(columns=deletecolumns, inplace=True)
  132. if 'quantity' in decom_df.columns:
  133. decom_df['quantity'] = decom_df['quantity'].map(lambda x: 0 if pd.isna(x) or np.isinf(x) else x).astype(
  134. "int32")
  135. decom_df['opendate_date'] = decom_df['open-date'].str.split(' ', expand=False).map(lambda x: x[0]).astype(
  136. 'datetime64[ns]')
  137. if 'add-delete' in decom_df.columns:
  138. decom_df['add-delete'] = decom_df['add-delete'].astype('string', errors='ignore')
  139. if 'will-ship-internationally' in decom_df:
  140. decom_df['will-ship-internationally'] = decom_df['will-ship-internationally'].astype('string',errors='ignore')
  141. if 'expedited-shipping' in decom_df.columns:
  142. decom_df['expedited-shipping'] = decom_df['expedited-shipping'].astype('string',errors='ignore')
  143. decom_df['updateTime'] = datetime.now(tz=pytz.timezone(self.timezone))
  144. decom_df['timezone'] = self.timezone
  145. decom_df['item-description'] = decom_df['item-description'].str.slice(0,500)
  146. decom_df[decom_df.select_dtypes(float).columns] = decom_df[decom_df.select_dtypes(float).columns].fillna(0.0)
  147. decom_df[decom_df.select_dtypes(int).columns] = decom_df[decom_df.select_dtypes(int).columns].fillna(0)
  148. decom_df[decom_df.select_dtypes(datetime).columns] = decom_df[decom_df.select_dtypes(datetime).columns].astype(
  149. 'string')
  150. decom_df.fillna('', inplace=True)
  151. return decom_df
  152. def GET_MERCHANT_LISTINGS_ALL_DATA(self,limit=None):
  153. para = {"reportType":ReportType.GET_MERCHANT_LISTINGS_ALL_DATA}
  154. reportid = self.create_report(**para)
  155. decom_df = self.decompression(reportid)
  156. print("连接数据库")
  157. conn = self.mysql_connect()
  158. cursor = conn.cursor()
  159. bondary_date = (datetime.today() + timedelta(days=-28)).strftime("%Y-%m-%d")
  160. cursor.execute(f"""select * from amz_sp_api.productInfo where (mainImageUrl is not null and mainImageUrl not in ('', ' ')) and
  161. (`seller-sku` not in ('',' ') and `seller-sku` is not null) and
  162. `updateTime`>='{bondary_date}'""") #`seller-sku`,`updateTime`,`mainImageUrl`
  163. col = [i[0] for i in cursor.description]
  164. query_rel = cursor.fetchall()
  165. print(query_rel[0])
  166. if len(query_rel)!=0:
  167. df = pd.DataFrame(query_rel,columns=col)
  168. listingid = df['listing-id'].to_numpy().tolist()
  169. decom_df = decom_df.query("`listing-id` not in @listingid")
  170. # print(f"delete * from amz_sp_api.productInfo where `listing-id` not in {tuple(listingid)}")
  171. cursor.execute(f"delete from amz_sp_api.productInfo where `listing-id` not in {tuple(listingid)}")
  172. conn.commit()
  173. if len(decom_df)==0:
  174. return "Done"
  175. if limit != None:
  176. decom_df = decom_df.iloc[:limit,:]
  177. print("getting mainImageInfo...")
  178. rowcount = 0
  179. while rowcount < len(decom_df):
  180. df_insert = decom_df.copy()
  181. df_insert = df_insert.iloc[rowcount:rowcount + 200, :]
  182. df_insert = self.data_deal(df_insert)
  183. list_df = df_insert.to_numpy().tolist()
  184. # print(list(conn.query("select * from amz_sp_api.orderReport")))
  185. sql = f"""
  186. insert into amz_sp_api.productInfo
  187. values (%s,%s,%s,%s,%s,%s,%s, %s,%s,%s,%s,%s,%s,%s, %s,%s,%s,%s,%s,%s,%s, %s,%s,%s,%s,%s,%s,%s)
  188. """
  189. # print(sql)
  190. try:
  191. conn.begin()
  192. cursor.executemany(sql, list_df)
  193. conn.commit()
  194. print("插入中...")
  195. rowcount += 200
  196. except Exception as e:
  197. conn.rollback()
  198. print(e)
  199. print("全部完成")
  200. return decom_df
  201. def get_mainImage_url(self, sku):
  202. listingClient = ListingsItems(credentials=self.credentials, marketplace=self.marketplace)
  203. try:
  204. r1 = listingClient.get_listings_item(sellerId=self.shopInfo['advertiser_id'], sku=sku)
  205. img = r1.payload.get("summaries")[0].get("mainImage")
  206. img_url = None if img is None else img.get("link")
  207. except Exception as e:
  208. print(e)
  209. time.sleep(3)
  210. r1 = listingClient.get_listings_item(sellerId=self.shopInfo['advertiser_id'], sku=sku)
  211. img = r1.payload.get("summaries")[0].get("mainImage")
  212. img_url = None if img is None else img.get("link")
  213. return img_url
  214. def GET_FLAT_FILE_ALL_ORDERS_DATA_BY_ORDER_DATE_GENERAL(self):
  215. timezone_ = pytz.timezone(self.timezone)
  216. shopReportday = (datetime.now(tz=timezone_) + timedelta(days=-1)).strftime("%Y-%m-%d")
  217. # print(shopReportday)
  218. para = {"reportType":ReportType.GET_FLAT_FILE_ALL_ORDERS_DATA_BY_ORDER_DATE_GENERAL,"dataStartTime":shopReportday,"dataEndTime":shopReportday,"reportOptions":{"ShowSalesChannel":"true"}}
  219. reportid = self.create_report(**para) #{"ShowSalesChannel":"true"}
  220. decom_df = self.decompression(reportid)
  221. decom_df[["purchase-date","last-updated-date"]] = decom_df[["purchase-date","last-updated-date"]].applymap(lambda x: self.timeDeal(x) if pd.isna(x)==False or x != None else x)
  222. decom_df[decom_df.select_dtypes(float).columns] = decom_df[decom_df.select_dtypes(float).columns].fillna(0.0)
  223. decom_df[decom_df.select_dtypes(int).columns] = decom_df[decom_df.select_dtypes(int).columns].fillna(0)
  224. decom_df[decom_df.select_dtypes(datetime).columns] = decom_df[decom_df.select_dtypes(datetime).columns].astype('string')
  225. if "purchase-order-number" in decom_df.columns:
  226. decom_df['purchase-order-number'] = decom_df['purchase-order-number'].astype("string")
  227. decom_df.fillna('',inplace=True)
  228. # decom_df["ReportDate"] = parse(shopReportday)
  229. decom_df['timezone'] = self.timezone
  230. list_df = decom_df.to_numpy().tolist()
  231. print(list_df[0])
  232. # tuple_data = [tuple(i) for i in list_df]
  233. conn = self.mysql_connect()
  234. cursor = conn.cursor()
  235. # print(list(conn.query("select * from amz_sp_api.orderReport")))
  236. sql = f"""
  237. insert into amz_sp_api.orderReport
  238. values (%s,%s,%s,%s,%s,%s,%s, %s,%s,%s,%s,%s,%s,%s, %s,%s,%s,%s,%s,%s,%s, %s,%s,%s,%s,%s,%s,%s, %s,%s,%s,%s,%s,%s,%s)
  239. """
  240. # print(sql)
  241. try:
  242. conn.begin()
  243. cursor.executemany(sql,list_df)
  244. conn.commit()
  245. print("插入完成")
  246. except Exception as e:
  247. conn.rollback()
  248. print(e)
  249. @throttle_retry()
  250. @load_all_pages()
  251. def load_all_orders(self,**kwargs):
  252. """
  253. a generator function to return all pages, obtained by NextToken
  254. """
  255. return Orders(credentials=self.credentials, marketplace=Marketplaces.US).get_orders(**kwargs)
  256. @throttle_retry()
  257. @load_all_pages()
  258. def load_order_items(self,**kwargs):
  259. return Orders(credentials=self.credentials).get_order_items(**kwargs)
  260. def insert_(self, sleep_time=0.8):
  261. insert_list_orderBasic = []
  262. insert_list_orderDetail = []
  263. orderId_list = []
  264. row = 0
  265. dt_ = datetime.utcnow()
  266. LastUpdatedAfter = (datetime(dt_.year, dt_.month, dt_.day, dt_.hour, 0, 0, 0) - timedelta(hours=1)).isoformat()
  267. LastUpdatedBefore = (datetime(dt_.year, dt_.month, dt_.day, dt_.hour, 59, 59, 59) - timedelta(hours=1)).isoformat()
  268. print(LastUpdatedAfter, '-', LastUpdatedBefore)
  269. for page in self.load_all_orders(LastUpdatedAfter=LastUpdatedAfter, LastUpdatedBefore=LastUpdatedBefore): #
  270. for order in page.payload.get('Orders'):
  271. # print(order)
  272. AmazonOrderId = str(order.get('AmazonOrderId'))
  273. orderId_list.append(AmazonOrderId)
  274. try:
  275. items_ = self.load_order_items(order_id=str(order.get('AmazonOrderId')))
  276. except:
  277. try:
  278. time.sleep(3)
  279. items_ = self.load_order_items(order_id=str(order.get('AmazonOrderId')))
  280. except:
  281. time.sleep(5)
  282. items_ = self.load_order_items(order_id=str(order.get('AmazonOrderId')))
  283. # print(next(items_).payload)
  284. items_detail = next(items_).payload["OrderItems"][0]
  285. TaxCollection_Model, TaxCollection_ResponsibleParty = (None, None) if items_detail.get(
  286. "TaxCollection") == None else (items_detail.get("TaxCollection").get("Model"),
  287. items_detail.get("TaxCollection").get("ResponsibleParty"))
  288. ProductInfo_NumberOfItems = None if items_detail.get("ProductInfo") == None else int(
  289. items_detail.get("ProductInfo").get("NumberOfItems"))
  290. BuyerInfo = None if items_detail.get("BuyerInfo") == None else str(items_detail.get("BuyerInfo"))
  291. CurrencyCode = None if items_detail.get("ItemPrice") == None else items_detail.get("ItemPrice").get(
  292. "CurrencyCode")
  293. ItemTax_Amount = None if items_detail.get("ItemTax") == None else float(
  294. items_detail.get("ItemTax").get("Amount"))
  295. QuantityShipped = None if items_detail.get("QuantityShipped") == None else int(
  296. items_detail.get("QuantityShipped"))
  297. ItemPrice_Amount = None if items_detail.get("ItemPrice") == None else float(
  298. items_detail.get("ItemPrice").get("Amount"))
  299. ASIN = None if items_detail.get("ASIN") == None else items_detail.get("ASIN")
  300. SellerSKU = None if items_detail.get("SellerSKU") == None else items_detail.get("SellerSKU")
  301. Title = None if items_detail.get("Title") == None else items_detail.get("Title")
  302. ShippingTax_Amount = None if items_detail.get("ShippingTax") == None else float(
  303. items_detail.get("ShippingTax").get("Amount"))
  304. IsGift = None if items_detail.get("IsGift") == None else (
  305. False if items_detail.get("IsGift") == 'false' else True)
  306. PriceDesignation = None if items_detail.get("PriceDesignation") == None else items_detail.get(
  307. "PriceDesignation")
  308. ShippingPrice_Amount = None if items_detail.get("ShippingPrice") == None else float(
  309. items_detail.get("ShippingPrice").get("Amount"))
  310. ShippingDiscount_Amount = None if items_detail.get("ShippingDiscount") == None else float(
  311. items_detail.get("ShippingDiscount").get("Amount"))
  312. ShippingDiscountTax_Amount = None if items_detail.get("ShippingDiscountTax") == None else float(
  313. items_detail.get("ShippingDiscountTax").get("Amount"))
  314. IsTransparency = None if items_detail.get("IsTransparency") == None else items_detail.get(
  315. "IsTransparency")
  316. QuantityOrdered = None if items_detail.get("QuantityOrdered") == None else int(
  317. items_detail.get("QuantityOrdered"))
  318. PromotionDiscountTax_Amount = None if items_detail.get("PromotionDiscountTax") == None else float(
  319. items_detail.get("PromotionDiscountTax").get("Amount"))
  320. PromotionDiscount_Amount = None if items_detail.get("PromotionDiscount") == None else float(
  321. items_detail.get("PromotionDiscount").get("Amount"))
  322. OrderItemId = None if items_detail.get("OrderItemId") == None else str(items_detail.get("OrderItemId"))
  323. temp_inserttime = datetime.now(tz=pytz.timezone(self.timezone)) + timedelta(hours=1)
  324. Inserthour_time = datetime(temp_inserttime.year, temp_inserttime.month, temp_inserttime.day,temp_inserttime.hour, 0, 0)
  325. insert_list_orderDetail.append(
  326. [AmazonOrderId, TaxCollection_Model, TaxCollection_ResponsibleParty, ProductInfo_NumberOfItems,
  327. BuyerInfo,
  328. CurrencyCode, ItemTax_Amount, QuantityShipped, ItemPrice_Amount, ASIN, SellerSKU, Title,
  329. ShippingTax_Amount, IsGift, PriceDesignation, ShippingPrice_Amount,
  330. ShippingDiscount_Amount, ShippingDiscountTax_Amount, IsTransparency, QuantityOrdered,
  331. PromotionDiscountTax_Amount, PromotionDiscount_Amount, OrderItemId, Inserthour_time,self.timezone])
  332. BuyerInfo_BuyerEmail = None if order.get('BuyerInfo') == None else order.get('BuyerInfo').get(
  333. 'BuyerEmail')
  334. AmazonOrderId = AmazonOrderId # order.get('AmazonOrderId') == None else order.get('AmazonOrderId')
  335. EarliestDeliveryDate = None if order.get('EarliestDeliveryDate') == None else self.timeDeal(order.get('EarliestDeliveryDate'))
  336. EarliestShipDate = None if order.get('EarliestShipDate') == None else self.timeDeal(order.get('EarliestShipDate'))
  337. SalesChannel = None if order.get('SalesChannel') == None else order.get('SalesChannel')
  338. AutomatedShippingSettings_HasAutomatedShippingSettings = None if order.get('AutomatedShippingSettings') == None else order.get('AutomatedShippingSettings').get('HasAutomatedShippingSettings')
  339. OrderStatus = None if order.get('OrderStatus') == None else order.get('OrderStatus')
  340. NumberOfItemsShipped = None if order.get('NumberOfItemsShipped') == None else order.get('NumberOfItemsShipped')
  341. OrderType = None if order.get('OrderType') == None else order.get('OrderType')
  342. IsPremiumOrder = None if order.get('IsPremiumOrder') == None else order.get('IsPremiumOrder')
  343. IsPrime = None if order.get('IsPrime') == None else order.get('IsPrime')
  344. FulfillmentChannel = None if order.get('FulfillmentChannel') == None else order.get('FulfillmentChannel')
  345. NumberOfItemsUnshipped = None if order.get('NumberOfItemsUnshipped') == None else order.get('NumberOfItemsUnshipped')
  346. HasRegulatedItems = None if order.get('HasRegulatedItems') == None else order.get('HasRegulatedItems')
  347. IsReplacementOrder = None if order.get('IsReplacementOrder') == None else eval(order.get('IsReplacementOrder').capitalize())
  348. IsSoldByAB = None if order.get('IsSoldByAB') == None else order.get('IsSoldByAB')
  349. LatestShipDate = None if order.get('LatestShipDate') == None else self.timeDeal(order.get('LatestShipDate'))
  350. ShipServiceLevel = None if order.get('ShipServiceLevel') == None else order.get('ShipServiceLevel')
  351. DefaultShipFromLocationAddress_StateOrRegion = None if order.get('DefaultShipFromLocationAddress') == None else order.get('DefaultShipFromLocationAddress').get('StateOrRegion')
  352. DefaultShipFromLocationAddress_AddressLine1 = None if order.get('DefaultShipFromLocationAddress') == None else order.get('DefaultShipFromLocationAddress').get('AddressLine1')
  353. DefaultShipFromLocationAddress_Phone = None if order.get('DefaultShipFromLocationAddress') == None else order.get('DefaultShipFromLocationAddress').get('Phone')
  354. DefaultShipFromLocationAddress_PostalCode = None if order.get('DefaultShipFromLocationAddress') == None else order.get('DefaultShipFromLocationAddress').get('PostalCode')
  355. DefaultShipFromLocationAddress_City = None if order.get('DefaultShipFromLocationAddress') == None else order.get('DefaultShipFromLocationAddress').get('City')
  356. DefaultShipFromLocationAddress_CountryCode = None if order.get('DefaultShipFromLocationAddress') == None else order.get('DefaultShipFromLocationAddress').get('CountryCode')
  357. DefaultShipFromLocationAddress_Name = None if order.get('DefaultShipFromLocationAddress') == None else order.get('DefaultShipFromLocationAddress').get('Name')
  358. IsISPU = None if order.get('IsISPU') == None else order.get('IsISPU')
  359. MarketplaceId = None if order.get('MarketplaceId') == None else order.get('MarketplaceId')
  360. LatestDeliveryDate = None if order.get('LatestDeliveryDate') == None else self.timeDeal(order.get('LatestDeliveryDate'))
  361. PurchaseDate = None if order.get('PurchaseDate') == None else self.timeDeal(order.get('PurchaseDate'))
  362. ShippingAddress_StateOrRegion = None if order.get('ShippingAddress') == None else order.get('ShippingAddress').get('StateOrRegion')
  363. ShippingAddress_PostalCode = None if order.get('ShippingAddress') == None else order.get('ShippingAddress').get('PostalCode')
  364. ShippingAddress_City = None if order.get('ShippingAddress') == None else order.get('ShippingAddress').get('City')
  365. ShippingAddress_CountryCode = None if order.get('ShippingAddress') == None else order.get('ShippingAddress').get('CountryCode')
  366. IsAccessPointOrder = None if order.get('IsAccessPointOrder') == None else order.get('IsAccessPointOrder')
  367. PaymentMethod = None if order.get('PaymentMethod') == None else order.get('PaymentMethod')
  368. IsBusinessOrder = None if order.get('IsBusinessOrder') == None else order.get('IsBusinessOrder')
  369. OrderTotal_CurrencyCode = None if order.get('OrderTotal') == None else order.get('OrderTotal').get('CurrencyCode')
  370. OrderTotal_Amount = None if order.get('OrderTotal') == None else float(order.get('OrderTotal').get('Amount'))
  371. PaymentMethodDetails = None if order.get('PaymentMethodDetails') == None else order.get('PaymentMethodDetails')[0]
  372. IsGlobalExpressEnabled = None if order.get('IsGlobalExpressEnabled') == None else order.get('IsGlobalExpressEnabled')
  373. LastUpdateDate = None if order.get('LastUpdateDate') == None else self.timeDeal(order.get('LastUpdateDate'))
  374. ShipmentServiceLevelCategory = None if order.get('ShipmentServiceLevelCategory') == None else order.get('ShipmentServiceLevelCategory')
  375. SellerOrderId = None if order.get('SellerOrderId') == None else order.get('SellerOrderId')
  376. temp_inserttime = datetime.now(tz=pytz.timezone(self.timezone))+timedelta(hours=1)
  377. Inserthour_time = datetime(temp_inserttime.year,temp_inserttime.month,temp_inserttime.day,temp_inserttime.hour,0,0)
  378. insert_list_orderBasic.append(
  379. [BuyerInfo_BuyerEmail, AmazonOrderId, EarliestDeliveryDate, EarliestShipDate, SalesChannel,
  380. AutomatedShippingSettings_HasAutomatedShippingSettings, OrderStatus,
  381. NumberOfItemsShipped, OrderType, IsPremiumOrder, IsPrime, FulfillmentChannel,
  382. NumberOfItemsUnshipped, HasRegulatedItems, IsReplacementOrder, IsSoldByAB, LatestShipDate,
  383. ShipServiceLevel, DefaultShipFromLocationAddress_StateOrRegion,
  384. DefaultShipFromLocationAddress_AddressLine1, DefaultShipFromLocationAddress_Phone,
  385. DefaultShipFromLocationAddress_PostalCode,
  386. DefaultShipFromLocationAddress_City, DefaultShipFromLocationAddress_CountryCode,
  387. DefaultShipFromLocationAddress_Name, IsISPU, MarketplaceId, LatestDeliveryDate, PurchaseDate,
  388. ShippingAddress_StateOrRegion, ShippingAddress_PostalCode, ShippingAddress_City,
  389. ShippingAddress_CountryCode, IsAccessPointOrder, PaymentMethod, IsBusinessOrder,
  390. OrderTotal_CurrencyCode,
  391. OrderTotal_Amount, PaymentMethodDetails, IsGlobalExpressEnabled, LastUpdateDate,
  392. ShipmentServiceLevelCategory, SellerOrderId, Inserthour_time,self.timezone])
  393. time.sleep(sleep_time)
  394. row += 1
  395. if row % 10 == 0:
  396. print(f"receiving...received {row} rows")
  397. print(insert_list_orderBasic)
  398. print(insert_list_orderDetail)
  399. if __name__ == '__main__':
  400. aws_credentials = {
  401. 'refresh_token': 'Atzr|IwEBIMxC7d17ZYBTcNe-zfnbk-TEC-40uIlSRmGAH_sfNozcA7RdSt4iBdUorC2GC_uoUmIY4oGhHGT621el1my0YaABEvuGn4eIe1EFxrHYLM1fljnQxHQjgGKwTb48cMdHNxOiMd8_CbvLYL_NT3E_zTPKCSQjqa8zxTkddBjL-5stlTRzhVHmB2Ox5-6XgvpSnoBtlZqkI96rYmKi63f0NTQ2e9IV3cNqXli8X9_DYGgZlpl60qE56A-ZNy4otv4myR5kqY2bTll0c-ynLtqI5ukDwPwO369b_Ie4kniRd7Or-Ip6jPyTIdfghLV4AVrxbvE',
  402. 'lwa_app_id': 'amzn1.application-oa2-client.1f9d3d4747e14b22b4b598e54e6b922e', # 卖家中心里面开发者资料LWA凭证
  403. 'lwa_client_secret': 'amzn1.oa2-cs.v1.3af0f5649f5b8e151cd5bd25c10f2bf3113172485cd6ffc52ccc6a5e8512b490',
  404. 'aws_access_key': 'AKIARBAGHTGOZC7544GN',
  405. 'aws_secret_key': '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',
  406. 'role_arn': 'arn:aws:iam::070880041373:role/Amazon_SP_API_ROLE'
  407. }
  408. sp_ = SpApiRequest(aws_credentials,Marketplaces.US,'3006125408623189')
  409. # sp_.GET_MERCHANT_LISTINGS_ALL_DATA()
  410. sp_.GET_MERCHANT_LISTINGS_ALL_DATA()
  411. # sp_.mysql_connect().commit()
  412. # sp_.decompression("1532408019678")
  413. # sp_.GET_MERCHANT_LISTINGS_ALL_DATA()
  414. # sp_.timeToLocalTime()
  415. # print(type(sp_))