tomroyal.com

Republishing Tumblr via XML in PHP

I love self-hosted WordPress and have used Perch recently, but sometimes you just want to knock up a blog page for someone or something quickly and easily. Last week I wanted to add a blog to the Tea and Kittens site and, while scanning around for options, found out that Tumblr has an amazing XML-based API.

This allows you to create a page that displays listed blog posts, or individual posts, from a Tumblr blog for display elsewhere, quickly and easily. It won’t be suited for all projects, but it’s a simple way to add a blog to just about any page. My code builds on some simple examples online, such as the excellent one here here.

There are two key limitations of this code:

  • The content for your blog will appear at http://yourblog.tumblr.com as well as at http://yoursite.com/blog.php
  • The code below only handles text-based posts. It could be easily expanded for Tumblr’s other content types.

For an example of the finished blog page, see the Fluffington Post.

How to do it

First, set up a Tumbr blog at yournameorwhatever.tumblr.com. There’s no need to register for an API or anything like that. Then create blog.php from this code:

<?php
$cpost = $_GET[“post”]

// change this to the name of your Tumblr:

$tumblename = ‘yournameorwhatever’;

// Include all your top-of-page HTML and CSS here, ideally via a nice simple include

// check to see if viewing a post, or listing:
if (is_numeric($cpost)){

// blog.php is viewing a single post, so get it:
$request_url = ‘http://’ . $tumblename . ‘.tumblr.com/api/read?id=’ . $cpost;
$xml = simplexml_load_file($request_url);

// check that you’ve got some valid post data
if($xml ===  FALSE){
echo ‘<p>Oh dear, epic fail. Click <a href=”./blog.php”>here</a> to go back to the index.</p>’;
}
else {

// you have post data, so handle and display it:
foreach ($xml->posts->post as $post) {
$title = $post->{‘regular-title’};
$body = $post->{‘regular-body’};
$da2 = date(“jS F Y”,strtotime($post[‘date’]));
$aname = $post[‘id’];
$alink = ‘./blog.php?post=’ . $post[‘id’];
$tlink = ‘http://’ . $tumblename . ‘.tumblr.com/’ . $post[‘id’];
echo ‘<a name=”‘.$aname.'”><h2>’.$title.'</h2></a>’;
echo ‘<p>’.$da2.'<p>’;
echo ‘<p>’.$body.'<p>’;
echo ‘<p></p>’;
echo ‘<p>Posted on ‘.$da2.’. Permalink <a href=”‘.$alink.'”>here</a>, or view on Tumblr <a href=”‘.$tlink.'”>here</a>. Click <a href=”./blog.php”>here</a> for the index.</p>’;
}
}
}
else {
// no individual post requested, so get the latest bunch from Tumblr
// pull from tumblr
$request_url = ‘http://’ . $tumblename . ‘.tumblr.com/api/read’;
$xml = simplexml_load_file($request_url);
foreach ($xml->posts->post as $post) {
$title = $post->{‘regular-title’};
$body = $post->{‘regular-body’};
$da2 = date(“jS F Y”,strtotime($post[‘date’]));
$aname = $post[‘id’];
$alink = ‘./blog.php?post=’ . $post[‘id’];
$tlink = ‘http://’ . $tumblename . ‘.tumblr.com/’ . $post[‘id’];
echo ‘<a name=”‘.$aname.'” href=”‘.$alink.'”><h2>’.$title.'</h2></a>’;
echo ‘<p>’.$da2.'<p>’;
echo ‘<p>’.$body.'<p>’;
echo ‘<p></p>’;
echo ‘<p>Posted on ‘.$da2.’. Permalink <a href=”‘.$alink.'”>here</a>, or view on Tumblr <a href=”‘.$tlink.'”>here</a>.</p>’;
}
}
?>

Change the fourth line so it reflects your Tumblr address, add some HTML tags and styling, and that’s it. Enjoy!

Leave a Reply

Copyright 2019 Tom Royal