動かざることバグの如し

近づきたいよ 君の理想に

Tumblrの全記事URLをAPI+pythonで取得

たまにはPythonでやろうと思った

環境

準備

まずAPIキーが必要。ここからアプリを適当に登録して「OAuth Consumer Key」というのを控えておく。

コード

import requests
import sys

if len(sys.argv) != 2:
    print('Usage: ' + sys.argv[0] + ' blog_name.tumblr.com')
    exit(1);

blog = sys.argv[1]
api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # copied from API example
offset = 0

while 1:
    url = 'http://api.tumblr.com/v2/blog/' + blog + '/posts/text?api_key=' + api_key + '&offset=' + str(offset) + '&notes_info=false'

    r = requests.get(url)
    j = r.json()

    posts = j['response']['posts']

    if len(posts) == 0:
        break

    offset = offset + len(posts)

    for p in posts:
        print(p['title'] + ',' + p['post_url'])

python tumblr.py hogehoge.tumblr.com

でいける。

JSONの仕様

APIで取得できるJSONのうち、各postの形式は以下

{
  type: "text",
  blog_name: "ekimemo-blog",
  id: 165753226534,
  post_url: "http://blog.ekimemo.com/post/165753226534/仮想ホームの調整について",
  slug: "仮想ホームの調整について",
  date: "2017-09-26 06:56:30 GMT",
  timestamp: 1506408990,
  state: "published",
  format: "markdown",
  reblog_key: "IDkARQ9R",
  tags: [],
  short_url: "https://tmblr.co/ZaNGnj2QNgOKc",
  summary: "仮想ホームの調整について",
  is_blocks_post_format: false,
  recommended_source: null,
  recommended_color: null,
  note_count: 1,
  title: "仮想ホームの調整について",
  body: "<p>こんにちは!奪取er協会の日記係の方、らんたんです!</p> <p>いつも駅メモ!をご利用頂きありがとうございます。..............",
  reblog: {},
  trail: [],
  can_like: false,
  can_reblog: false,
  can_send_in_message: true,
  can_reply: false,
  display_avatar: true
}

ちなみにこのブログは駅メモ!公式ブログであることはいうまでもない