我在Twitter上使用SLRequest,直到几天前一切正常,下面的代码现在响应为空,错误描述为空,这是我一直使用的代码:
ACAccountStore *accountStoreTw = [[ACAccountStore alloc] init];
ACAccountType *accountTypeTw = [accountStoreTw accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
[accountStoreTw requestAccessToAccountsWithType:accountTypeTw options:NULL completion:^(BOOL granted, NSError *error) {
if(granted) {
FMDatabase *db = [FMDatabase databaseWithPath:[self databasePath]];
if ([db open]) {
FMResultSet *tw_name_q = [db executeQuery:@"SELECT tw_username FROM settings WHERE id = 1"];
NSString *tw_name = @"";
while ([tw_name_q next]) {
tw_name = [tw_name_q stringForColumn:@"tw_username"];
}
if (![tw_name isEqualToString:@""]) {
NSArray *accountsArray = [accountStoreTw accountsWithAccountType:accountTypeTw];
for (ACAccount *tw_account in accountsArray) {
if ([[tw_account username] isEqualToString:tw_name]) {
SLRequest* twitterRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter
requestMethod:SLRequestMethodPOST
URL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"]
parameters:[NSDictionary dictionaryWithObject:msg_post forKey:@"status"]];
[twitterRequest setAccount:tw_account];
[twitterRequest performRequestWithHandler:^(NSData* responseData, NSHTTPURLResponse* urlResponse, NSError* error) {
NSLog(@"text response: %@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
NSLog(@"error: %@",error.localizedDescription);
NSString *output = [NSString stringWithFormat:@"HTTP response status: %i Error %d", [urlResponse statusCode],error.code];
NSLog(@"%@ error %@", output,error.description);
}];
break;
}
}
}
}
[db close];
}
}];
现在这个日志给我这个:
text response:
error: (null)
403 Error 0 error (null)
有什么问题?有什么想法来解决它吗?
答案 0 :(得分:19)
有一个recent change to the Twitter API。您现在可以仅使用HTTPS调用它。
您应该确保您/您的图书馆使用的网址以
开头https://api.twitter.com/1.1/
(注意s
之后的额外http
。)
答案 1 :(得分:0)
如果您在同一个Twitter帐户上重复测试此代码,还有另一个原因可以获得403代码:
对于每次更新尝试,都会将更新文本与 验证用户最近的推文。任何导致的尝试 复制将被阻止,导致403错误。因此,一个 用户无法连续两次提交相同的状态。
测试时,请务必每次将状态文本更改为其他文本。或者您可以编写简单的代码来为状态生成随机文本(仅用于调试时间)以防止403错误代码。
示例:
NSDictionary *message = @{@"status": [NSString stringWithFormat:@"Testing app %u", arc4random() % 100]};
SLRequest* twitterRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter
requestMethod:SLRequestMethodPOST
URL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"]
parameters: message];