Tumblr API 发布到二级博客

Tumblr API posting to secondary blog

我正在尝试使用 Tumblr API 来 post 我的二级博客。我正在使用 Tumblpy Python package because official Tumblr client 仅适用于 Python 2,但它似乎已被废弃。

我授权了该应用程序,并查看了 Tumblr console 我从中获取所有密钥的地方。我开始尝试使用它,我注意到我可以成功 post 到我的主要博客,但不能在次要博客上(一直出现 {TumblpyError} 404 'There was an error making your request.' 错误)。

这是我一直在尝试的代码:

from tumblpy import Tumblpy


def post_tumblr(
        url,
        comment='',
        tags='',
        **kwargs
):
    t = Tumblpy(
        APP_KEY, APP_SECRET,
        OAUTH_TOKEN, OAUTH_TOKEN_SECRET
    )

    blog_url = t.post('user/info')
    blog_url = blog_url['user']['blogs'][0]['url']  # POSTING TO PRIMARY BLOG WORKS
    # blog_url = blog_url['user']['blogs'][1]['url']  # CANNOT POST TO SECONDARY BLOG?

    post_url = t.post(
        'post',
        blog_url=blog_url,
        params={
            'type': 'video',
            'embed': url,
            'caption': comment,
            'tags': tags,
        }
    )

    return True

post转至 Tumblr 中的二级博客 API 是否有一些问题?

这很有趣。首先要注意的是,在 Tumblr API 中,任何 blog.url 都是完整的 url,包括方案:http://https://。但是,在任何 /blog/{blog-identifier}/* API 请求中,它 接受完整的 url,仅接受主机名:example.comdemo.tumblr.com.

鉴于此信息,您的请求似乎 都不应该工作,所以我检查了一下 Tumblpy 的代码。事实证明,Tumblpy 通过去除主机名以外的所有内容,确实接受 {blog-identifier} 的完整 url。但是,它仅适用于 http:// urls,而不适用于 https:// urls,如 here.

所示

如果您的博客启用了 SSL,url 字段将是 https:// link,然后 Tumblpy 将无法正确处理它。我假设您的二级博客就是这种情况;你可以在 settings page 上查看该博客。

假设是这种情况,最好的解决方法是在调用 Tumblpy.post() 之前自己构造主机名。只需使用 user.blogs[i].name + ".tumblr.com"。或者,您也可以从 url 解析主机名。两种方法都行得通。