integrazione iphone Tumblr
-
24-10-2019 - |
Domanda
Ciao ho fatto con aggiornamento di stato nel bicchiere, ma sto affrontando problema quando ti mando foto sotto forma di dati, come illustrato di seguito.
-(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];
}
Ma non è sempre aggiornato. Perché?
Soluzione
La mia risposta originale ha dimostrato di essere corretto, ma l'OP postato un link al codice che ha detto ha risolto il suo problema. Ho copiato il codice di seguito in modo che le future ricercatori possono trovare facilmente, poiché so quanto può essere frustrante vedere il tuo problema descritto e trovare un link alla soluzione solo per avere quel link morto.
Codice basa su http://forums.macrumors.com/showthread.php?t = 427.513 :
- (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;
}
Ho modificato il codice di cui sopra per eliminare alcuni problemi di memoria e di aggiungere alcuni parametri per rendere questo una soluzione più generica / flessibile. Tuttavia, se qualcuno vorrebbe che il codice originale come pubblicato su tale sito, basta guardare attraverso di questa risposta modificare revisioni.
Altri suggerimenti
Per riferimento futuro, ASIHTTPRequest 's ASIFormDatRequest fa questo genere di cose molto più facile.