Notes on posting via Perl to Blogger

jima on 2006-09-04T17:08:58

One of the features that the new code will have is the ability to automatically create a new posting for a specified blog, in order to publicly display the finished collaborative art. Some blogs, such as Movable Type, have pretty straightforward API documentation: Others, like Blogger, take a bit of trial and error to get working. Here's the code that I just got working for my module that posts to an existing Blogger weblog (you'll have to put in the user name, password and numeric blog ID string into the code yourself, of course):

my($ua) = LWP::UserAgent->new;
    
my($entry) = <

  atom test
  2006-09-04T00:00:00Z
  An Exquisite Corpse backend code
  
    
Testing the Atom API
FOO my($h) = HTTP::Headers->new; $h->header('Content-type', 'application/xml'); $h->header('Host', 'www.blogger.com'); $h->authorization_basic('username','password'); # << replace with your own details, obv my($req) = HTTP::Request->new( POST => 'https://www.blogger.com/atom/12345678', # << replace with your own blogger ID, found in the header of your blogspot homepage $h, $entry ); my($resp) = $ua->request($req); print $resp->as_string;

You should get back a big meaty chunk of XML that will include, among other things, the formatted entry returned from the blog and a link tag that contains the URL for the new entry. Here's what that looks like:



    
    
        your name here
    
    2006-09-03T17:00:00-07:00
    2006-09-04T16:12:56Z
    2006-09-04T16:12:56Z
    
    tag:blogger.com,1999:blog-12345678.post-1234567890
    atom test
    
        
Testing the Atom API
false
Still to be figured out: what standard-issue XML and HTTP modules I can use to parse these requests and responses, and how much of the XML I might need to hard-code into the modules.

And while we're on the subject of Blogger, can I just say that it's a big pain having to code for a standard that's currently in production (the Atom API), while at the same time being told to plan for an upgraded publishing spec (the GData API: ) that I can't even test yet because it's still in beta. Well, maybe someday I'll get to test it, but for now I'll just stick with the Atom API, because that's what I've got to work with right now.