2016-07-26 26 views
0

對不簡單的問題標題,但我需要絕望的幫助:爲什麼我的代碼循環在while循環中的一行而不是整個塊?

我的工作目標是創建一個腳本,從精確目標salesforce營銷雲API提取所有記錄。我已成功設置API調用,併成功將數據導入到DataFrame中。

我遇到的問題有兩方面,我需要不斷拉記錄,直到我的代碼中的「Results_Message」停止閱讀「MoreDataAvailable」,我需要設置邏輯,它允許我從內部控制日期API調用或解析DataFrame。

我的代碼被卡住在第44行,其中「打印Results_Message」的字符串「MoreDataAvailable」

這是到目前爲止我的代碼周圍循環,上線94和95,你會看到我的企圖解析日期直接從數據幀,但沒有運氣和在線32沒有運氣,我已經指定了日期:

import ET_Client 
import pandas as pd 


AggreateDF = pd.DataFrame() 
Data_Aggregator = pd.DataFrame() 
#Start_Date = "2016-02-20" 
#End_Date = "2016-02-25" 
#retrieveDate = '2016-07-25T13:00:00.000' 
Export_Dir = 'C:/temp/' 


try: 

    debug = False 
    stubObj = ET_Client.ET_Client(False, debug) 






    print '>>>BounceEvents' 
    getBounceEvent = ET_Client.ET_BounceEvent() 
    getBounceEvent.auth_stub = stubObj 
    getBounceEvent.search_filter = {'Property' : 'EventDate','SimpleOperator' : 'greaterThan','Value' : '2016-02-22T13:00:00.000'} 
    getResponse1 = getBounceEvent.get() 
    ResponseResultsBounces = getResponse1.results 
    Results_Message = getResponse1.message 
    print(Results_Message) 
    #EventDate = "2016-05-09" 
    print "This is orginial " + str(Results_Message) 
    #print ResponseResultsBounces 

    i = 1 
    while (Results_Message == 'MoreDataAvailable'): 
     #if i > 5: break 
     print Results_Message 
     results1 = getResponse1.results 
     #print(results1) 
     i = i + 1 
     ClientIDBounces = [] 
     partner_keys1 = [] 
     created_dates1 = [] 
     modified_date1 = [] 
     ID1 = [] 
     ObjectID1 = [] 
     SendID1 = [] 
     SubscriberKey1 = [] 
     EventDate1 = [] 
     EventType1 = [] 
     TriggeredSendDefinitionObjectID1 = [] 
     BatchID1 = [] 
     SMTPCode = [] 
     BounceCategory = [] 
     SMTPReason = [] 
     BounceType = [] 

     for BounceEvent in ResponseResultsBounces: 
      ClientIDBounces.append(str(BounceEvent['Client']['ID'])) 
      partner_keys1.append(BounceEvent['PartnerKey']) 
      created_dates1.append(BounceEvent['CreatedDate']) 
      modified_date1.append(BounceEvent['ModifiedDate']) 
      ID1.append(BounceEvent['ID']) 
      ObjectID1.append(BounceEvent['ObjectID']) 
      SendID1.append(BounceEvent['SendID']) 
      SubscriberKey1.append(BounceEvent['SubscriberKey']) 
      EventDate1.append(BounceEvent['EventDate']) 
      EventType1.append(BounceEvent['EventType']) 
      TriggeredSendDefinitionObjectID1.append(BounceEvent['TriggeredSendDefinitionObjectID']) 
      BatchID1.append(BounceEvent['BatchID']) 
      SMTPCode.append(BounceEvent['SMTPCode']) 
      BounceCategory.append(BounceEvent['BounceCategory']) 
      SMTPReason.append(BounceEvent['SMTPReason']) 
      BounceType.append(BounceEvent['BounceType']) 

     df1 = pd.DataFrame({'ClientID': ClientIDBounces, 'PartnerKey': partner_keys1, 
         'CreatedDate' : created_dates1, 'ModifiedDate': modified_date1, 
         'ID':ID1, 'ObjectID': ObjectID1,'SendID':SendID1,'SubscriberKey':SubscriberKey1, 
         'EventDate':EventDate1,'EventType':EventType1,'TriggeredSendDefinitionObjectID':TriggeredSendDefinitionObjectID1, 
         'BatchID':BatchID1,'SMTPCode':SMTPCode,'BounceCategory':BounceCategory,'SMTPReason':SMTPReason,'BounceType':BounceType})   
     #print df1 
     #df1 = df1[(df1.EventDate > "2016-02-20") & (df1.EventDate < "2016-02-25")] 
     #AggreateDF = AggreateDF[(AggreateDF.EventDate > Start_Date) and (AggreateDF.EventDate < End_Date)] 
    print(df1['ID'].max())    
    AggreateDF = AggreateDF.append(df1) 
    print(AggreateDF.shape) 
    #df1 = df1[(df1.EventDate > "2016-02-20") and (df1.EventDate < "2016-03-25")]  
    #AggreateDF = AggreateDF[(AggreateDF.EventDate > Start_Date) and (AggreateDF.EventDate < End_Date)] 
    print("Final Aggregate DF is: " + str(AggreateDF.shape)) 

    #EXPORT TO CSV 
    AggreateDF.to_csv(Export_Dir +'DataTest1.csv') 
     #with pd.option_context('display.max_rows',10000): 
      #print (df_masked1.shape) 
     #print df_masked1 



except Exception as e: 
    print 'Caught exception: ' + str(e.message) 
    print e 

我的代碼之前,解析數據,在原單格式我得到的數據是一個SOAP響應,這是它看起來像什麼(下圖)。 是否可以根據SOAP響應中的EventDate直接解析記錄?

}, (BounceEvent){ 
    Client = 
     (ClientID){ 
     ID = 1111111 
     } 
    PartnerKey = None 
    CreatedDate = 2016-05-12 07:32:20.000937 
    ModifiedDate = 2016-05-12 07:32:20.000937 
    ID = 1111111 
    ObjectID = "1111111" 
    SendID = 1111111 
    SubscriberKey = "[email protected]" 
    EventDate = 2016-05-12 07:32:20.000937 
    EventType = "HardBounce" 
    TriggeredSendDefinitionObjectID = "aa111aaa" 
    BatchID = 1111111 
    SMTPCode = "1111111" 
    BounceCategory = "Hard bounce - User Unknown" 
    SMTPReason = "aaaa" 
    BounceType = "immediate" 

希望這是有道理的,這是我絕望的求助呼籲。

預先感謝您!

+0

目前輸出什麼?你能否試圖澄清你在問什麼,現在看起來有點不清楚? – depperm

+0

對不起。它目前outputtnig字符串「MoreDataAvailable」,我認爲這是發生在44行「print Results_Message」 我在問什麼是: 1.如何防止代碼只循環我相信是第44行和實際運行代碼並將數據放入數據幀中TILL「Result_Message」不等於「MoreDataAvailable」 2.如何在API調用本身或數據幀中設置邏輯,我可以控制哪些eventDate正在使用。例如我只希望在2016年7月20日之前看到記錄,直到2016-07-21 希望這有道理 – RustyShackleford

回答

0

你似乎沒有在你的循環中更新Results_Message,所以它總是會有它在第29行中得到的值:Results_Message = getResponse1.message。除非你沒有分享代碼,那就是。

+0

我在分享所有代碼。 「getResponse1.message」包含字符串「MoreDataAvailable」,所以一旦更改,我想循環停止。 你能告訴我如何更新「Results_Message」? – RustyShackleford

相關問題