As I recently discovered, there is no way to delete all posts from Tumblr, to give yourself a fresh start. My girlfriend needed this feature to erase her 17 pages of Twitter posts in hers. To help her I created this little piece of PHP code. Just in case this code will delete ALL of your tumblr posts.
You can obtain the JSON.php file from this page.
PD: If you want to highlight your code in Tumblr (trust me it’s a pain in the …), follow this guide.
require('JSON.php');
function curl_get_file_contents($URL)
{
$c = curl_init();
curl_setopt($c, CURLOPT_HTTPHEADER, array('Pragma: no-cache'));
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);
if ($contents) return $contents;
else return FALSE;
}
// Authorization info
$tumblr_url = "http://mytumblr.tumblr.com"
$tumblr_email = 'mymail@mydomain.com';
$tumblr_password = 'mypassword';
$str = curl_get_file_contents("$tumblr_url/api/read/json");
$str = substr($str, 22);
$str = substr($str, 0, strlen($str)-2);
$s = new Services_JSON(SERVICES_JSON_IN_STR);
$o = $s->decode($str);
$name = 'posts-total';
$total = $o->$name;
print "TOTAL posts to delete: $total\n";
// Send the POST request (with cURL)
$c = curl_init('http://www.tumblr.com/api/delete');
$count = 0;
while ($count < $total) {
foreach ($o->posts as $post) {
$id = $post->id;
// Prepare POST request
$request_data = "email=$tumblr_email&password=$tumblr_password&post-id=$id";
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_HTTPHEADER, array('Pragma: no-cache'));
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c);
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
// Check for success
if ($status == 200) {
echo "Deleted post $id\n";
$count += 1;
} else if ($status == 403) {
echo "Bad email or password\n";
exit;
} else {
echo "Error: $result\n";
}
}
$str = curl_get_file_contents("$tumblr/api/read/json?num=20");
$str = substr($str, 22);
$str = substr($str, 0, strlen($str)-2);
$o = $s->decode($str);
if (empty($o)) {
die('An error has ocurred');
}
print "Waiting 10 seconds before continuing. Total deleted = $count\n";
sleep(10);
}
/* close the session */
curl_close($c);