2011-07-29 28 views
5

我可以上传一张图片,但无法使用API​​创建包含多个图片的photoset。Tumblr API - 如何将多个图像上传到Photoset

文件说: Paramater:阵列(URL编码的二进制内容)

一个或多个图像文件(提交多次以创建幻灯片)

有谁知道怎么办呢?

+0

是的,我这个苦苦挣扎。不知道它们与URL编码的二进制数据的数组意味着什么。 – Arvin

+0

@爱我开始讨论tumblr小组。他们说这是固定的,但我仍然无法使其工作.. https://groups.google.com/group/tumblr-api/browse_thread/thread/d32e0e6f9028960b/6865aa7b5eb3241d?lnk=gst&q=multiple+photos#6865aa7b5eb3241d – miloshes

+0

他们在https://gist.github.com/1198576上发布了一个python示例 - 但我仍然无法在Objective C中找到它(使用ASIFormDataRequest + OAuth.h)。我可以上传单个文件,但不能添加多个文件。上传表单数据中的文件时,我不认为ASIHTTPRequest的“url编码二进制数据” - 这是如何完成的? –

回答

21

这是一个痛苦的过程,但我在研究python code Tumblr posted后发现了它。总之,它需要获取照片的十六进制,然后做一些替换。

我创建了一个简单的iOS/iPad/iPhone project on GitHub that uploads multiple photos to photosets using the Tumblr API,主要基于ASIHTTPRequest+OAuth project。它在我有限的测试中工作至今 - 随时可以使用它并让我知道它是如何发生的。

+0

@miloshes - 这是否回答你的问题?如果是这样,标记为答案和/或upvote将不胜感激。如果不是,你用什么编程语言来做到这一点? –

+2

很棒的工作,像一个魅力工作;) – ferostar

+3

@VictorVanHee,出色的工作,官方的tumblr API文档真的让我坚持了几个小时。 –

1

适用于iPhone的新PhotoUpLink会上传真正的Tumblr照片。它可以从App Store免费下载http://uplink.to/5ohttp://photouplink.tumblr.com

Tumblr上传者基于@ VictorVanHee的史诗。我没有通过切换到直下NSData的stringWithoutURLEncoding子程序优化代码:

- (NSString *) stringWithoutURLEncoding 
{ 
    NSString *hexDataDesc = [self description]; 
    hexDataDesc = [[hexDataDesc stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""]; 

    int hlen = [hexDataDesc length]; 

    NSString *hexDataDescU = [hexDataDesc uppercaseString]; 

    const char *hexcString = [hexDataDescU cStringUsingEncoding:NSASCIIStringEncoding]; 

    char *newStringC = malloc(hlen *3); 
    memset(newStringC, 0, hlen *3); 

    int xC= 0, upd = 3000, value = 0; 

    char *componentC = malloc(5); // = "XX"; 

    componentC[2] = 0; 

    const char *px = "%x"; char ptc = '%'; 

    for (int x=0; x<hlen; x+=2) 
    {       
     componentC[0] = hexcString[x]; 
     componentC[1] = hexcString[x+1]; 

     value = 0; 
     sscanf(componentC, px, &value); 
     if ((value <=46 && value >= 45) || (value <=57 && value >= 48) || (value <=90 && value >= 65) || (value == 95) || (value <=122 && value >= 97)) //48-57, 65-90, 97-122 
     { 
      newStringC[xC++] = (char)value; 
     } 
     else 
     { 
      newStringC[xC++] = ptc; 
      newStringC[xC++] = (char)componentC[0]; 
      newStringC[xC++] = (char)componentC[1]; 
     } 
    } 

    NSString *newString = [NSString stringWithCString:newStringC encoding:NSASCIIStringEncoding]; 
    NSString *aNewString = [newString stringByReplacingOccurrencesOfString:@"%20" withString:@"+"]; 

    free (newStringC); 
    free (componentC); 

    return aNewString; 
} 
0

这非常简单,如果您只有一张图片需要上传,使用'source'参数,如果有多张图片,请将参数切换为'数据'并用对图像网址进行初始化。对于PHP tumblr客户端,下面的代码片段,可以用:

$paramsToPost = [ 
    'type' => 'photo', 
    'tags' => 'tag1, tag2, tag2', 
    'caption' => 'caption for photo(s)', 
    'link' => 'http://example.com/click-through-url' 
]; 
if (is_array($imageData)) { 
    $paramsToPost['data'] = $imageData; 
} else { 
    $paramsToPost['source'] = $imageData; 
} 
$client = new Tumblr\API\Client($consumerKey, $consumerSecret); 
$client->setToken($token, $tokenSecret); 
$response = $client->createPost($blogName, $paramsToPost);