How to change profile picture using TWRequest , I post to timeLine using this code
-(IBAction)postToTwitter { ACAccountStore *account = [[ACAccountStore alloc] init]; ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
// Request access from the user to access their Twitter account
[account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error)
{
// Did user allow us access?
if (granted == YES)
{
// Populate array with all available Twitter accounts
NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];
// Sanity check
if ([arrayOfAccounts count] > 0)
{
// Keep it simple, use the first account available
ACAccount *acct = [arrayOfAccounts objectAtIndex:0];
// Build a twitter request
//http://api.twitter.com/1/account/update_profile_image.json
//https://upload.twitter.com/1/statuses/update_with_media.json
TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"https://upload.twitter.com/1/statuses/update_with_media.json"] parameters:nil requestMethod:TWRequestMethodPOST];
//NSData *myData = UIImagePNGRepresentation(self.selectedImage);
NSData *myData = UIImageJPEGRepresentation(self.selectedImage, 0.5);
[postRequest addMultiPartData:myData withName:@"media" type:@"image/jpg"];
[postRequest setAccount:acct];
// Block handler to manage the response
/*
[postRequest addMultiPartData:[base64 dataUsingEncoding:NSUTF8StringEncoding] // base64 is an NSString of the encoded image
withName:@"image"
type:@"multipart/form-data"];
// Post the request*/
[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
{
NSLog(@"Twitter response, HTTP response: %i", [urlResponse statusCode]);
}
];
}
}
}];
}
I struggled with this too, using Apple's WWDC11 slides as a guide, but it seems Twitter has changed the API since then (or the slide had a bug).
The solution is simple: you need to use a multipart data name of "image" instead of "media". And I think the type should be "image/jpeg", not "image/jpg".
So change that line as follows: