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の取得だけ全件分走らせたあと、削除回せばよかった。まあもう使わないと思うからいいや