我找到了这个旧的Parse.com论坛帖子,它解释了如何上传一张现在已弃用的图片
statuses/update_with_media
端点:
https://parse.com/questions/how-to-upload-image-to-twitter-using-pftwitterutils-signrequest
我意识到我用parse正确地签署了我的请求,但端点需要一个
multipart/form-data
POST请求。正确格式化请求后,我能够向
media/upload
端点并获取
media_id
价值回归。
以下是我的最终工作代码:
NSURL *mediaURL = [NSURL URLWithString:@"https://upload.twitter.com/1.1/media/upload.json"];
UIImage *imageToUpload = [UIImage ...]
NSData *imageData = UIImageJPEGRepresentation(imageToUpload, 1.0);
NSMutableURLRequest *mediaRequest = [NSMutableURLRequest requestWithURL:mediaURL];
[mediaRequest setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[mediaRequest addValue:contentType forHTTPHeaderField:@"Content-Type"];
// body
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"media\"; filename=\"image.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[mediaRequest setHTTPBody:body];
[[PFTwitterUtils twitter] signRequest:mediaRequest];
NSLog(@"Sending twitter request...");
[NSURLConnection sendAsynchronousRequest:mediaRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString *mediaIdString;
if (data && !connectionError) {
NSError *jsonSerializationError;
NSDictionary *mediaDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonSerializationError];
if (!jsonSerializationError) {
mediaIdString = mediaDict[@"media_id_string"];
} else {
NSLog(@"JSON serialization error: %@", jsonSerializationError);
}
} else {
NSLog(@"Error hitting media/upload endpoint: %@", connectionError);
}
// add that media_id to a tweet using the statuses/update endpoint
}];
有用的Twitter API文档链接:
https://dev.twitter.com/rest/public/uploading-media
https://dev.twitter.com/rest/reference/post/media/upload
我希望这篇文章对使用Parse.com平台的其他开发人员有用。