The Human Bagel
The Human Bagel

Reputation: 7224

Posting user profile pic to twitter giving Error 131

When trying to post a users profile pic to twitter, I am getting Error code 131 response back:

2013-12-06 19:17:29.854 Tweetly[8131:60b] {
    errors =     (
                {
            code = 131;
            message = "Internal error";
        }
    );
}

Twitters website lists this:

"Corresponds with an HTTP 500 - An unknown internal error occurred."

Here is my code:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {


    //Code for store image
    [picker dismissViewControllerAnimated:YES completion:nil];

    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    UIImage *scaledImage = [self imageWithImage:image convertToSize:CGSizeMake(500, 500)];
    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(scaledImage)];

    [self uploadPictureWithData:imageData];

}


- (UIImage *)imageWithImage:(UIImage *)image convertToSize:(CGSize)size {

    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *destImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return destImage;

}



- (void)uploadPictureWithData:(NSData *)imageData {

    // Get the twitter feed
    NSURL *requestURL = [NSURL URLWithString:@"https://api.twitter.com/1.1/account/update_profile_image.json"];

    // Set up proper parameters
    NSMutableDictionary *timelineParameters = [[NSMutableDictionary alloc] init];
    [timelineParameters setObject:imageData forKey:@"image"];
    [timelineParameters setObject:@"1" forKey:@"skip_status"];

    // Create the Social Request
    SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:requestURL parameters:timelineParameters];
    postRequest.account = self.delegate.userAccount;

    // Perform the request
    [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            // Check if we reached the reate limit
            if ([urlResponse statusCode] == 429) {

                // Rate limit reached
                // Display an alert letting the user know we have hit the rate limit

                UIAlertView *twitterAlert = [[UIAlertView alloc] initWithTitle:kRateLimitTitle
                                                                       message:kRateLimitMessage
                                                                      delegate:nil
                                                             cancelButtonTitle:@"Ok"
                                                             otherButtonTitles:nil];
                [twitterAlert show];

                return;

            }
            // Check if there was an error
            if (error) {

                NSLog(@"Error: %@", error.localizedDescription);
                return;

            }
            // Check if there is some response data
            if (responseData) {
                NSError *jsonError = nil;
                NSMutableArray *feedData = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonError];
                if (!jsonError) {

                    // Check the response data

                    NSLog(@"%@", feedData);

                } else {

                    // Alert the user with the error
                    UIAlertView *twitterAlert = [[UIAlertView alloc] initWithTitle:kErrorTitle
                                                                           message:kErrorMessage
                                                                          delegate:nil
                                                                 cancelButtonTitle:@"Ok"
                                                                 otherButtonTitles:nil];
                    [twitterAlert show];


                }
            } else {

                // Alert the user with the error
                UIAlertView *twitterAlert = [[UIAlertView alloc] initWithTitle:kErrorTitle
                                                                       message:kErrorMessage
                                                                      delegate:nil
                                                             cancelButtonTitle:@"Ok"
                                                             otherButtonTitles:nil];
                [twitterAlert show];


            }


        });
    }];


}

Any idea what the issue might be? I initially thought it was because the image was too big, so I added the method for scaling the image down to 500 x 500, but I get the same error.

This error happens while running on both the device and the simulator.

Does anyone see where the problem is or have any extra insight? Thanks!

Upvotes: 3

Views: 3082

Answers (1)

Seabass
Seabass

Reputation: 1983

In my tests, images larger than 1000x1000px are not downscaled synchronously, throwing the 131 response code. Undocumented, unfortunately.

Make sure the image is <700kb and smaller than 1000x1000px. https://dev.twitter.com/rest/reference/post/account/update_profile_image

Upvotes: 0

Related Questions