2012-10-23 86 views
1

我目前正致力於在iOS應用程序中解析來自Twitter的推文。我的應用程序目前可以使用search.twitter.com/search.json?... API調用執行搜索,我的應用程序可以解析這些推文,併爲每條推文選擇所需的所有數據。我處於現在正在嘗試獲取用戶時間軸的階段,但似乎無法找到穩定的方式來解析用戶時間軸API調用中返回的對象。解析Twitter獲取狀態目標C

隨着搜索功能(例如返回在底部對象:https://dev.twitter.com/docs/api/1/get/search)我可以通過所有這些結果,像這樣的選擇valueForKey:(@"results")和循環解析:

//jSONText is the returned result from the API in NSDictionary format 
    NSArray *resultTweetsJSON = [jSONText valueForKey:(@"results")]; 

    for (int tweetIndex=0; tweetIndex<[resultTweetsJSON count]; tweetIndex++) { 

     //Loop through and pull out raw tweet content for a specific tweet 
     NSString *rawTweetContent = [resultTweetsJSON objectAtIndex:tweetIndex]; 

     //Build a custom tweet object using that content 
     Tweet *singleTweet = [[Tweet alloc] initWithResultsContent:rawTweetContent]; 
    } 

我希望我可以執行相同或相似的東西,但我似乎無法找到與時間線中返回的數據一起使用的好鑰匙(例如,返回的數據靠近底部:https://dev.twitter.com/docs/api/1/get/statuses/user_timeline)。

正如你所看到的,user_time結果集不包含我可以查詢的很好的「results」鍵。

如何輕鬆選擇和解析來自調用Get/Statuses/User_Timeline Twitter API的數據並將其轉換爲NSArray,以便我可以循環並提取推文?網上的一切似乎都使用舊技術。我發現this tutorial,但它看起來像從Twitter作爲一個NSData對象而不是一個NSDictionary對象,我相信NSDictionary是最新的方式來做到這一點。

這裏的東西我想威力工作:

//No valueForKey to use, so perhaps use ""? 
    NSArray *timeline = [jSONText valueForKey:(@"")]; 

    for (int i=0; i<[timeline count]; i++) { 
    //Looping through each "object" of the timeline, grab the tweet content then fill user content 

     //Grab the "user" object from the timeline object we're looking at 
     NSString *rawUserContent = [[timeline objectAtIndex:i] valueForKey:(@"user")]; 
     //NSString *rawUserContent = [timeline valueForKey:(@"user")]; - Maybe this? 

     //Do whatever else I need to do here... 

    } 

回答

1

幾天後,我發現我只是過於複雜的問題。我需要做的就是轉換爲一個數組並進行相應的解析。

//The above code was taken out for brevity. 
    //userTimeline = the returned result from the API call to Get User Timeline 
    NSDictionary *userTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError]; 

    //convert the NSDictionary to an array 
    NSArray *timeline = (NSArray*)userTimeline; 

    //loop through the timeline array object 
    for (int i=0; i<[timeline count]; i++) { 
     //Looping through each "object" of the timeline, grab the tweet content then fill user content 

     //Grab the "User" section of the tweet we're looking at 
     NSString *rawUserContent = [[timeline objectAtIndex:i] valueForKey:(@"user")]; 

     //Fill singleTweet with user content 
     //initWithUserContent is a custom method I wrote to parse apart the User data 
     //Tweet is a custom class I wrote to hold data about a particular tweet 
     Tweet *singleTweet = [[Tweet alloc] initWithUserContent:rawUserContent]; 

     //At this point singleTweet will be filled with user content, so now fill with tweet content (text and created_at for now) 
     singleTweet.text = [[timeline objectAtIndex:i] valueForKey:(@"text")]; 
     singleTweet.created_at = [[timeline objectAtIndex:i] valueForKey:(@"created_at")]; 

然後我把所有上面的代碼包裝在if語句中。如果用戶正在執行搜索(使用Twitter的搜索API),則執行上述問題中的所有代碼,如果用戶正在執行用戶時間軸中的選擇,則執行此答案中的所有代碼。

工程就像魅力,我現在可以正確解析兩個JSON返回的結果,我需要做的就是將字典轉換爲數組。

+0

謝謝你回答你自己的問題:) –