2017-10-06 4 views
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)'] 
+0

「tracking」という名前のオブジェクトの構造を理解する必要があります。メンバーとは何ですか?メンバーは何ですか?トラッキングの情報がどのように構成されているかを知ったら、必要なデータを決定し、それにアクセスするためのロジックを書く必要があります。一般的な答えはありません。 –

+0

私が助けを求めている答えは、その文字列を出力から解析する方法です。私が助けが必要なときに、なぜ出力を解析するかが追跡オブジェクトに尋ねている理由は分かりません。 –

+0

通常の方法は、オブジェクトをどのように構造化するかを理解し、文字列に変換してから文字列を解析することです。これは通常ははるかに難しく、まだ同じ問題を残しています。その構造と構文を理解していない限り、文字列を確実に解析することはできません。私はまた、あなたが実際にあなたが文字列の解析に助けを求めていたとは言わなかったという事実に惑わされました。私はあなたの時間を無駄にして申し訳ありません。 –

答えて

0

この問題は解決されました。

 tracking = ups.tracking_info(CusTracking) 
     status = tracking.shipment_activities 

     if status[0]['Status']['StatusType']['Code'] == 'M': 
      print "Ready for pickup" 
      cursor.execute("UPDATE rma_order SET from_cus_tracking_status=1 WHERE order_id=%s" % Id)