Tumblrのポストをすべて削除するスクリプトを書いたときのメモ

Tumblrブログへのポストを全部消したい、ブログ自体はhtmlとかいじってるので削除したくない、というケースがあったので、スクリプトからAPIたたいて全部削除することを考えてみました。


KEYとかTOKENとか取得する必要があります。
前に取得したときのメモがこちら。

PythonスクリプトからTumblrに画像を投稿してみたメモ
http://d.hatena.ne.jp/yuheiomori0718/20120609/1339244758

API見た感じ取得は20件ずつしかできず、削除は1件ずつしかできない。


しかも削除したあと、すぐに取得すると、削除したはずのポストが返ってくることがあり、2度目の削除はエラーになる。
20秒スリープいれてるのはそのため。何度も使った訳じゃないのでら20秒でダメなときもあるかもしれないけど、とりあえず、それで60件くらいは削除できた。


こんなの使う人はいないと思いつつ、もし使う場合は自己責任でお願いします。

import time
from tumblpy import Tumblpy
import requests

OAUTH_CONSUMER_KEY = "*******************************"
SECRET_KEY = "*******************************"
OAUTH_TOKEN = "*******************************"
OAUTH_TOKEN_SECRET = "*******************************"


BLOG_ID = "*******.tumblr.com"
BLOG_URL = "http://"  + BLOG_ID

GET_URL = "http://api.tumblr.com/v2/blog/%s/posts/photo?api_key=%s"

t = Tumblpy(app_key=OAUTH_CONSUMER_KEY,
            app_secret=SECRET_KEY,
            oauth_token=OAUTH_TOKEN,
            oauth_token_secret=OAUTH_TOKEN_SECRET)


while True:
    r = requests.get(GET_URL % (BLOG_ID, OAUTH_CONSUMER_KEY))

    ids =  [post["id"] for post in r.json["response"]["posts"]]
    total_posts =  r.json["response"]["total_posts"]

    print "total_posts: %s" % total_posts
    print "trying delete: %s" % str(len(ids))

    for id in ids:
        r = t.post('post/delete',
                   blog_url=BLOG_URL,
                   params={'id': id})



    if total_posts - len(ids) < 1:
        exit(0)

    time.sleep(20)


よく考えたら、idの取得だけ全件分走らせたあと、削除回せばよかった。まあもう使わないと思うからいいや