1

你好,

我正在尝试使用 Tumblr 提供的 Oauth api(http://tumblr.com/api)访问、执行帖​​子到 Tumblr。我正在使用谷歌脚本,我尝试了太多的解决方案,但有人工作。为了实现,我已经将自己置于这个(https://developers.google.com/apps-script/articles/twitter_tutorial)谷歌脚本推特教程中,曾经在 Tumblr API 网页上,他们说 twitter api 与 tumblr 几乎相同.

语境化,

我已经用下面的数据设置了 Oauth 类方法,并用从我创建的 api 获得的值替换了消费者和密钥。

var oauthConfig = UrlFetchApp.addOAuthService("tumblr");
  oauthConfig.setAccessTokenUrl(
      "http://www.tumblr.com/oauth/access_token");
  oauthConfig.setRequestTokenUrl(
      "http://www.tumblr.com/oauth/request_token");
  oauthConfig.setAuthorizationUrl(
      "http://www.tumblr.com/oauth/authorize");
  oauthConfig.setConsumerKey(<i>consumerkey</i>);
  oauthConfig.setConsumerSecret(<i>consumerSecret</i>); 

错误,

下面的代码不能正常工作。

var requestData = {

      "method": "POST",
      "oAuthServiceName": "tumbler",
      "oAuthUseToken": "always"
    };
     var result = UrlFetchApp.fetch(
       "https://api.tumblr.com/v2/blog/{blog}.tumblr.com/post?type=text&body=word",
          requestData);

Twitter 的脚本几乎相同,并且可以正常工作。我能够执行推文。

var result = UrlFetchApp.fetch(
          "https://api.twitter.com/1/statuses/update.json?status=" + tweet,
          requestData);

来自服务器的响应

请求返回代码 400 失败。服务器响应:{"meta":{"status":400,"msg":"Bad Request"},"response":{"errors":["Post cannot be empty."] }}

可能的解决方案

一个可能的解决方案可以使用此信息(从 tumblr.com/api 获得): OAuth API 支持 OAuth 1.0a 协议,通过授权标头接受参数,仅使用 HMAC-SHA1 签名方法。您的平台可能已经有一个 OAuth 客户端库。

我的问题是,我做错了什么?(我的帖子是空的,我有 2 个参数)。有没有人有同样的问题?有人有建议吗?

谢谢你。

4

2 回答 2

1

我对tumblr api一无所知,但是您的http帖子是空的(oAuth参数不在帖子正文中,它们是高级选项),帖子正文需要进入“有效负载”参数. 请参阅文档中的“高级参数”部分。或者,由于您不使用帖子,您不能使用获取请求吗?删除method: POST参数(GET 是默认值)。

于 2013-05-29T16:53:59.343 回答
1

非常感谢丹尼尔。它现在起作用了!!

每个想要使用 Tumblr + Google Script API + oAuth 的人都可以使用下面的代码来执行帖子。

我创建了我的 Google 电子表格,然后在那里创建了一个脚本。在能够发帖之前,我需要创建并应用到 tumblr.com/api 并获取密钥和消费者密钥。此外,在创建新版本之前,我已将 Google 脚本部署为 Web 应用程序(确保版本是最后一个(最终代码))。之后你去发布>部署为网络应用程序!

我在第一个问题上提出的推特教程是完成工作所需的唯一途径。

function authorize() {
  var oauthConfig = UrlFetchApp.addOAuthService("tumblr");
  oauthConfig.setAccessTokenUrl(
      "http://www.tumblr.com/oauth/access_token");
  oauthConfig.setRequestTokenUrl(
      "http://www.tumblr.com/oauth/request_token");
  oauthConfig.setAuthorizationUrl(
      "http://www.tumblr.com/oauth/authorize");
  oauthConfig.setConsumerKey(getConsumerKey());
  oauthConfig.setConsumerSecret(getConsumerSecret());

  var requestData = {
    "oAuthServiceName": "tumblr",
    "oAuthUseToken": "always"
  };
  var result = UrlFetchApp.fetch(
    "http://api.tumblr.com/v2/blog/{your_blog}.tumblr.com/posts/queue",
      requestData);
}


function doGet(e) {
  var tweet = e.parameter.tumblr;

 var app = UiApp.createApplication().setTitle("Approved");
 var panel = app.createFlowPanel();

authorize();

 var encodedTweet = encodeURIComponent(tweet);

   var payload =
   {
     "body" : encodedTweet,
     "type" : "text"
   };

 var requestData = {
   "method" : "POST",
      "oAuthServiceName": "tumblr",
      "oAuthUseToken": "always",
      "payload" : payload
 };
    try {
      var result = UrlFetchApp.fetch(
          "https://api.tumblr.com/v2/blog/{your_blog}.tumblr.com/post",
          requestData);
          panel.add(app.createLabel().setText("You have approved: \"" + tweet + "\""));
    } catch (e) {
      Logger.log(e);
      panel.add(app.createLabel().setText(e));
    }   
  app.add(panel);
  return app;
}
于 2013-05-29T20:40:07.917 回答