79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
|
import requests
|
||
|
import json
|
||
|
import yaml
|
||
|
|
||
|
from log import log
|
||
|
from discordNotifications import sendDiscordNotification
|
||
|
from sentNotifications import isInboundShipmentPlanIDInSentNotifications, updateSentNotifications
|
||
|
from timeOperations import isInboundShipmentPlanWithinSpecifiedDelta
|
||
|
|
||
|
SETTINGS = yaml.safe_load(open('settings.yaml'))
|
||
|
|
||
|
def getAccessToken(settings=SETTINGS):
|
||
|
accessToken = requests.post(
|
||
|
'https://api.amazon.com/auth/o2/token',
|
||
|
{
|
||
|
'grant_type': 'refresh_token',
|
||
|
'refresh_token': settings['REFRESH_TOKEN'],
|
||
|
'client_id': settings['CLIENT_ID'],
|
||
|
'client_secret': settings['CLIENT_SECRET'],
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return accessToken.json()['access_token']
|
||
|
|
||
|
def getProductName(MSKU, settings=SETTINGS):
|
||
|
product = requests.get(
|
||
|
settings['SPAPI_ENDPOINT'] + '/listings/2021-08-01/items/' + settings['SELLER_ID'] + f'/{MSKU}',
|
||
|
headers = {
|
||
|
'x-amz-access-token': getAccessToken(),
|
||
|
},
|
||
|
params = {
|
||
|
'marketplaceIds': settings['MARKETPLACE_ID']
|
||
|
},
|
||
|
)
|
||
|
|
||
|
return product.json()['summaries'][0]['itemName']
|
||
|
|
||
|
def getInboundShipmentPlans(settings=SETTINGS):
|
||
|
inboundShipmentPlans = requests.get(
|
||
|
settings['SPAPI_ENDPOINT'] + '/inbound/fba/2024-03-20/inboundPlans?pageSize=10&sortBy=CREATION_TIME&sortOrder=DESC&status=SHIPPED',
|
||
|
headers = {
|
||
|
'x-amz-access-token': getAccessToken(),
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return inboundShipmentPlans.json()['inboundPlans']
|
||
|
|
||
|
def getInboundShipmentPlan(inboundShipmentPlanID, settings=SETTINGS):
|
||
|
inboundShipmentPlan = requests.get(
|
||
|
settings['SPAPI_ENDPOINT'] + f'/inbound/fba/2024-03-20/inboundPlans/{inboundShipmentPlanID}/items',
|
||
|
headers = {
|
||
|
'x-amz-access-token': getAccessToken(),
|
||
|
}
|
||
|
)
|
||
|
|
||
|
return inboundShipmentPlan.json()
|
||
|
|
||
|
def getInboundShipmentData(inboundPlanId, settings=SETTINGS):
|
||
|
inboundShipmentData = {inboundPlanId: {'destinations': [], 'shipmentIDs': []}}
|
||
|
|
||
|
inboundPlanShipmentData = requests.get(
|
||
|
settings['SPAPI_ENDPOINT'] + f'/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/placementOptions',
|
||
|
headers = {
|
||
|
'x-amz-access-token': getAccessToken(),
|
||
|
}
|
||
|
)
|
||
|
|
||
|
for shipmentID in inboundPlanShipmentData.json()['placementOptions'][0]['shipmentIds']:
|
||
|
individualShipmentData = requests.get(
|
||
|
settings['SPAPI_ENDPOINT'] + f'/inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentID}',
|
||
|
headers = {
|
||
|
'x-amz-access-token': getAccessToken(),
|
||
|
}
|
||
|
)
|
||
|
inboundShipmentData[inboundPlanId]['shipmentIDs'].append(individualShipmentData.json()['shipmentConfirmationId'])
|
||
|
inboundShipmentData[inboundPlanId]['destinations'].append(individualShipmentData.json()['destination']['warehouseId'])
|
||
|
|
||
|
return inboundShipmentData
|