PHP Class Create Short URL via TinyURL, Is.gd, Hex.io, Tr.im & Bit.ly API
Posted by admin | Filed under Web Design, Web Development
Short URL is commonly used today for several reasons: avoid url garbling, take smallest space especially for long url which need to be posted at limited space format eg: twitter, also often used to manipulate user for specific purposes eg: hiding orginal url for phising and ads/affiliation links.
There are many websites that provide shortening url services, tinyurl, bit.ly, hex.io are some of them, and as addition to my simple twitter, plurk and facebook api implementation, i have created a PHP script to create short url on the fly, currently support: tinyURL, bit.ly, is.gd, tr.im and hex.io, but you can easily add other providers.
PHP Class
<?php
/*
** Title: Shortening URL Class
** Author: chazzuka <ariel@chazzuka.com>
** Author URL: http://www.chazzuka.com
** Latest Updated: September 24 2009
*/
class ShortUrl {
public static function create($url,$provider='tinyurl',$user='',$key='') {
$api_url = sprintf(self::api($provider),urlencode($url),$user,$key);
return self::inspect($provider,self::execute($api_url));
}
private static function execute($url) {
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
$text = curl_exec($ch);
curl_close($ch);
return $text;
}
private static function inspect($provider,$xml) {
if(!empty($xml)) {
switch(strtolower(trim($provider))){
case "bitly":
$o = new SimpleXMLElement($xml);
return (string)$o->results->nodeKeyVal->shortUrl;
break;
case "trim":
$o = new SimpleXMLElement($xml);
return (string)$o->url;
break;
case "isgd":
case "hexio":
default:
return $xml;
}
}
return false;
}
private static function api($provider) {
switch(strtolower(trim($provider))){
case "bitly":
$return = "http://api.bit.ly/shorten?version=2.0.1&format=xml&longUrl=%s&login=%s&apiKey=%s";
break;
case "isgd":
$return = "http://is.gd/api.php?longurl=%s";
break;
case "hexio":
$return = "http://hex.io/api-create.php?url=%s";
break;
case "digg":
$return = "http://services.digg.com/url/short/create?url=%s&appkey=%s&type=xml";
break;
case "trim":
$return = "http://api.tr.im/v1/trim_url.xml?url=%s";
break;
default:
$return = "http://tinyurl.com/api-create.php?url=%s";
}
return $return;
}
}
?>
Sample of usage:
<?php $url = 'http://www.chazzuka.com/blog/?p=192'; echo ShortUrl::create($url,'trim'); echo '<hr />'; echo ShortUrl::create($url,'tinyurl'); echo '<hr />'; echo ShortUrl::create($url,'isgd'); echo '<hr />'; echo ShortUrl::create($url,'hexio'); echo '<hr />'; echo ShortUrl::create($url,'bitly','your_user_name','your_api_key'); ?>
How to embed plurk status in wordpress blog
Posted by admin | Filed under Web Design, Web Development
I had signup with plurk a year ago but haven’t “plurking” since i use twitter a lot, and for me both of them were created for same purpose, microblogging, sharing what you’re up to in few sentences and follow what your friends up to. Today i had re-theming my personal blog and use free seven five wordpress theme by press75 which is very simple and already integrated with twitter status, delicious bookmarks, and external RSS feed, then i thinks its good to add plurk also.
Theres a wordpress plugin to achieve this purpose already, but here i only need to fetch status update, and dont need any widget or possibility to update my status from my blog, and here we go,
// fetch plurk messages
function plurk_messages(
$username = '',
$num = 1,
$list = true,
$show_username = false,
$show_moods = true,
$encode_utf8 = false)
{
$plurk_url = 'http://www.plurk.com';
$plurk_moods = array('loves','likes','shares','gives','hates','wants','wishes','needs','will','hopes','asks','has','was','wonders','feels','thinks','says','is');
array_walk($plurk_moods, 'plurk_addspace');
$plurk_mood_replace = array();
$plurk_mood_replacer = array();
include_once(ABSPATH . WPINC . '/rss.php');
$messages = fetch_rss('http://www.plurk.com/user/' . $username . '.xml');
if ($list) echo '<ul class="plurk">';
if ($username == '')
{
if ($list) echo '<li>';
echo 'RSS not configured';
if ($list) echo '</li>';
}
else
{
if ( empty($messages->items) )
{
if ($list) echo '<li>';
echo 'No public plurk messages.';
if ($list) echo '</li>';
}
else
{
// start fetching
$i = 0;
foreach ( $messages->items as $message )
{
$msg = $message['atom_content'];
$author_name = $message['author_name'];
$link = $plurk_url.$message['link_'];
$time = strtotime($message['published']);
if(!$show_moods) { $msg = str_replace($plurk_moods,'',$msg); }
else {
if(empty($plurk_mood_replace)||empty($plurk_moods_replacer)){
list($plurk_mood_replace,$plurk_mood_replacer) = plurk_moods_format($plurk_moods,$author_name);
}
$msg = str_replace($plurk_mood_replace,$plurk_mood_replacer,$msg);
}
if(!$show_username) { $msg = str_replace($author_name.' ','',$msg); }
else { $msg = str_replace($author_name,'<a class="plurk_username" href="'.$plurk_url.'/'.$username.'">'.$author_name.'</a>',$msg); }
if($encode_utf8) $msg = utf8_encode($msg);
if ($list) { echo '<li class="plurk-item">'; } else { echo '<p class="plurk-message">'; }
$msg = preg_replace("/<a href=[\"' ]?([^\"' >]+)[\"' ]?[^>]*>(.*?)<\/a>/i",'$1',$msg);
$msg = plurk_hyperlinks($msg);
$msg = plurk_users($msg);
echo $msg;
if ( ( abs( time() - $time) ) < 86400 ) { $h_time = sprintf( __('%s ago'), human_time_diff( $time ) ); }
else{ $h_time = date(__('Y/m/d'), $time); }
echo '<span class="plurk-timestamp"><abbr title="' . date(__('Y/m/d H:i:s'), $time) . '">' . $h_time . '</abbr></span>';
if ($list) { echo '</li>'; } else { echo '</p>'; }
$i++;
if ( $i >= $num ) break;
}
// end fetching -->
}
}
if ($list) echo '</ul>';
}
// set pattern + replacement for message prefix (says, is etc.)
function plurk_moods_format($plurk_moods,$user){
$plurk_moods_replace = $plurk_moods_replacer = array();
foreach($plurk_moods as $mood){
$plurk_moods_replace[] = "$user $mood";
$plurk_moods_replacer[] = $user.' <span class="plurk-'.trim($mood).'">'.trim($mood).'</span> ';
}
return array($plurk_moods_replace,$plurk_moods_replacer);
}
// add spaces into moods
function plurk_addspace(&$item,$key) { $item = "$item "; }
And couple of functions below taken from Twitter for WordPress plugin by Ricardo Gonzalez to format autolink and in-reply message.
// format autolink
function plurk_hyperlinks($text) {
// Props to Allen Shaw & webmancers.com
// match protocol://address/path/file.extension?some=variable&another=asf%
//$text = preg_replace("/\b([a-zA-Z]+:\/\/[a-z][a-z0-9\_\.\-]*[a-z]{2,6}[a-zA-Z0-9\/\*\-\?\&\%]*)\b/i","<a href=\"$1\" class=\"plurk-link\">$1</a>", $text);
$text = preg_replace('/\b([a-zA-Z]+:\/\/[\w_.\-]+\.[a-zA-Z]{2,6}[\/\w\-~.?=&%#+$*!]*)\b/i',"<a href=\"$1\" class=\"plurk-link\">$1</a>", $text);
// match www.something.domain/path/file.extension?some=variable&another=asf%
//$text = preg_replace("/\b(www\.[a-z][a-z0-9\_\.\-]*[a-z]{2,6}[a-zA-Z0-9\/\*\-\?\&\%]*)\b/i","<a href=\"http://$1\" class=\"plurk-link\">$1</a>", $text);
$text = preg_replace('/\b(?<!:\/\/)(www\.[\w_.\-]+\.[a-zA-Z]{2,6}[\/\w\-~.?=&%#+$*!]*)\b/i',"<a href=\"http://$1\" class=\"plurk-link\">$1</a>", $text);
// match name@address
$text = preg_replace("/\b([a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]*\@[a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]{2,6})\b/i","<a href=\"mailto://$1\" class=\"plurk-link\">$1</a>", $text);
//mach #trendingtopics. Props to Michael Voigt
$text = preg_replace('/([\.|\,|\:|\¡|\¿|\>|\{|\(]?)#{1}(\w*)([\.|\,|\:|\!|\?|\>|\}|\)]?)\s/i', "$1<a href=\"http://plurk.com/#search?q=$2\" class=\"plurk-link\">#$2</a>$3 ", $text);
return $text;
}
// in-reply to
function plurk_users($text) {
$text = preg_replace('/([\.|\,|\:|\¡|\¿|\>|\{|\(]?)@{1}(\w*)([\.|\,|\:|\!|\?|\>|\}|\)]?)\s/i', "$1<a href=\"http://plurk.com/$2\" class=\"plurk-user\">@$2</a>$3 ", $text);
return $text;
}
Copy those functions in your functions.php at your active theme folder, or you can put it in separate file then include it in your functions.php file.
The implementation is simple, just call the function in your file where you need your plurk status to be placed.
plurk_messages('username',10) ;
The function tahe few parameters in sequential order as follow:
- Username
- Number of status to be displayed
- Flag true/false Use unordinal list or note (ul li or p)
- Flag true/false show your username in the message
- Flag true/false show the message prefix or not
- Flag true/false Encode the message in UTF8 or not
How to styling? you need to add CSS for few class of the HTML tag which are auto generated by the function
ul.plurk, li.plurk-item. p.plurk-message, a.plurk_username, span.plurk-timestamp, a.plurk-link, a.pluk-user, also series of span with classes prefix by plurk- and followed by message prefix eg: span.plurk-says, span.plurk-loves etc.
Do you plurking? add me!
Thas it, hopely it usefull for you.
Scripty2 the successor of script.aculo.us
Posted by admin | Filed under Web Design, Web Development
Thomas Fuchs has announced the alpha release of scripty2, the successor of well known, powerful and flexible javascript library script.aculo.us. scripty2 is designed to help you write your own delicious visual effects & user interfaces.
Check out the demo to see the possibilities scripty2 can do, however as it is still in alpha version which means there will be tweaking and rewrite into the library and it is not yet recommended for production use.
Social Network Icon Pack
Posted by admin | Filed under Web Design, Web Development
80+ social network icons which consists of 40+ 16 pixel x 16 pixel icons and 40+ 32 pixel by 32 pixel icons all in 32-bit PNG format by komodomedia.
![]()
jQuery validation engine, jquery inline form validation
Posted by admin | Filed under Web Design, Web Development
jQuery validation engine, yet another nice form validation plugin for jquery javascript framework, comes with language localization supported and many predefined validation rules:
- optional: Special: Only validate when the field is not empty
- required: Field is required
- length[0,100] : Between x and x characters allowed
- minCheckbox[7] : Set the maximum checkbox autorized for a group
- confirm[fieldID] : Match the other field (ie:confirm password)
- telephone : Match telephone regEx rule.
- email : Match email regEx rule.
- onlyNumber : Numbers only
- noSpecialCaracters : No special characters allowed
- onlyLetter : Letters only
- date : Invalid date, must be in YYYY-MM-DD format
but you also could define a custom validation rule i.e:
"telephone":{
"regex":"/^[0-9-()]+$/",
"alertText":"* Invalid phone number"},
Has been tested in Internet Exploder 6 & 7, Firefox 3+, Safari 4, Chrome 1+
Js.Class Ruby style javascript
Posted by admin | Filed under Web Design, Web Development
JS.Class is a library designed to facilitate object-oriented development in JavaScript. It implements Ruby’s core object, module and class system and some of its metaprogramming facilities, giving you a powerful base to build well-structured OOP.
JS.Class is designed to make JavaScript behave like Ruby in terms of its OOP structures. To this end, it provides the following features:
- Classes and modules with Ruby-compatible inheritance
- Subclassing and mixins
- Late-binding arguments-optional super calls to parent classes and mixins
- Singleton methods and eigenclasses
- included, extended and inherited hooks
- Method binding
- Ports of various standard Ruby modules, including Enumerable, Hash, Set, Observable, Comparable, Forwardable
Its inheritance system supports late-bound super() calls to parent classes and modules, including calls from singleton methods. It has been designed to mimick Ruby as closely as possible, so if you know Ruby you should feel right at home.
var Animal = new JS.Class({
initialize: function(name) {
this.name = name;
},
speak: function(things) {
return 'My name is ' + this.name + ' and I like ' + things;
}
});
Download & example available at it’s official website
Javascript Infovis Toolkit
Posted by admin | Filed under Web Design, Web Development
The JavaScript InfoVis Toolkit provides tools for creating Interactive Data Visualizations for the Web.
Features:
- Multiple Data Representations,
Treemaps, Radial Layouts, HyperTrees/Graphs, SpaceTree-like Layouts, and more… - Major Browsers Support,
IE6+, Firefox2+, Safari3+, Opera9.5+ - Open Source,
Licensed under the BSD License - Library Agnostic,
You may use the JIT with your favorite DOM manipulation framework - Extensible,
All visualization classes are mutable, so you can easily add/override any method you want. - Composable,
Visualizations can be combined in order to create new visualization methods.
Check out the demo page along with source code example
WordPress 2.8 available for download
Posted by admin | Filed under Web Design, Web Development
Matt has announced the new release of wordpress 2.8 – Baker, with over 790 bugs fixed, and over 180 new features, changes, upgrades, and improvements.
The Major Improvements:
- WordPress style and scripting has changed which makes the new wordpress 2.8 is way faster to use.
- Enabled browse the entire theme directory and install a theme with one click
- CodePress editor gives syntax highlighting to the previously-plain editor. Also there is now contextual documentation for the functions in the file you’re editing linked right below the editor.
- widgets interface redesigned, also with much cleaner and robust widget API
- new Screen Options on every page
Ready to upgrade? grab the new wordpress 2.8 here
TinyScroller JavaScript Scrollable Div – 1.7KB
Posted by admin | Filed under Web Design, Web Development

