解析Twitter获取状态目标C.

时间:2012-10-23 23:37:52

标签: objective-c ios twitter ios6

我目前正致力于在iOS应用程序中解析Twitter上的推文。我的应用目前可以使用search.twitter.com/search.json?... API调用执行搜索,我的应用可以解析这些推文,并为每条推文选择我想要的所有数据。我现在处于试图获取用户时间线的阶段,但我似乎无法找到一种稳定的方法来解析用户的时间轴API调用中返回的对象。

使用搜索功能(示例返回对象位于: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 个答案:

答案 0 :(得分: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返回的结果,我需要做的就是将字典转换为数组。