SLRequest на Twitter, дайте мне это: HTTP-статус ответа: 403 Ошибка 0 (ноль)

Я использую 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)

в чем проблема? Любая идея, чтобы это исправить?

2 ответа

Решение

В Twitter API недавно произошли изменения. Теперь вы можете звонить только по протоколу HTTPS.

Вы должны убедиться, что URL, который вы / ваша библиотека используете, начинается с

https://api.twitter.com/1.1/

(Обратите внимание на дополнительные s после http.)

Есть еще одна причина, по которой вы получаете код 403, если вы неоднократно тестировали этот код в одной и той же учетной записи Twitter:

Для каждой попытки обновления текст обновления сравнивается с последними твитами аутентифицирующего пользователя. Любая попытка, которая приведет к дублированию, будет заблокирована, что приведет к ошибке 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];
Другие вопросы по тегам