感谢您提前的帮助。
我在 Python 中收到此代码的异常抛出错误。我不明白为什么。
此代码连接到 FedEx API 并提取跟踪信息。从“1.Tracking Numbers.txt”文件中获取跟踪号码。然后,写入“3.Tracking Results.csv”文件。
谢谢
import requests
import csv
from dotenv import load_dotenv
import os
#Function to get authorization
def getBearerAuthorization():
url= "https://apis-sandbox.fedex.com/oauth/token"
#Load client_secret
load_dotenv()
client_secret = 'secret_here'
payload = 'grant_type=client_credentials&client_id=apikey_here&client_secret='+str(client_secret)
headers = {
'Content-Type': "application/x-www-form-urlencoded"
}
response = requests.request("POST", url, data=payload, headers=headers)
authorization = (response.json()['access_token'])
#Variables and Parameters
token = getBearerAuthorization()
url = "https://apis-sandbox.fedex.com/track/v1/trackingnumbers"
text = open('1. Tracking Numbers.txt',"r")
output=open('3. Tracking Results.csv',"w")
writer=csv.writer(output, lineterminator = '\n')
writer.writerow(['Tracking Number', 'Delivery Status', ' Recieved By', 'Date of Latest Scan'])
#complete API request
while True:
trackingNumber = text.readline()
if not trackingNumber:
break
headers = {
'Content-Type': "application/json",
'X-locale': "en_US",
'Authorization': "Bearer "+str(token)
}
payload = '{ "trackingInfo": [ { "trackingNumberInfo": { "trackingNumber": "'+trackingNumber.strip()+'" } } ], "includeDetailedScans": true }'
response = requests.post(url, data= payload, headers=headers)
print(trackingNumber)
trackingNumber = response.json()['output']['completeTrackResults'][0]['trackingNumber']
deliveryStatus = response.json()['output']['completeTrackResults'][0]['trackResults'][0]['latestStatusDetail']['description']
if deliveryStatus == "Delivered":
recievedByName = response.json()['output']['completeTrackResults'][0]['trackResults'][0]['deliveryDetails']['receivedByName']
scanEvent = response.json()['output']['completeTrackResults'][0]['trackResults'][0]['scanEvents'][0]
dateDelivered = scanEvent['date'][0:10]
else:
recievedByName=""
dateDelivered=""
writer.writerow([trackingNumber,deliveryStatus,recievedByName,dateDelivered])
text.close()
output.close()