在我的应用程序中,我想在未登录Twitter帐户进入iPhone设置时从Twitter获取推文。实际上我只收到用户推文(我发推文)。但我想让所有关注者发推文。
我正在使用这个网址:http://api.twitter.com/1/statuses/user_timeline.json
我改成这个:http://api.twitter.com/1/statuses/home_timeline.json 发生错误。错误是:由于未捕获的异常"NSInvalidArgumentException"而终止应用程序,原因:"* -[__NSArrayM insertObject:atIndex:]:对象不能为零"
我正在使用此代码。
- (IBAction)twitterButtonPressed:(UIButton *)sender
{
[self.usernameTextField resignFirstResponder];
self.nameString = self.usernameTextField.text;
NSURL *timelineUrl = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/home_timeline.json"];
NSMutableDictionary *parameters =
[[NSMutableDictionary alloc] init];
[parameters setObject:self.nameString forKey:@"screen_name"];
[parameters setObject:@"50" forKey:@"count"];
[parameters setObject:@"1" forKey:@"include_entities"];
SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:timelineUrl parameters:parameters];
[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
{
if (responseData != nil)
{
NSError *error = nil;
self.dataSource = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error];
NSLog(@" tweet inindex 0 %@",[self.dataSource valueForKey:@"text"]);
NSLog(@"ghjgjhdgjhdgjsgdjgsdjg %d",dataSource.count);
if (self.dataSource.count)
{
[self performSelectorOnMainThread:@selector(homeView) withObject:nil waitUntilDone:YES];
}
}
}];
}
检查响应。它必须是
NSLog(@"%@",[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error]);
响应可能是
{
errors = (
{
code = 215;
message = "Bad Authentication data";
}
);
}
因为主页时间线需要身份验证。
查看如何使用 iOS 5 获取推特
https://dev.twitter.com/docs/ios/making-api-requests-twrequest
但用户必须在 Twitter 中登录。
如果您不想使用 iOS 5 推特,请尝试使用其他带有 oAuth 的库,示例 https://github.com/bengottlieb/Twitter-OAuth-iPhone
试试这个:
NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];
ACAccount *twitterAccount = [arrayOfAccounts lastObject];
SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:requestURL parameters:parameters];
postRequest.account = twitterAccount;