我目前正致力于在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...
}
答案 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返回的结果,我需要做的就是将字典转换为数组。