8

When i try to get https://api.twitter.com/1.1/statuses/retweets/21947795900469248.json with my authorized credentials (oauth), i'm getting:

{
 "errors": [
  {
   "message": "Your credentials do not allow access to this resource",
   "code": 220
  }
 ]
}

error: Any other twit id's not working. Is there a problem with this endpoint? Because i was getting true response until yesterday. Something changed?

rajmathan
  • 651
  • 6
  • 27
hardc0der
  • 449
  • 2
  • 7
  • 13

5 Answers5

3

I experienced same issue with getting error code 220. Fix in my case was to prompt user to enter it's Twitter password again.

Check sample code below:

SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter
                                            requestMethod:SLRequestMethodPOST
                                                      URL:[NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/update.json"]
                                               parameters:@{@"status": tweetString}];

[request setAccount:account];  
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

   if ([responseData isKindOfClass:[NSData class]]) {

       NSError *jsonError = nil;
       NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonError];

       if (json) {
           NSArray *errors = json[@"errors"];
           if (errors.count) {

               NSUInteger errorCode = [json[@"errors"][0][@"code"] integerValue];
                   if (errorCode == 220) {

                       ACAccountStore *accountStore = [[ACAccountStore alloc] init];
                       [accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error2) {
                            NSLog(@"Renew result: %ld, error: %@", (long)renewResult, error2);

                            if (renewResult == ACAccountCredentialRenewResultRenewed) {
                                [self __makeTweetWithAccounts:@[account] rating:rating review:review];
                             }
                        }];
                }
            }
        }
    }             
    NSLog(@"Twitter response data: %@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
}]; 
Josip B.
  • 2,434
  • 1
  • 25
  • 30
1

Was getting the same error when I noticed I was using GET instead of POST. Changed it and it worked.

pbeaumier
  • 203
  • 2
  • 7
0

Set app permissions to Read, write, and direct messages ...and Regenerate Access Token and Token Secret.

It worked for me

Josh
  • 6,251
  • 2
  • 46
  • 73
  • 2
    Does not work for me. I created even a brand new app, but still get this issue – boksiora Jul 13 '15 at 19:48
  • Twitter and Facebook are changing their APIs like socks, @boksiora , it is annoying but keep that in mind and try the latest solutions first. – Josh Jul 14 '15 at 08:59
  • @ManishGupta I recommend you look for answers from 2016, because Twitter and Facebook change their APIs as if they where socks xd. – Josh Aug 04 '16 at 07:12
  • Yep.. Many thanks for getting back here:) Really appreciated. – Manish Gupta Aug 04 '16 at 14:35
0

I had similar problem with SLRequest class on iOS SDK7.1. Now to get retweets, or post retweet, i started to use deprecated class TWRequest. Just #import resource and use this method:

- (void)retweetMessageV2HavingId:(NSString*)messageId {
    NSString *retweetString = [NSString stringWithFormat:@"https://api.twitter.com/1.1/statuses/retweet/%@.json", messageId];
    NSURL *retweetURL = [NSURL URLWithString:retweetString];
    TWRequest *request = [[TWRequest alloc] initWithURL:retweetURL parameters:nil requestMethod:TWRequestMethodPOST];
    request.account = self.account;

    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        if (responseData)
        {
            NSError *parseError = nil;
            id json = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];

            if (!json)
            {
                NSLog(@"Parse Error: %@", parseError);
            }
            else
            {
                NSLog(@"%@", json);
            }
        }
        else
        {
            NSLog(@"Request Error: %@", [error localizedDescription]);
        }
    }]; }
0

I have generated access-tokens going to 'Keys and Access Tokens' tab in my current app page. Then, i have set 'Access Token' and 'Access Token Secret' for the access tokens for 'auth' obj that has permisson for the app to access in source code.

peja
  • 866
  • 10
  • 19