0

やあみんな、ボタンを押すだけで誰かが作成したコードを使ってTumblrに投稿して画像タイプの投稿をしようとしていますが、ボタンを押すとNSLogが表示されません。情報を取り込むビューは、それが異なる場合はモーダルビューです。

- (IBAction)createPost {
    NSString *caption = @"This is a test";
    [self sendPhotoToTumblr:UIImagePNGRepresentation(foodImage.image) usingEmail:email andPassword:password withCaption:caption];
    [self dismissModalViewControllerAnimated:YES];
}

- (BOOL)sendPhotoToTumblr:(NSData *)photo usingEmail:(NSString *)tumblrEmail andPassword:(NSString *)tumblrPassword withCaption:(NSString *)caption;
{
    //get image data from file
    NSData *imageData = 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;
}

私の問題は、APIを理解できないことと、NSURLRequestsを読んだほど理解していないことに起因しているように感じます。また、このモーダルビューが閉じられた後にUIWebViewをリロードする方法はありますか?どんなアドバイスも素晴らしいでしょう!

編集:いくつかのNSLogテストを行った後、ファイルから画像データを取得しようとした後、それがベイルアウトすることがわかりました。プロジェクトでプレースホルダーとして持っていた画像を入力したばかりですが、最終的には、ユーザーにカメラロールから写真を選択するか、新しい写真を撮ってもらいたいと思っています。これが理由でしょうか。また、NSStringを使用してそのタイプの画像を渡すにはどうすればよいですか?

編集(再度):画像を文字列として渡す方法がわからなかったため、sendPhotoToTumblrを変更して、文字列ではなく写真のNSDataを受け入れました。コード全体を調べたところ、「リクエストが送信されました」と表示されましたが、何も投稿されていません。receiveDataにTumblrが応答するHTTPエラーコードが含まれていることは知っていますが、それを印刷する方法がわかりません。考え?

4

2 に答える 2

2

これが機能しなかった理由は、iPhoneが画像を.pngではなく.jpgとして保存していることに気づかなかったためです。

[self sendPhotoToTumblr:UIImageJPEGRepresentation(foodImage.image, 0.5) usingEmail:email andPassword:password withCaption:caption];

そして、sendPhotoToTumblrの先頭をに変更します

- (BOOL)sendPhotoToTumblr:(NSData *)photo usingEmail:(NSString *)tumblrEmail andPassword:(NSString *)tumblrPassword withCaption:(NSString *)caption;
{
    //get image data from file
    //NSData *imageData = photo;  
    //stop on error
    if (!photo) 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:photo];
    [keysDict release];     
于 2011-04-18T20:23:49.603 に答える
0

この質問に答えてみてください

CocoaからTumblrへのPOSTリクエストの送信

于 2011-04-18T07:47:43.393 に答える