Tumblr API - как загрузить несколько изображений в фотосет - PullRequest
5 голосов
/ 30 июля 2011

Я могу загрузить одно изображение, но не могу создать фотосет с несколькими изображениями с помощью API.

Документация гласит: Paramater: Array (двоичное содержимое в кодировке URL)

Один или несколько файлов изображений (отправьте несколько раз для создания слайд-шоу)

Кто-нибудь знает, как это сделать?

Ответы [ 4 ]

21 голосов
/ 15 сентября 2011

Это довольно болезненный процесс, но я понял это после изучения кода Python, который Tumblr опубликовал . Короче говоря, требуется получить шестнадцатеричное число для фотографии, а затем сделать некоторые замены.

Я создал простой проект для iOS / iPad / iPhone на GitHub, который загружает несколько фотографий в наборы фотографий с помощью Tumblr API , основанный на проекте ASIHTTPRequest + OAuth . Пока это работает в моем ограниченном тестировании - не стесняйтесь использовать его и дайте мне знать, как оно идет.

1 голос
/ 01 августа 2012

Новый PhotoUpLink для iPhone загружает настоящие фотосеты Tumblr.Его можно бесплатно загрузить из App Store по адресу http://uplink.to/5o, например, фотосеты по адресу http://photouplink.tumblr.com

. Загрузчик Tumblr основан на эпосе @ VictorVanHee.Я действительно оптимизировал код, переключившись на прямой C для функции 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 голосов
/ 07 января 2018

Это очень просто, используйте параметр «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);
0 голосов
/ 19 июля 2015

У меня тоже были проблемы с этим. Вот суть в python того, что в итоге сработало для меня: https://gist.github.com/charlesbrandt/11eadaec114288d621fa

Хитрость заключается в том, что все фотографии должны быть добавлены в параметры вашего сообщения с 'data [#]' для ключей. ('data [0]', 'data [1]' и т. д.)

...