I can happily report that the Blogger/Google people have come through for us and found the problem. I had been losing hope, because as a linux user I'm used to having people break stuff, and then say the problem is that I'm running linux. But, though it's admittedly taken them a while, google's blogger team have dug to the bottom of the problem and found the cause. Maybe I should have more faith in future, we'll see.
If you've found that your blogger API client program has stopped working in the last month, then what follows is what you need to do to get it working again.
Turns out that some of us had misinterpreted the blogs 'posting endpoint' to be this
http://idratherhack.blogspot.com/feeds/posts/default
which was working fine, you could send the appropriate XML to this endpoint, and post to your blog. But it was never supposed to work, and since the upgrade, it doesn't. This is a shame, because it's a nice URL that makes some sense to the user.
The endpoint we should have been using looks more like:
http://www.blogger.com/feeds/8441087078477003568/posts/default
So the question is, how do you get from a blog name/url like 'idratherhack.blogspot.com' to this horrible blog ID? Well, there's a few ways of doing it.
1) Connect to your blog and pull it as an html page. Near the top you'll see an entry like:
<link rel="service.post" type="application/atom+xml" title="I'd Rather Hack - Atom" href="http://www.blogger.com/feeds/8441087078477003568/posts/default" />
The 'href' part of this gives you the url that you should use for posting to the blog.
2) The more complex way is described in the protocol document
1: Authenticate with google using client-login or Oauth.
2: do an HTTP GET to http://www.blogger.com/feeds/default/blogs
This will return a mass of XML that gives information regarding the authenticated user. Within this are entries like:
<link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/profileID/blogs/blogID' />
<link rel='alternate' type='text/html' href='http://blogName.blogspot.com/' />
<link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blogName.blogspot.com/feeds/posts/default' />
<link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='http://www.blogger.com/feeds/blogID/posts/default' />
The important one is the one that has a 'rel' value of
http://schemas.google.com/g/2005#post
the accompanying 'href' gives the endpoint you must used for posting blog entries. Here it is described as 'http://www.blogger.com/feeds/blogID/posts/default', but when you get a real feed the 'blogID' will be replaced by a big old number to produce a unique endpoint for the blog.
This XML also contains other interesting 'link' entries, like:
rel=http://schemas.google.com/blogger/2008#setting
rel=http://schemas.google.com/blogger/2008#template
the href of these gives endpoints that let you pull a list of settings or the template of the blog.
So basically, if you get this 'post' endpoint, and use that instead of http://<blogname>.blogspot.com/feeds/posts/default, you should find that your API program starts working again.
Oh no. I was already doing this, and I still can't post.
ReplyDeleteI'm not sure Onus, but the problem you described elsehwere (getting a 200 rather than a 201 response) rings a bell with me. I think that the '200' might return some error withing the returning page.
ReplyDeleteBasically it's saying "Things were alright at the http level, but at the blogger level there was a problem, and here is some xml to explain it".
Did you get anything back from the 200 response?
Very informative post. Keep up the good work. I would really look forward to your other posts
ReplyDeleteSamsung - Series 9 13.3" Laptop - 4GB Memory - 128GB Solid State Drive - Black
Samsung - 13.3" Ultrabook - 4 GB Memory and 256 GB Solid State Drive - Ash Black
Halo semuanya
ReplyDeleteSaya ingin menggunakan media ini untuk membuat Anda semua tahu bahwa mendapatkan pinjaman tidak sesulit dan sesulit yang Anda kira
Saya Rina Mariana penduduk asli bandung. Indonesia
Saya mendapat pinjaman dari ONE BILLION RISING FUND dan proses aplikasi saya mudah, lancar dan mudah dimengerti dan saya telah diberkati sejak saya baru menjadi firma pinjaman dan hidup saya tidak lagi menjadi bahan tertawaan bagi orang-orang, tetapi mereka datang kepada saya sekarang untuk meminta nasihat dan bagaimana membantu mereka secara finansial dan sejauh ini saya telah memperkenalkan cukup banyak orang kepada perusahaan pinjaman dan mereka juga mendapatkan pinjaman dari ONE BILLION RISING FUND
Saya akan menyarankan bahwa jika Anda membutuhkan pinjaman dan Anda ingin mendapatkan bantuan karena kami telah mendapatkan bantuan dari ONE BILLION RISING FUND kemudian hubungi perusahaan pinjaman melalui gmail di bawah ini dan dapatkan transformasi dalam hidup Anda secara finansial seperti yang kami lakukan
Mereka yakin, aman, andal, dan terbuka untuk pelanggan
Mengapa saya menyukai mereka adalah Anda sangat bebas untuk bertanya tentang pinjaman Anda dan layanan mereka 24/7
KONTAK PERUSAHAAN
Nama Perusahaan ::::::ONE BILLION RISING FUND
Gmail: onebillionrisingfund@gmail.com
Hubungi saya
Rina Marian
rinamariana874@gmail.com