1
私は基本的に、出荷の状態を出力するためにpythonを取得しようとしています。残念ながら、ClassicUPSパッケージには、配信された日付と、通過中の「真」または「偽」のIFのみが表示されます。Python UPS XML追跡
これがデフォルトの "ups.py" である: "ups_test.py" から
from ClassicUPS import UPSConnection
from datetime import datetime
import xmltodict
import xml.etree.ElementTree as ET
# Credentials obtained from the UPS website
ups = UPSConnection('api-key',
'username',
'password',
'shipper#', # Optional if you are not creating a shipment
debug=False) # Use the UPS sandbox API rather than prod
tracking = ups.tracking_info('1ZXXXXXXXXXXXXXXXX')
print tracking.delivered
print tracking.ship_status
# try:
# if tracking.in_transit == (False) :
# print "Still in Transit"
# elif tracking.in_transit == (True) :
# print ("Delivered")
# except:
# print "Error"
try:
if tracking.delivered == (None):
print ("Still in Transit")
elif tracking.delivered != (None):
Print ("Delivered")
except:
print "error"
が出力:
class TrackingInfo(object):
def __init__(self, ups_conn, tracking_number):
self.tracking_number = tracking_number
tracking_request = {
'TrackRequest': {
'Request': {
'TransactionReference': {
'CustomerContext': 'Get tracking status',
'XpciVersion': '1.0',
},
'RequestAction': 'Track',
'RequestOption': 'activity',
},
'TrackingNumber': tracking_number,
},
}
self.result = ups_conn._transmit_request('track', tracking_request)
@property
def shipment_activities(self):
# Possible Status.StatusType.Code values:
# I: In Transit
# D: Delivered
# X: Exception
# P: Pickup
# M: Manifest
shipment_activities = (self.result.dict_response['TrackResponse']
['Shipment']['Package']['Activity'])
if type(shipment_activities) != list:
shipment_activities = [shipment_activities]
return shipment_activities
@property
def ship_status(self):
# Possible Status.StatusType.Code values:
# I: In Transit
# D: Delivered
# X: Exception
# P: Pickup
# M: Manifest
ship_status = (self.result.dict_response['TrackResponse']['Shipment']['Package']['Activity']['Status']['StatusType']['Description'])
if type(ship_status) == list:
ship_status = [ship_status]
return ship_status
@property
def delivered(self):
delivered = [x for x in self.shipment_activities
if x['Status']['StatusType']['Code'] == 'D']
if delivered:
return datetime.strptime(delivered[0]['Date'], '%Y%m%d')
@property
def in_transit(self):
in_transit = [x for x in self.shipment_activities
if x['Status']['StatusType']['Description'] != '']
return len(in_transit) > 0 ### If I remove "len" and "> 0" then it shows a string of results which I will show below
私の自己は "ups_test.py" ファイルを作成しました
[{u'Status': {u'StatusType': {u'Code': u'I', u'Description': u'THE SHIPMENT HAS
BEEN DROPPED OFF AND IS NOW AT THE UPS STORE(R)'}, u'StatusCode': {u'Code': u'XD
'}}, u'Date': u'20171006', u'ActivityLocation': {u'Address': {u'City': u'INDIANA
POLIS', u'StateProvinceCode': u'IN', u'CountryCode': u'US'}}, u'Time': u'180000'
}, {u'Status': {u'StatusType': {u'Code': u'M', u'Description': u'BILLING INFORMA
TION RECEIVED'}, u'StatusCode': {u'Code': u'MP'}}, u'Date': u'20171005', u'Activ
ityLocation': {u'Address': {u'CountryCode': u'US'}}, u'Time': u'153442'}]
私の質問は、次のような特定のデータを出力するにはどうすればよいですか。
Description = u['Description' : u'THE SHIPMENT HAS
BEEN DROPPED OFF AND IS NOW AT THE UPS STORE(R)']
「tracking」という名前のオブジェクトの構造を理解する必要があります。メンバーとは何ですか?メンバーは何ですか?トラッキングの情報がどのように構成されているかを知ったら、必要なデータを決定し、それにアクセスするためのロジックを書く必要があります。一般的な答えはありません。 –
私が助けを求めている答えは、その文字列を出力から解析する方法です。私が助けが必要なときに、なぜ出力を解析するかが追跡オブジェクトに尋ねている理由は分かりません。 –
通常の方法は、オブジェクトをどのように構造化するかを理解し、文字列に変換してから文字列を解析することです。これは通常ははるかに難しく、まだ同じ問題を残しています。その構造と構文を理解していない限り、文字列を確実に解析することはできません。私はまた、あなたが実際にあなたが文字列の解析に助けを求めていたとは言わなかったという事実に惑わされました。私はあなたの時間を無駄にして申し訳ありません。 –