5

我一直在用 perl 弄乱 tumblr API,并得到了几个可以工作的函数。

但是,我无法通过 perl 上传本地图像文件。

这是我适用于 URL 的代码

    use LWP::Authen::OAuth;
    use JSON;
    use Data::Dumper;
    use strict;
         my $ua = LWP::Authen::OAuth->new(
             oauth_consumer_key => 'xxx',
             oauth_consumer_secret => 'xxx',
             oauth_token => 'xxx',
             oauth_token_secret => 'xxx',
     );




    my $response;
    $response = $ua->post( 'http://api.tumblr.com/v2/blog/mytumblr.tumblr.com/post', [
         type    => 'photo',
         url    => 'http://www.example.com/mypic.jpg' ,
         caption => 'Test image 1',
     ]);


    if ($response->is_success) {
      print "it worked";
    }
    else {
     print "it did not work \n \n \n \n";
     print $response->as_string;
   }

但是,当我在帖子参数中用“url”替换“data”时(如此处的 API 描述中所述 - http://www.tumblr.com/docs/en/api/v2#posting),我不断收到来自 tumblr 的错误响应。我尝试了几种输入“数据”参数的方法 - 作为文件的路径,作为二进制表示,作为 URL 编码的二进制表示,作为 url 编码的 base64 二进制表示,将其中一个值作为唯一元素在一个数组中 - 我已经尝试了所有,并且每一个我都会从 tumblr 收到一条错误消息。

那么,有人可以告诉我如何将本地图像文件上传到 tumblr 吗?

4

1 回答 1

0

我对 tumblr API 并不完全熟悉,但通过谷歌搜索找到了这个示例:https ://gist.github.com/derekg/1198576

我会尝试

$response = $ua->post( 'http://api.tumblr.com/v2/blog/mytumblr.tumblr.com/post', [
     type    => 'photo',
     'data[0]'    => $file_contents , ## LWP::Useragent should automatically urlencode this
     caption => 'Test image 1',
 ]);

根据这个答案https://stackoverflow.com/a/177866/810448,“data []”也可能在这种情况下工作。

如果 LWP::Useragent 还没有这样做,我还会考虑在请求标头中添加“Content-type: application/x-www-form-urlencoded”。

于 2013-05-16T12:48:21.050 回答