<?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>Ed&#039;s World &#187; tinyurl</title>
	<atom:link href="http://www.jellard.co.uk/tag/tinyurl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jellard.co.uk</link>
	<description>Bringing data into real life in a meaningful way</description>
	<lastBuildDate>Fri, 14 May 2010 15:00:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to tweet from your website with your own tinyurl URL shortening service</title>
		<link>http://www.jellard.co.uk/2009/10/how-to-tweet-from-your-website-with-your-own-tinyurl-url-shortening-service/</link>
		<comments>http://www.jellard.co.uk/2009/10/how-to-tweet-from-your-website-with-your-own-tinyurl-url-shortening-service/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 19:51:39 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tinyurl]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=55</guid>
		<description><![CDATA[As this is my first post about Magic Hat, a little introduction.  Magic Hat is a site for magicians to learn magic, with over 50 thousand users.  I started it in 2004, and since then have gradually (or not so gradually) being changing it.  We&#8217;re now at the 8th major redesign.  [...]]]></description>
			<content:encoded><![CDATA[<p>As this is my first post about Magic Hat, a little introduction.  Magic Hat is a site for magicians to learn magic, with over 50 thousand users.  I started it in 2004, and since then have gradually (or not so gradually) being changing it.  We&#8217;re now at the 8th major redesign.  It started as a good way to learn PHP/MySQL/HTML, so I didn&#8217;t touch any content management systems, and wrote the entire first 3 versions with linux&#8217;s best text editor, vim!  I then treated myself to using Eclipse, which saves a lot of work &#8211; Ctrl + Space and your website&#8217;s done (I wish!).  Then I chucked in a phpBB forum, modified it and my site so that they&#8217;re nicely integrated.  Finally, I changed to using smarty templates, which has made changing the look of the site in the last few versions significantly easier &#8211; would highly recommend it.</p>
<p>So, you&#8217;ve probably gathered that I&#8217;ll happily reinvent the wheel many times over, but hopefully for a good result.  Magic Hat is very dynamic and has lots of complicated features that I don&#8217;t think would have been feasible to get working in something like WordPress without having to learn and change most of WP.</p>
<p>I&#8217;ve setup the Magic Hat forums to tweet every time someone posts, but I didn&#8217;t really want to use tinyurl/bit.ly as I&#8217;d like to keep magichat.co.uk in the links.  So, here&#8217;s some code that creates the smallest possible hash.</p>
<p><span id="more-55"></span></p>
<pre><code style="font-size: 9px;">$letters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
function getHash($i) {
        $string = "";
        while ($i &gt;= strlen($letters)) {
                $string = substr($letters, $i % strlen($letters), 1) . $string;
                $i = floor($i / strlen($letters));
        }
        $string = substr($letters, $i, 1) . $string;
        return $string;
}
function getNumFromHash($string) {
        $letters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $k = 0;
        $count = 0;
        for ($j = strlen($string) - 1; $j &gt;= 0; $j--) {
                $letter = substr($string, $j, 1);
                $indexOfLetter = strpos($letters, $letter);
                $k += $indexOfLetter * pow(strlen($letters), $count);
                $count++;
        }
        return $k;
}
</code></pre>
<p>So, whenever I want to twitter something, I stick an entry in a database table with the URL and text contents.  I grab the auto incrementing ID from the primary key, and pass it into getHash().  Then I run this:</p>
<pre><code style="font-size: 9px;">$twitters = sql_array("SELECT id, message, link FROM twitter WHERE sent = 0 ORDER BY id");
if (count($twitters[0]) &gt; 0) {
        foreach ($twitters as $t) {
                $linkLength = 0;
                $link = "";
                $message = $t['message'];
                if (strlen($t['link']) &gt; 0) {
                        $link = "http://magichat.co.uk/w/".function_getHash($t['id']);
                        $linkLength = strlen($link) + 1;
                        $message = substr($message, 0, 140 - $linkLength);
                        $message .= " ".$link;
                }
                $message = urlencode($message);
                $ch = curl_init('http://twitter.com/statuses/update.json');
                curl_setopt ($ch, CURLOPT_POST, true);
                curl_setopt ($ch, CURLOPT_POSTFIELDS, 'status='.$message);
                curl_setopt($ch, CURLOPT_USERPWD, 'magichatuk:PASSWORD');
                curl_setopt($ch, CURLOPT_VERBOSE, 0);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);
                $response = curl_exec($ch);
                curl_close($ch);
                sql_update("twitter", "sent = 1", "id = ".$t['id']);
        }
}</code></pre>
<p>sql_array and sql_update are a couple of functions that I&#8217;ve written to do stuff with the database, and cache results etc.</p>
<p>The code ensures the full URL is present by shrinking the text if need be.</p>
<p>This line in my .htaccess file directs everything starting /w/ to tinyurl.php</p>
<pre><code style="font-size: 9px;">RewriteRule ^w/(.+)    /tinyurl.php?hash=$1</code></pre>
<p>tinyurl.php:</p>
<pre><code style="font-size: 9px;">
$string = $_GET['hash'];
$k = getNumFromHash($string);
$url = sql_result("link", "ma_twitter", "id = $k");
sql_update("ma_twitter", "hits = hits + 1", "id = $k");
header("Location:http://www.magichat.co.uk".$url);
</code></pre>
<p>And the job&#8217;s done!  Doing it this way (without using tinyurl) means that you can jump to #anchors on the page.</p>
<p>See it in action at <a href="http://twitter.com/magichatuk">http://twitter.com/magichatuk</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/10/how-to-tweet-from-your-website-with-your-own-tinyurl-url-shortening-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
