<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Incurable Geek &#187; APIs</title>
	<atom:link href="http://nicolasrosental.com/category/apis/feed/" rel="self" type="application/rss+xml" />
	<link>http://nicolasrosental.com</link>
	<description>Web Development, Coworking and 42</description>
	<lastBuildDate>Fri, 03 Sep 2010 18:46:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>My First Open Source Release</title>
		<link>http://nicolasrosental.com/2010/02/15/my-first-open-source-release/</link>
		<comments>http://nicolasrosental.com/2010/02/15/my-first-open-source-release/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 16:35:11 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[mechanical_turk]]></category>
		<category><![CDATA[open_source]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=232</guid>
		<description><![CDATA[Even though it isn&#8217;t even close to being finished (more like just started) I went ahead and posted my Amazon Mechanical Turk library to GitHub released under GPLv3. You can download it from the GitHub repo If you aren&#8217;t familiar with the Mechanical Turk, it&#8217;s part of the Amazon Web Services, and it allows anyone [...]]]></description>
			<content:encoded><![CDATA[<p>Even though it isn&#8217;t even close to being finished (more like just started) I went ahead and posted my Amazon Mechanical Turk library to GitHub released under GPLv3. You can download it from the <a href="http://github.com/nicdev/PHP-Turk">GitHub repo</a></p>
<p>If you aren&#8217;t familiar with the Mechanical Turk, it&#8217;s part of the Amazon Web Services, and it allows anyone to source simple activities to a number of people that would otherwise be too expensive or logistically complex to accomplish. You can learn more at the <a href="https://www.mturk.com/mturk/welcome">Amazon Mechanical Turk site</a>.</p>
<p><span id="more-232"></span></p>
<p>Why did I do it? I recently had to work on  a project building a game interface that finds players and gives them access to a simple game using the Mechanical Turk. I decided to use PHP with the REST API and found it very cumbersome. Hence, I decided to use my code as a wrapper for the REST API so other developers could perform the same actions using simple functions instead of gargantuan URLs.</p>
<p>Little by little I will incorporate more and more functions to match those provided by the API, and hopefully some of you will add some functions as well.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d232').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d232" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;submitHeadline=My+First+Open+Source+Release&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;title=My+First+Open+Source+Release" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;title=My+First+Open+Source+Release" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;title=My+First+Open+Source+Release" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;bm_description=My+First+Open+Source+Release" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;T=My+First+Open+Source+Release" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;title=My+First+Open+Source+Release" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;title=My+First+Open+Source+Release" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+My+First+Open+Source+Release+@+http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F15%2Fmy-first-open-source-release%2F&amp;t=My+First+Open+Source+Release" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d232').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d232').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2010/02/15/my-first-open-source-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One API to Rule Them All &#8211; Ping.fm</title>
		<link>http://nicolasrosental.com/2010/01/15/one-api-to-rule-them-all-ping-fm/</link>
		<comments>http://nicolasrosental.com/2010/01/15/one-api-to-rule-them-all-ping-fm/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 05:34:51 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=199</guid>
		<description><![CDATA[If you&#8217;ve read this blog you get the idea that I really like RESTful API&#8217;s. But as much as I&#8217;d like to learn each one of them out there, there are times when you have to take shortcuts. Enter Ping.fm. This service allows you to make one post and have it update all your accounts [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve read this blog you get the idea that I really like RESTful API&#8217;s. But as much as I&#8217;d like to learn each one of them out there, there are times when you have to take shortcuts. Enter <a title="Ping.fm" href="http://ping.fm/">Ping.fm</a>. This service allows you to make one post and have it update all your accounts at once. You can both do this from their page, or implement it in a variety of ways. We&#8217;ll see how to use cURL (as usual) and the Ping.fm API.</p>
<p>First of all you&#8217;ll want to set up your Ping.fm service right to update the feeds of your choice, as well as create the necessary permissions to post to each service. Log in to your account and select Add More Networks; now make your selection.</p>
<p style="text-align: center;"><a href="http://nicolasrosental.com/wp-contents/uploads/2010/01/Screen-shot-2010-01-15-at-12.06.54-AM.png"><img class="size-medium wp-image-200 aligncenter" title="Screen shot 2010-01-15 at 12.06.54 AM" src="http://nicolasrosental.com/wp-contents/uploads/2010/01/Screen-shot-2010-01-15-at-12.06.54-AM-300x151.png" alt="" width="300" height="151" /></a></p>
<p style="text-align: center;">Now that your account is set up you need to gather your api key and a user key. I found this point to be the most confusing of the entire set up. Apparently the user app key is no longer necessary, but I couldn&#8217;t find an explanation of what the new method is.</p>
<p>If you take a look in the footer there&#8217;s a <a href="http://ping.fm/developers/">&#8216;developers&#8217;</a> section that has all the information necessary to get the keys and such.</p>
<p>Now you can go ahead and send your updates from your web app.</p>
<pre>&lt;?php

 $api_key = ''; //Don't forget your keys
 $user_app_key = '';
 //$api_call = 'http://api.ping.fm/v1/system.services'; //Good test
 $api_call = 'http://api.ping.fm/v1/user.post';

 //I assume you are pulling this content from a database, a feed, or some other automated method. But it's not important for this example.
 $title = "Something really witty";
 $content = "Your awesome post";

 //Set up the connection and pass the options required by the API.
 $curl_conn = curl_init();
 curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
 curl_setopt($curl_conn, CURLOPT_POST, 1); //Use POST
 curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!
 curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.

 //Check out all the options in the Ping.fm documentation
 $options = array('api_key' =&gt; $api_key, 'user_app_key' =&gt; $user_app_key, 'post_method' =&gt; 'blog', 'title' =&gt; $title, 'body' =&gt; $content);
 curl_setopt($curl_conn, CURLOPT_POSTFIELDS, $options);
 $output = curl_exec($curl_conn);

 echo $output; //See what you get

 ?&gt;
</pre>
<p>Here&#8217;s an example of posting to a Facebook page.</p>
<p style="text-align: center;"><a href="http://nicolasrosental.com/wp-contents/uploads/2010/01/Screen-shot-2010-01-15-at-12.45.10-AM.png"><img class="size-medium wp-image-209 aligncenter" title="Screen shot 2010-01-15 at 12.45.10 AM" src="http://nicolasrosental.com/wp-contents/uploads/2010/01/Screen-shot-2010-01-15-at-12.45.10-AM-300x53.png" alt="" width="300" height="53" /></a></p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d199').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d199" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;submitHeadline=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;title=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;title=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;title=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;bm_description=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;T=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;title=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;title=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm+@+http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2010%2F01%2F15%2Fone-api-to-rule-them-all-ping-fm%2F&amp;t=One+API+to+Rule+Them+All+%26%238211%3B+Ping.fm" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d199').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d199').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2010/01/15/one-api-to-rule-them-all-ping-fm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twitter Response Codes Simplified</title>
		<link>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/</link>
		<comments>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 20:16:48 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[responsecodes]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=146</guid>
		<description><![CDATA[I recently attended an AtlantaPHP meet-up where Ben Ramsey talked about &#8220;The Hidden Gems in HTTP&#8221;. That gave me the idea to explain the response codes you might see when using the Twitter API, and give some practical examples too. We will be using PHP and cURL to access the API. If you aren&#8217;t too [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended an <a title="AtlantaPHP - PHP User Group" href="http://atlantaphp.org/">AtlantaPHP</a> meet-up where <a href="http://twitter.com/ramsey">Ben Ramsey</a> talked about &#8220;The Hidden Gems in HTTP&#8221;. That gave me the idea to explain the response <a href="http://apiwiki.twitter.com/HTTP-Response-Codes-and-Errors?SearchFor=http+code&amp;sp=1">codes</a> you might see when using the Twitter API, and give some practical examples too.</p>
<p>We will be using PHP and cURL to access the API. If you aren&#8217;t too familiar, please read <a href="http://nicolasrosental.com/?p=42">this post.</a></p>
<p>Each heading is exactly what you will find in the<a title="Response Codes and Errors" href="http://apiwiki.twitter.com/HTTP-Response-Codes-and-Errors"> Twitter API documentation</a>, along with my own explanation and some examples.</p>
<h3><strong>200 OK</strong>: Success!</h3>
<p>Let&#8217;s say I want to get a list of my followers, I can use the code example below, and if I get a <strong>200 OK </strong>return code I know that my request has been successful.</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter
$user_followers = "https://twitter.com/statuses/followers/nicdev.xml";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $user_followers); //URL to connect to
curl_setopt($curl_conn, CURLOPT_GET, 1); //Use GET method
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn,CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!&lt;strong&gt;&lt;/strong&gt;</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>// Result from querying URL. Will parse as xml
$output = curl_exec($curl_conn);</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<pre>echo $output;</pre>
<p>If you are following along you will now have a pretty messy screen full of information about your followers. The part of the response we are interested in, it&#8217;s in the first line.</p>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009
13:51:56 GMT Server: hi X-RateLimit-Limit:
20000 X-Transaction: 1257861116-80037-4182
Status: 200 OK</pre>
<p>The 200 OK code let&#8217;s us know it&#8217;s all good, and our request has been successfully processed.</p>
<h3><strong>304 Not Modified</strong>: There was no new data to return.</h3>
<p>This one is a bit trickier. In short, a 304 code means that there is no new data to a request. I attempted to send the request repeatedly through a &#8220;for loop&#8221; but I got a <strong>200 OK </strong>every time. I tried to search for bug reports so I could try to reproduce it, but no dice. Maybe they don&#8217;t really provide 304&#8242;s? If you know a way of getting it to reply 304, please comment.</p>
<h3><strong>400 Bad Request</strong>: The request was invalid.  An accompanying error message will explain why. This is the status code will be returned during <span style="color: #000000;">rate limiting.</span></h3>
<p>Well, Twitter imposes all sorts of limits on the amount of API calls you can make, and this is a good thing. The limits imposed are workable, and can be increased if you are a developer and <a href="http://twitter.com/help/request_whitelisting">ask nicely</a>. The default limit is 150/hour on any given account, so it was easy to reproduce.</p>
<p>Change the script as follows, and refresh the page.</p>
<pre>//Replace the line  $output = curl_exec($curl_conn); with the following block of code.</pre>
<pre>for($i = 0; $i &lt; 160; $i++)
{
    $output = curl_exec($curl_conn);
    $output = substr($output, 0, 200);
    echo $output."&lt;br /&gt;";
}</pre>
<p>You will probably get a lot of<strong> 200 </strong>codes followed by <strong>400&#8242;s.</strong></p>
<pre>HTTP/1.1 400 Bad Request Date: Tue, 10 Nov
2009 14:43:40 GMT Server: hi
X-RateLimit-Limit: 150 Status: 400 Bad
Request X-RateLimit-Remaining: 0
X-Runtime: 0.01104 Content-Type:
application/xml;</pre>
<h3><strong>401 Not Authorized</strong>: Authentication credentials were missing or incorrect.</h3>
<p>Does as it says, and there&#8217;s a great way of testing it out, the <strong>verify_credentials </strong>method. Simply pass it a bad username and password and you&#8217;ll have a <strong>401</strong> error to call your own.</p>
<pre>//Change this part in the original script.</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$user_followers = "http://twitter.com/account/verify_credentials.xml";</pre>
<pre>//Don't forget to change the credentials to something invalid</pre>
<p>Here&#8217;s the result</p>
<pre>HTTP/1.1 401 Unauthorized Date: Tue, 10 Nov
2009 15:16:24 GMT Server: hi Status: 401
Unauthorized</pre>
<h3><strong>403 Forbidden</strong>: The request is understood, but it has been refused.  An accompanying error message will explain why. This code is used when requests are being denied due to update limits.</h3>
<p>You simply tweet too much! Again, you hit a rate limit that is pretty forgiving for most people. The following piece of code will actually post just one tweet to your account, which will most likely get a <strong>200 OK</strong> code; I&#8217;m posting in in case you were looking for a short script to post updates to Twitter. The second one will actually try to post more messages than it&#8217;s allowed in order to purposely get a <strong>403</strong> code.</p>
<p>Please note that because Twitter checks you aren&#8217;t sending the exact same message repeatedly, I&#8217;m changing the text in every post.</p>
<p>One tweet:</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://twitter.com/statuses/update.xml";
$options = "status=This is a test status made with PHP"; //The actual message is a required parameter</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_POST, 1); //Use POST
curl_setopt($curl_conn, CURLOPT_POSTFIELDS, $options);
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password..'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>// Result from querying URL. Will parse as xml</pre>
<pre>$output = curl_exec($curl_conn);</pre>
<pre>echo $output;</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p>Many, many tweets.</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://twitter.com/statuses/update.xml";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_POST, 1); //Use POST
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>for($i=0;$i &lt; 160;$i++)
{
    $options = "status=This is a test status made with PHP to reach a 403".md5($i); //Change the message on each iteration
    curl_setopt($curl_conn, CURLOPT_POSTFIELDS, $options);
    $output = curl_exec($curl_conn);
    $output = substr($output,0,200);
    echo $output;
}</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p><img class="size-full wp-image-158 alignnone" title="Twitter SPAM" src="http://nicolasrosental.com/wp-contents/uploads/2009/11/Screen-shot-2009-11-10-at-2.05.13-PM.png" alt="Twitter SPAM" width="191" height="164" /></p>
<pre>HTTP/1.1 403 Forbidden Date: Tue, 10 Nov
 2009 18:54:52 GMT Server: hi
X-Transaction: 1257879292-55915-20315
Status: 403 Forbidden
Last-Modified: Tue, 10..</pre>
<p>In case you haven&#8217;t noticed this is spamming, and it uses a lot of resources unnecessarily, so don&#8217;t do it, please.</p>
<h3><strong>404 Not Found</strong>: The URI requested is invalid or the resource requested, such as a user, does not exist.</h3>
<p>This one is very simple. You&#8217;re looking for something that&#8217;s just not there. To try it out, go to the original script and change the request to a user you know doesn&#8217;t exist. For example @nicdev1232342</p>
<pre>$user_followers = "https://twitter.com/statuses/followers/nicdev1232342.xml";</pre>
<pre>HTTP/1.1 404 Not Found Date: Tue, 10 Nov
 2009 19:16:49 GMT Server: hi
X-RateLimit-Limit: 150 X-Transaction:
 1257880609-95984-9773 Status:
404 Not Found</pre>
<p><strong>406 Not Acceptable</strong>: Returned by the Search API when an invalid format is specified in the request.</p>
<p>Either the dpcumentation is wrong, or I&#8217;m too slow to understand. I tried making a request for followers using an non-existing format of .noformat, and all I got was a lousy <strong>403</strong>. Again, if someone knows how to get this one to fire, please let me know and I&#8217;ll update the post.</p>
<pre>$user_followers = "https://twitter.com/statuses/followers/nicdev.noformat";</pre>
<p>I wanted a <strong>406</strong>!</p>
<pre>HTTP/1.1 403 Forbidden Date: Tue, 10
 Nov 2009 19:23:03 GMT Server: hi
 X-Transaction: 1257880983-50850-
1216 Status: 403 Forbidden</pre>
<p><strong>500 Internal Server Error</strong>: Something is broken.  Please post to the group so the Twitter team can investigate.</p>
<p>This one you can&#8217;t reproduce at will, but if you play with the Twitter API long enough you&#8217;re bound to run into it.</p>
<p><strong>502 Bad Gateway</strong>: Twitter is down or being upgraded.</p>
<p><img class="alignnone size-full wp-image-165" title="Fail Whale" src="http://nicolasrosental.com/wp-contents/uploads/2009/11/failwhale.png" alt="Fail Whale" width="330" height="225" /><br />
<strong>503 Service Unavailable</strong>: The Twitter servers are up, but overloaded with requests. Try again later. The search and trend methods use this to indicate when you are being rate limited.</p>
<p>The following script will run a search for the term &#8220;argentina&#8221; against the Twitter search API. Search limits are independent of other limits, and will return a <strong>503</strong> as opposed to a <strong>403</strong> when reaching the rate limit.</p>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://search.twitter.com/search.json?&amp;amp;amp;amp;amp;amp;amp;amp;amp;q=argentina";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_GET, 1); //Use GET
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>for($i=0;$i &lt; 160;$i++)
{
    $output = curl_exec($curl_conn);
    $output = substr($output,0,200);
    echo $output."&lt;br /&gt;";
}</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p>This one was a true surprise. While running the script that loops around 160 times I received many <strong>200&#8242;s</strong>, followed by a <strong>502 Bad Gateway</strong>, followed by a <strong>503 Service Unavailable</strong> (what I was expecting), and then again by a bunch of <strong>200&#8242;s</strong>. It seems to me that the rate limit on search is very forgiving.</p>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009 19:49:38
HTTP/1.1 502 Bad Gateway Date: Tue, 10 Nov 2009 19:49:42</pre>
<pre>HTTP/1.0 503 Service Unavailable</pre>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009 19:50:01</pre>
<p>I hope you enjoyed the post and that it&#8217;ll help you when writing applications for Twitter, or any other app that relies on response codes. To finish here are some great resources.</p>
<ul>
<li><a title="Twitter API doc" href="http://apiwiki.twitter.com/Twitter-API-Documentation">Twitter API Documentation</a> &#8211; Good docs and a great community built around it.</li>
<li><a title="Scripting Twitter with cURL" href="http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/">Scripting Twitter With cURL &#8211; Tech@Sakana</a></li>
</ul>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d146').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d146" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;submitHeadline=Twitter+Response+Codes+Simplified&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;bm_description=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;T=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Twitter+Response+Codes+Simplified+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;t=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d146').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d146').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter API 101 &#8211; Authentication with PHP and cURL</title>
		<link>http://nicolasrosental.com/2009/01/23/twitter-api-101-authentication-with-php-and-curl/</link>
		<comments>http://nicolasrosental.com/2009/01/23/twitter-api-101-authentication-with-php-and-curl/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:22:15 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=42</guid>
		<description><![CDATA[Stop right there! I wrote this post back in January 2009, a lot has changed since then, and in case you haven&#8217;t heard basic authentication is a no go. I haven&#8217;t written any OAuth tutorials yet, so if you&#8217;re looking for some help check out the following links How to Authenticate Users With Twitter OAuth [...]]]></description>
			<content:encoded><![CDATA[<h3>Stop right there! I wrote this post back in January 2009, a lot has changed since then, and in case you haven&#8217;t heard <a href="http://dev.twitter.com/announcements">basic authentication is a no go</a>. I haven&#8217;t written any OAuth tutorials yet, so if you&#8217;re looking for some help check out the following links</h3>
<h3><a href="http://net.tutsplus.com/tutorials/php/how-to-authenticate-users-with-twitter-oauth/">How to Authenticate Users With Twitter OAuth</a></h3>
<h3><a title="Permanent Link to How to quickly integrate with Twitter’s OAuth API using PHP" rel="bookmark" href="http://www.jaisenmathai.com/blog/2009/03/31/how-to-quickly-integrate-with-twitters-oauth-api-using-php/">How to quickly integrate with Twitter’s OAuth API using PHP</a></h3>
<p>Now that I&#8217;m in the process of writing a simple twitter application, I want to share with you some of the steps that might help you save some time and grief in the future.</p>
<p>In this post I&#8217;ll show you how to connect securely to Twitter, authenticate, make a query and return a particular users&#8217; followers as a string using PHP and cURL.</p>
<p><span id="more-42"></span></p>
<p>//Create the connection handle</p>
<p>$curl_conn = curl_init();</p>
<p>//Set up the URL to query Twitter<br />
$user_followers = &#8220;https://twitter.com/statuses/followers/&#8221;username.xml&#8221;;</p>
<p>//Set cURL options</p>
<p>curl_setopt($curl_conn, CURLOPT_URL, $user_followers); //URL to connect to<br />
curl_setopt($curl_conn, CURLOPT_GET, 1); //Use GET method<br />
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication<br />
curl_setopt($curl_conn, CURLOPT_USERPWD, &#8216;username:password&#8217;); //Set u/p<br />
curl_setopt($curl_conn, CURLOPT_SSL_VERIFYPEER, false); //Do not check SSL certificate (but use SSL of course), live dangerously!<br />
curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string</p>
<p>// Result from querying URL. Will parse as xml<br />
$output = curl_exec($curl_conn);</p>
<p>// close cURL resource. It&#8217;s like shutting down the water when you&#8217;re brushing your teeth.<br />
curl_close($curl_conn);</p>
<h3>Explanation</h3>
<p>The first step is to decide the type of query to use. For more information see the <a href="http://apiwiki.twitter.com/">API</a><a href="http://apiwiki.twitter.com/"> wiki</a>. Then you will set up all the options for cURL. In PHP these are set up one by one using curl_setopt(). If you don&#8217;t need a particular option, you can comment it out.  Each option is explained as a comment, but there are some areas that grant a bit more explanation.</p>
<p>Twitter uses <a href="http://http://en.wikipedia.org/wiki/Basic_access_authentication">basic authentication</a> for their services.  This is only needed for certain parts of the API, but more than likely you&#8217;ll end up having to authenticate at some point.</p>
<p>Use HTTPS if possible, otherwise credentials would be sent in clear text and it would be fairly easy to intercept and read.</p>
<p>Lastly,  execute cURL. This is when the connection happens, until now we have only set options, but haven&#8217;t actually attempted a connection. Now that we have a string back, we can convert it to an XML object and parse it for any information we need.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d42').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d42" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;submitHeadline=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;bm_description=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;T=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;t=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d42').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d42').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/01/23/twitter-api-101-authentication-with-php-and-curl/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>The Bumpy Road To Your Twitter Idea</title>
		<link>http://nicolasrosental.com/2009/01/22/the-bumpy-road-to-your-twitter-idea/</link>
		<comments>http://nicolasrosental.com/2009/01/22/the-bumpy-road-to-your-twitter-idea/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 14:50:37 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[development projects]]></category>
		<category><![CDATA[services]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=26</guid>
		<description><![CDATA[Lately I&#8217;ve been toying with the idea of writing a small twitter application/service which I haven&#8217;t found out there yet. I&#8217;m not going to explain it, but suffice to say that it was mighty simple. The first thing I set to do was my homework: research the API. Oh the excitement! A few different options, [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been toying with the idea of writing a small twitter application/service which I haven&#8217;t found out there yet. I&#8217;m not going to explain it, but suffice to say that it was mighty simple.</p>
<p>The first thing I set to do was my homework: research the <a href="http://apiwiki.twitter.com/">API</a>. Oh the excitement! A few different options, with me setting my sights on the REST API. And the excitement continued, they had several different functions for me to get the data I needed in beautiful XML.<br />
<span id="more-26"></span><br />
And so I tested one of these in my browser, go ahead try it out, put this in your address bar <strong>http://twitter.com/statuses/followers/nicdev.xml</strong> enter your credentials and bam! There you have my followers (or any other user&#8217;s, just substitue &#8220;nicdev&#8221;).</p>
<p>This is great, let me try it again! Not so fast</p>
<blockquote><p>/statuses/followers/nicdev.xml Rate limit exceeded. Clients may not make more than 100 requests per hour</p></blockquote>
<p>Well, that sure sucked, but imagine if you have a succeessful service that a lot of people want to use. What happens then? It happens that you can get <a href="http://twitter.com/help/request_whitelisting">white-listed</a>. I just applied for it, and will update this post (or write another) when I receive a reply. Yet, it seems that some applications are still hard pressed to survive with this cap in place. In fact, both <a href="http://news.cnet.com/8301-17939_109-10147535-2.html">Cnet</a> and <a href="http://www.readwriteweb.com/archives/is_twitter_strangling_its_api.php">ReadWriteWeb</a> published articles on this subject yesterday.</p>
<p>I certainly hope that Twitter supports the development community around them and allows me to continue executing my idea.</p>
<p>EDIT:</p>
<p>Twitter has sent me a notification granting my request. Expect a post regarding a new application soon!</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d26').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d26" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;submitHeadline=The+Bumpy+Road+To+Your+Twitter+Idea&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;title=The+Bumpy+Road+To+Your+Twitter+Idea" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;title=The+Bumpy+Road+To+Your+Twitter+Idea" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;title=The+Bumpy+Road+To+Your+Twitter+Idea" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;bm_description=The+Bumpy+Road+To+Your+Twitter+Idea" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;T=The+Bumpy+Road+To+Your+Twitter+Idea" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;title=The+Bumpy+Road+To+Your+Twitter+Idea" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;title=The+Bumpy+Road+To+Your+Twitter+Idea" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+The+Bumpy+Road+To+Your+Twitter+Idea+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F22%2Fthe-bumpy-road-to-your-twitter-idea%2F&amp;t=The+Bumpy+Road+To+Your+Twitter+Idea" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d26').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d26').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/01/22/the-bumpy-road-to-your-twitter-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->