Faster And Fault-Proof Tweet Button
At WRD, the previous tweet button for sharing stories was the cool Easy Retweet Button by John Resig. However, it was not perfect as, sometimes, it was unable to communicate with the URL shortener service and the tweet links were appearing buggy.
In search for a better one, I tested few others including the official tweet button. They were loading the links ok but had other issues like "loading slow", "blocking pages on load", etc.
And, for a button that is clicked by -maybe- 1/100 of the visitors, loading the scripts and making requests for every visitor didn't look like the smartest choice.
Here is another method, that is actually used at WRD now which loads very fast for everyone and almost fault-proof.

How it works?
First of all, the button is hosted locally and it does not make any requests until it is clicked.
- A link with the querystring that includes URL and the title of the web page is created, pointed to a server-side file (to be presented later in this article) and attached to any custom button we design.
- Once clicked, it sends the URL and title to the server-side file which creates the tweet link and redirects to Twitter with the tweet.
Pros
- Does not load any scripts from other domains (faster).
- Does not perform anything until being clicked (faster).
- Works with multiple URL shortener services. Currently, it uses Bit.ly by default, during the shortening, if there is an error, it falls back to Tinyurl. And if there is an error again, it uses the default URL. (fault-proof).
- Counts the number of characters used and, if more than 140, reformats it. (fault-proof).
- Any tweet button that you design can be used or just a "tweet it " text is enough (styleable).
Cons
- Does not display the number of retweets (as no requests are made on load).
The Code
It is built by PHP. You'll see that the code is simple and can be ported to any other scripting language quickly. Here it is:
<?php
/*
- A customizable, fast-loading and fault-proof tweet button.
- Built by Umut Muhaddisoglu (@umutm) of http://www.webresourcesdepot.com.
- Strict LTADSSIYND License (Listen To A Dire Straits Song If You Never Did)
*/
/* Requires Update - START */
$viaText = ' (via @umutm)';
$bitlyLogin = 'yourBitlyLogin';
$bitlyApiKey = 'yourBitlyPass';
/* Requires Update - END */
/* ******************************No Need To Update Below****************************** */
/* Getting Post Variables - START */
$postURL = urlencode($_GET['postURL']);
$postTitle = html_entity_decode(htmlspecialchars_decode($_GET['postTitle'], ENT_QUOTES));
/* Getting Post Variables - END */
/* Bit.ly Shorten Function - START */
function getBitlyURL($theURL,$theBitlyLogin,$theBitlyApiKey) {
return file_get_contents('http://api.bit.ly/v3/shorten?login=' . $theBitlyLogin . '&apiKey=' . $theBitlyApiKey . '&longUrl=' . $theURL . '&format=txt');
}
/* Bit.ly Shorten Function - END */
/* TinyURL Shorten Function - START */
function getTinyURL($theURL) {
return file_get_contents('http://tinyurl.com/api-create.php?url=' . $theURL);
}
/* TinyURL Shorten Function - END */
/* Shorten URL - START */
$shortenedURL = getBitlyURL($postURL,$bitlyLogin,$bitlyApiKey);
if (strrpos($shortenedURL, "bit.ly") == false) {
$shortenedURL = getTinyURL($postURL);
if (strrpos($shortenedURL, "tinyurl") == false) {
$shortenedURL = $postURL;
}
}
/* Shorten URL - END */
/* Prepare Tweet - START */
$tweet = urlencode($postTitle) . urlencode(' - ') . $shortenedURL . $viaText;
$tweetLength = strlen($postTitle . ' - ' . $shortenedURL . $viaText);
$postTitleLength = strlen($postTitle);
$restLength = strlen(' - ' . $shortenedURL . $viaText);
$dotsMargin = 4;
if ($tweetLength > 140) {
$tweet = urlencode(substr($postTitle,0,140 - $restLength - $dotsMargin)) . urlencode('.. - ') . $shortenedURL . $viaText;
}
/* Prepare Tweet - END */
/* Redirect To Twitter - START */
header('Location: http://twitter.com/intent/tweet?text=' . $tweet);
/* Redirect To Twitter - END */
?>
The Button
It is possible to use a button you designed. At WRD, the "Official Tweet Button" images are used thinking that they will be the standard soon. If you prefer to use it too, here is the HTML-CSS for it:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Faster Tweet Button</title>
<style>
#tweetButton a {display:block;width:55px;height: 20px;background: url("tweetButton.png") 0 0 no-repeat;}
#tweetButton a:hover {background: url("tweetButton.png") 0 -20px no-repeat;}
</style>
</head>
<body>
<span id="tweetButton"><a href="http://www.thedomain.com/tweet.php?postURL=changeWithTeURL&postTitle=changeWithTheTitle" target="_blank" rel="nofollow"></a></span>
</body>
</html>
How To Install?
Here are the steps:
- Open tweet.php and edit the Bit.ly user-pass of yours (it is free to get one) and the "via" text in the beginning of the file.
- Upload the file anywhere under your website.
- Link to your tweet button image with <a href="http://www.mydomain.com/tweet.php?postURL=<?php echo 'http://www.theURLOfThePage.com'?>&postTitle=<?php urlencode('The Title')?>"></a> by editing the URL and the title
- That's it.
For WordPress
After the first 2 steps above, for the 3rd step:
- Link to your tweet button image with <a href="http://www.webresourcesdepot.com/tweet.php?postURL=<?php echo get_permalink(); ?>&postTitle=<?php echo urlencode(get_the_title($post->ID)); ?>" target="_blank" rel="nofollow"></a>
Any thoughts to make it better?
- Tags:
Php Twitter
- Filed under: Goodies, License Free, Social Networking
- 3 Comments















3 Responses for "Faster And Fault-Proof Tweet Button"
it works faster, but what’s the advantage towards twitter own tweet button. now users are redirected to twitter, chances are they aren’t coming back to the site. other than that, very nice work.
@onehundred,
I think that loading a script from another domain that is used by a small percentage of users ends up in a worse browsing experience for the majority.
And considering the uptime track record of Twitter, it is so possible that the websites who use the script will be blocked on load from time-to-time.
Also, not so sure but, I think it is not asynchronous as well.
Thanks for this. I modified to work for a specific page; very helpful.
One key advantage over Twitter’s button is it only uses php, so will be good for any device. I am moving to doing all web conding in php; with iPhone, Blackberry, etc. can never guarantee results with JS.
Also like your approach to the “hover” button state: shifting the double image!