Tumblr iPhone -Integration
-
24-10-2019 - |
Frage
Hallo, ich habe mit dem Status -Update im Tumbler geführt, aber ich habe Probleme, wenn ich ein Foto in Form von Daten sende, wie unten gezeigt.
-(IBAction)sendPhoto
{
NSString *email = @"user_name@gmail.com";
NSString *password = @"password";
NSString *sendType = @"photo";
UIImage *imageMS = [UIImage imageNamed:@"Submit.png"];
NSData *photoData = [[NSData alloc] initWithData:UIImagePNGRepresentation(imageMS)];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
initWithURL:[NSURL URLWithString:@"http://www.tumblr.com/api/write"]];
[request setHTTPMethod:@"POST"];
NSString *request_body = [NSString
stringWithFormat:@"email=%@&password=%@&type=%@&data=%@",
[email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
[password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
[sendType stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
photoData];
[request setHTTPBody:[request_body dataUsingEncoding:NSUTF8StringEncoding]];
[web loadRequest:request];
}
Aber es wird nicht aktualisiert. Wieso den?
Lösung
Meine ursprüngliche Antwort erwies sich als falsch, aber das OP hat einen Link zu Code veröffentlicht, den er sagte, sein Problem habe behoben. Ich habe diesen Code unten kopiert, damit zukünftige Sucher leicht finden können, da ich weiß, wie frustrierend es sein kann, Ihr Problem beschrieben zu sehen und einen Link zur Lösung zu finden, nur um diesen Link tot zu sein.
Code basierend auf http://forums.macrumors.com/showthread.php?t=427513:
- (BOOL)sendPhotoToTumblr:(NSString *)photo usingEmail:(NSString *)tumblrEmail andPassword:(NSString *)tumblrPassword withCaption:(NSString *)caption;
{
//get image data from file
NSData *imageData = [NSData dataWithContentsOfFile:photo];
//stop on error
if (!imageData) return NO;
//Create dictionary of post arguments
NSArray *keys = [NSArray arrayWithObjects:@"email",@"password",@"type",@"caption",nil];
NSArray *objects = [NSArray arrayWithObjects:
tumblrEmail,
tumblrPassword,
@"photo", caption, nil];
NSDictionary *keysDict = [[NSDictionary alloc] initWithObjects:objects forKeys:keys];
//create tumblr photo post
NSURLRequest *tumblrPost = [self createTumblrRequest:keysDict withData:imageData];
[keysDict release];
//send request, return YES if successful
tumblrConnection = [[NSURLConnection alloc] initWithRequest:tumblrPost delegate:self];
if (!tumblrConnection) {
NSLog(@"Failed to submit request");
return NO;
} else {
NSLog(@"Request submitted");
receivedData = [[NSMutableData data] retain];
[tumblrConnection release];
return YES;
}
}
-(NSURLRequest *)createTumblrRequest:(NSDictionary *)postKeys withData:(NSData *)data
{
//create the URL POST Request to tumblr
NSURL *tumblrURL = [NSURL URLWithString:@"http://www.tumblr.com/api/write"];
NSMutableURLRequest *tumblrPost = [NSMutableURLRequest requestWithURL:tumblrURL];
[tumblrPost setHTTPMethod:@"POST"];
//Add the header info
NSString *stringBoundary = [NSString stringWithString:@"0xKhTmLbOuNdArY"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];
[tumblrPost addValue:contentType forHTTPHeaderField: @"Content-Type"];
//create the body
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
//add key values from the NSDictionary object
NSEnumerator *keys = [postKeys keyEnumerator];
int i;
for (i = 0; i < [postKeys count]; i++) {
NSString *tempKey = [keys nextObject];
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",tempKey] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"%@",[postKeys objectForKey:tempKey]] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
}
//add data field and file data
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"data\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[NSData dataWithData:data]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
//add the body to the post
[tumblrPost setHTTPBody:postBody];
return tumblrPost;
}
Ich habe den obigen Code geändert, um einige Speicherprobleme zu beseitigen und einige Parameter hinzuzufügen, um diese zu einer generischer/flexibleren Lösung zu machen. Wenn jedoch jemand den Originalcode wünscht, wie auf dieser Website veröffentlicht wird, schauen Sie einfach die Bearbeitungsrevisionen dieser Antwort durch.
Andere Tipps
Als zukünftige Referenz, Asihttprequest'S AsiformDatRequest macht so etwas viel einfacher.