我从未使用过Tumblr API,但看起来你应该能够构建标签列表 - 但是没有内置的方法。首先,您需要通过查询/info
方法1找到博客中的帖子总数。其URL为:
api.tumblr.com/v2/blog/{base-hostname}/info?api_key={key}
通过解码响应成对象 (jQuery,extjs等都可以),你可以找到posts
字段,得到总帖子数。使用该数值,你可以每次拉取20篇文章,最大数量依据API规定,使用/posts
方法。其URL为:
api.tumblr.com/v2/blog/{base-hostname}/posts[/type]?api_key={key}&[optional-params=]
你可能想要省略
/type
,但你需要在可选参数中指定
offset
。通过偏移量,你可以一次处理20个帖子
2,直到下载完所有帖子(从
/info
查询得到的数量)。在下载帖子时,只需记录获取的标签即可。
有点不幸的是,你必须下载帖子正文才能获取标签列表,但我没有看到其他任何方法可以提供标签或者仅查看帖子的元数据而不显示正文。
**编辑**
1: 根据Felix的评论,
/info
返回的帖子数有时会略微有误。在期望数量很高的情况下,你需要确保只循环实际接收到的结果,而不是预期的结果。为了处理预期数量过低的情况,你可以多查询一次,看看是否有结果返回。此时,你可能会考虑放弃使用
/info
查询,改为仅查询
/posts
直到没有更多结果返回。
2: 根据Felix的第二条评论,尽管API列出了一次可以拉取多少篇文章的值范围为
1-20
,默认为
20
,但据说它最多可以接受
50
。一次拉取50个结果可能会加快速度/降低带宽使用,但会使你的代码更复杂。由于这是一个未记录的功能(即:可能只是一个错误),不能保证它会一直有效。因此,你可以尝试一次查询50个,但需要准备好处理
400
或类似的错误代码,以防他们让服务与API匹配,然后默认回到20。
api.tumblr.com/v2/blog/{base-hostname}/info?...
返回的posts
字段中的“总帖子数”经常是不正确的。此外,调用api.tumblr.com/v2/blog/.../posts
也会返回一个名为total_posts
的字段,而且这个数字也经常是不正确的。它可以让你接近总数,但不要指望它是准确的。 - Felix