Tumblr API 食用指南

前言

在Tumblr上面看到不少想要保存的美图,就想写一个爬虫来自动爬取。研究了一番Tumblr的API,发现可以稍加修改就达到这个目的。在此对Tumblr的API稍加整理,以备不时之需。

Tumblr API

Tumblr提供了一套功能强大的API,可以直接通过web请求,同时也提供了多种语言的客户端。 API地址是https://www.tumblr.com/docs/en/api/v2。此地址包含了API的文档,可供开发使用。

注册Tumblr应用

使用API的第一步是注册一个Tumblr应用。

可以直接使用https://www.tumblr.com/oauth/apps注册,也可以通过API网站提供的入口注册。注册之后保存好 Secret Key 以及 OAuth ConsumerKey 用于鉴权。

Console

API Console是Tumblr提供的一个Web客户端,可以通过此客户端来直接演示代码,并查看代码结果。

使用Console需要提供之前保存的 Secret KeyOAuth ConsumerKey

发送请求

登录之后就可以使用Console提供的各种功能,以Posts为例,在页面上方填入相应的参数,下方就会给出示例代码。例如,想要查看Tumblr官方博客发布的帖子,为了限制返回长度,请求的帖子数目限定为一个。示例代码,以JAVA为例:

// 使用Oauth验证
JumblrClient client = new JumblrClient(
  "xxx",
  "xxx"
);
client.setToken(
  "xxx",
  "xxx"
);

// Make the request
Map<String, Object> params = new HashMap<String, Object>();
params.put("limit", 1);
List<Post> posts = client.blogPosts("guanbo.tumblr.com", params);

确认参数无误后,点击 EXAMPLE OUTPUT 按钮,即可查看输出结果。

查看结果

Console输出的结果以json格式保存,不过各种语言的客户端已经对返回结果做了一定的封装。 其中response字段中保存的是请求的响应。其中blog字段中存储当前博客的一些信息。

完整的样例如下:
```json
{
  "meta": {
    "status": 200,
    "msg": "OK"
  },
  "response": {
    "blog": {
      "title": "Tumblr 官方博客",
      "name": "guanbo",
      "total_posts": 251,
      "posts": 251,
      "url": "http://guanbo.tumblr.com/",
      "updated": 1460430035,
      "description": "<a href=\"http://www.tumblr.com\">Tumblr</a> 团队发出的官方消息",
      "is_nsfw": false,
      "ask": false,
      "ask_page_title": "Ask me anything",
      "ask_anon": false,
      "share_likes": false
    },
    "posts": [
      {
        "blog_name": "guanbo",
        "id": 142664895706,
        "post_url": "http://guanbo.tumblr.com/post/142664895706/一树樱花-jejumuses-带给我们更多的感悟",
        "slug": "一树樱花-jejumuses-带给我们更多的感悟",
        "type": "photo",
        "date": "2016-04-12 03:00:34 GMT",
        "timestamp": 1460430034,
        "state": "published",
        "format": "html",
        "reblog_key": "D6m8wLws",
        "tags": [
          "博客推荐"
        ],
        "short_url": "https://tmblr.co/ZXmTyl24tVOpQ",
        "summary": "一树樱花, @jejumuses​ 带给我们更多的感悟。",
        "recommended_source": null,
        "recommended_color": null,
        "highlighted": [],
        "note_count": 114,
        "caption": "<p>一树樱花, <a></a><a href=\"https://tmblr.co/m0tl9PX8vqo1IpaIV-oc5Kg\">@jejumuses</a>​ 带给我们更多的感悟。</p>",
        "reblog": {
          "tree_html": "",
          "comment": "<p>一树樱花, <a></a><a href=\"https://tmblr.co/m0tl9PX8vqo1IpaIV-oc5Kg\">@jejumuses</a>​ 带给我们更多的感悟。</p>"
        },
        "trail": [
          {
            "blog": {
              "name": "guanbo",
              "active": true,
              "theme": {
                "header_full_width": 960,
                "header_full_height": 539,
                "header_focus_width": 959,
                "header_focus_height": 538,
                "avatar_shape": "square",
                "background_color": "#37475c",
                "body_font": "Helvetica Neue",
                "header_bounds": "0,959,538,0",
                "header_image": "https://secure.static.tumblr.com/5e0ea2e8a43e22ea901a478c0e57d12d/4ysxudq/T2Wnm0sr4/tumblr_static_6niqo4ucxnwogc8o4owosg08o.gif",
                "header_image_focused": "https://secure.static.tumblr.com/5e0ea2e8a43e22ea901a478c0e57d12d/4ysxudq/MaNnm0sr8/tumblr_static_tumblr_static_6niqo4ucxnwogc8o4owosg08o_focused_v3.gif",
                "header_image_scaled": "https://secure.static.tumblr.com/5e0ea2e8a43e22ea901a478c0e57d12d/4ysxudq/T2Wnm0sr4/tumblr_static_6niqo4ucxnwogc8o4owosg08o_2048_v2.gif",
                "header_stretch": true,
                "link_color": "#56BC8A",
                "show_avatar": false,
                "show_description": true,
                "show_header_image": true,
                "show_title": true,
                "title_color": "#FFFFFF",
                "title_font": "Gibson",
                "title_font_weight": "bold"
              },
              "share_likes": false,
              "share_following": false
            },
            "post": {
              "id": "142664895706"
            },
            "content_raw": "<p>一树樱花, <a></a><a href=\"https://tmblr.co/m0tl9PX8vqo1IpaIV-oc5Kg\">@jejumuses</a>​ 带给我们更多的感悟。</p>",
            "content": "<p>一树樱花, <a></a><a href=\"https://tmblr.co/m0tl9PX8vqo1IpaIV-oc5Kg\">@jejumuses</a>​ 带给我们更多的感悟。</p>",
            "is_current_item": true
          }
        ],
        "image_permalink": "http://guanbo.tumblr.com/image/142664895706",
        "photos": [
          {
            "caption": "",
            "alt_sizes": [
              {
                "url": "https://40.media.tumblr.com/605a1b14b3cd8712dd02668192809067/tumblr_o560ui2sMK1utbg1co1_1280.jpg",
                "width": 843,
                "height": 1054
              },
              {
                "url": "https://40.media.tumblr.com/605a1b14b3cd8712dd02668192809067/tumblr_o560ui2sMK1utbg1co1_500.jpg",
                "width": 500,
                "height": 625
              },
              {
                "url": "https://40.media.tumblr.com/605a1b14b3cd8712dd02668192809067/tumblr_o560ui2sMK1utbg1co1_400.jpg",
                "width": 400,
                "height": 500
              },
              {
                "url": "https://41.media.tumblr.com/605a1b14b3cd8712dd02668192809067/tumblr_o560ui2sMK1utbg1co1_250.jpg",
                "width": 250,
                "height": 313
              },
              {
                "url": "https://41.media.tumblr.com/605a1b14b3cd8712dd02668192809067/tumblr_o560ui2sMK1utbg1co1_100.jpg",
                "width": 100,
                "height": 125
              },
              {
                "url": "https://40.media.tumblr.com/605a1b14b3cd8712dd02668192809067/tumblr_o560ui2sMK1utbg1co1_75sq.jpg",
                "width": 75,
                "height": 75
              }
            ],
            "original_size": {
              "url": "https://40.media.tumblr.com/605a1b14b3cd8712dd02668192809067/tumblr_o560ui2sMK1utbg1co1_1280.jpg",
              "width": 843,
              "height": 1054
            }
          }
        ]
      }
    ],
    "total_posts": 251
  }
}