Tumblr iphone интеграция - PullRequest
       13

Tumblr iphone интеграция

0 голосов
/ 15 марта 2011

Привет! Я сделал обновление статуса в тумблере, но у меня возникает проблема при отправке фотографии в виде данных, как показано ниже.

-(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];
}

Но оно не обновляется. Почему?

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Мой первоначальный ответ оказался неверным, но ОП опубликовал ссылку на код, который, по его словам, решил его проблему.Я скопировал этот код ниже, чтобы будущие поисковики могли его легко найти, так как я знаю, как сложно расстраиваться, чтобы увидеть вашу проблему и найти ссылку на решение только для того, чтобы эта ссылка была мертвой.

Кодна основе 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;
}

Я изменил приведенный выше код, чтобы устранить некоторые проблемы с памятью и добавить некоторые параметры, чтобы сделать это более универсальным / гибким решением.Однако, если кому-то захочется, чтобы исходный код был размещен на этом сайте, просто просмотрите редакцию этого ответа.

0 голосов
/ 16 марта 2011

Для дальнейшего использования, ASIHTTPRequest * ASFormDatRequest делает подобные вещи намного проще.

...