TinyScroller is a basic scrollable div script at only 1.7KB. It can be used with any HTML and degrades gracefully. The styling is completely customizable through the simple CSS. More features will be coming soon. I have redesigned leigeber.com and am going to be publishing a number of scripts and articles shortly. I will also be releasing my previous blog theme for free. A few of the upcoming scripts:
- TinySlideshow V3 – many new features and fixes
- TinyTable V3 – advanced search and filtering capabilities
- TinySlider – sliding content script
- TinyDrag – draggable box script
- TinyBox V2 – many new features
- TinyValidator – completely rewritten form validation
- TinyTooltip – slick and full featured tooltip script
- TinyEditor – lightweight JavaScript WYSIWYG editor
- Bug fixes to all other existing scripts.
To initialize a scrollable div use the following code:
TINY.scroller.init('scroll','content','scrollbar','scroller','active')
The TINY.scroller.init function takes 5 parameters: the id of the parent content wrapper, the id of the content div, the id of the scroll div, the id of the scroll button, and the class of the scroll button active state (optional).
This script has been tested working in IE6-IE8, Firefox, Opera, Chrome, and Safari. Please send bug reports to michael@leigeber.com with the subject “BUG REPORT”. This script is available free of charge for any project, personal or commercial, under the creative commons license and is offered AS-IS, NO FREE SUPPORT provided.
Click here to download the script.
Flash Charts With JavaScript API – amCharts
Posted by admin | Filed under Web Design, Web Development

I have been working on a business intelligence application recently and did a lot of research for a Flash based library to build out dynamic charts. There are a number of players in the market, some free and some even open source. I ended up choosing a product called amCharts which seemed very flexible and the pricing was generally lower than the competition. You can download and use the charts for free with the “chart by amCharts” text in the top left corner, this comes in handy when evaluating. Being savvy with JavaScript, I liked the fact that there was a powerfully API behind the charts for data and settings manipulation. As such, there is no need for postbacks or tedious AJAX calls.
Another selling point was the ASP.NET control library they offer which made development much quicker. I also chose the developer license to get the full Flash source code for some custom modifications. One last cool feature is the chart builder at http://extra.amcharts.com/editor/ which makes visualizing the charts and generating the settings file a breeze. Charts like this can really add some “wow” factor to an application. They have an active community forum, plenty of documentation, and a helpful staff so check them out.
Click here for a quick demonstration of a dynamic pie chart inside a draggable box which should be ready for release soon. If you are interested in the demo source you can download it here. Check out their website for more demos and details.