Technorati: probably the worst and least reliable API service I have ever developed with!

I have to admit I’m really frustrated with Technorati, in particular with its APIs. It’s probably the worst API service I have ever developed with: let me explain why.

I’m not really a newbie in the web service field. I love XML stuff including feeds and APIs. I’ve developed many products and classes which interact with public web services via XML-RPC, SOAP, or REST based interfaces.

Technorati APIs are essentially unreliable. An API interface cannot take more than 10 seconds to return a response. If my website needs to send a query to Technorati, my visitor can’t wait 15 seconds for a response! OK, there are many other ways I can improve my website, for instance with AJAX calls, but this is not the real problem!

I don’t know where I could start to tell you how much I’m frustrated with Technorati APIs. OK, let’s try to start from yesterday’s experience!

I’m developing Zend_Service_Technorati library, part of the Zend Framework package. I’m really proud of it, Zend Framework is the best library package for PHP I have ever used, thus I want my class to be reliable, powerful and easy to use.

After the proposal has been approved, I started to collect test cases to drive development. This is what I had to deal with:

Cosmos claim option is out of office, try again later

From cosmos documentation:

claim: The default setting of 0 returns no user information about each weblog included in the result set when available.

Set this parameter to 1 to include Technorati member data in the result set when a weblog in your result set has been successfully claimed by a member of Technorati.

Unfortunately, for some reason Technorati decided this option doesn’t work when type is weblog. Don’t ask me why, that’s the way it goes!

Before committing test cases, I decided to give another chance to the claim option. It wasn’t the first time Technorati failed to return a response. For some other reason, it worked thus I had to create two test cases for the same configuration. Then I tried for the third time and the option didn’t work again.

Technorati doesn’t seem to know Google

A few minutes ago I decided to go ahead with development and create search test cases. I composed API URL in my browser and requested a search result for google keyword.

<result>
<query>google</query>
<querycount>0</querycount>
<rankingstart></rankingstart>
</result>

Gulp! This answer shocked me… Technorati doesn’t have any post about Google?!? I tried again but unfortunately, each keyword returned 0 results.

OK, search interface is buggy, let me try with tag API. None, I’m sorry, dear developer, I don’t have any post tagged as google. Probably Technorati doesn’t love Google, I suppose, thus I tried with other common words. No, this was not the problem. web tag didn’t work either!

Contact us… if you can

First, let me say I tried to contact Technorati three times via the support interface in the last nine months for these problems, but I never received any answer! I hope this post will have enough visibility to be taken into consideration by someone from the Technorati Office.

Because I don’t want to criticize, I decided it was the time to try to contact Technorati for the fourth time. I haven’t been really lucky with the default contact us interface, thus I decided to try the support website.

Let me log in before. Maybe they give me more attention if I provide them my identity, I thought. This is what happened when I tried to log in (more than six times).

This is not an error. This is what Technorati returned to me: a blank page! Definitely, this is not my lucky day…

Really frustrated, I decided to come back and try the API interface again. I composed a simple search for Google again: it worked! Cool, now let me try msn: it works! Great, I can work now, I thought.

Thus, I decided to start with an error test case, as usual. I composed the following URI: http://api.technorati.com/search?key=MY_API_KEY. It should generate a “missing query argument” error. This is what the request returned.

I opened source code. An Advanced Search page in HTML format was returned instead of a simple XML error: have a look at source.txt.