我能上传一张图片,但在使用API时无法创建具有多个图像的照片集。
文档说明如下: 参数:数组(URL编码二进制内容)。 一个或多个图像文件(提交多次以创建幻灯片展示)。
请问有谁知道如何实现呢?
文档说明如下: 参数:数组(URL编码二进制内容)。 一个或多个图像文件(提交多次以创建幻灯片展示)。
请问有谁知道如何实现呢?
这是一种有点痛苦的过程,但在研究了Tumblr发布的Python代码后,我弄清楚了。简单来说,它需要获取照片的十六进制码,然后进行一些替换。
我在GitHub上创建了一个简单的iOS/iPad/iPhone项目,利用Tumblr API上传多张照片到相册集,该项目基于ASIHTTPRequest+OAuth 项目的重要内容。经过我的有限测试,它目前运作正常--请随意使用并让我知道结果如何。
- (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;
}
这很简单,如果您只有一张图片要上传,可以使用“source”参数。如果有多张图片,请将参数切换为“data”,并用图像URL数组进行初始化。对于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);