随着微博对文章字数的限制,对冗长的url进行压缩就是必须的了,相同功能的东西不需要每个人都来做,既然谷歌已经提供了API那么就可以直接使用。谷歌官方API在Google Code Labs里正式发布了这里是文档,这里是入门。
目前的API除了具备网址缩短和恢复功能,还允许开发者获得短网址的历史和数据分析。Google说还在继续改进一些易用性方面的改进,让spam和恶意网址过滤系统变得再厉害点。
下面是一个使用示例:
<?php/*API Google URL Shortnermarcusnunes.com*/
$url = $_GET['url']; //URL to short with goo.glif(!$url){$url = 'http://t.thinksns.com/';} //example$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://goo.gl/api/url'); //goo.gl api urlcurl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, 'user=toolbar@google.com&url='.$url.'&auth_token='.googlToken($url)); $saida = curl_exec($curl); curl_close($curl);
if($saida){ $json = json_decode($saida); echo $json->short_url; //result}
//goo.gl tokenfunction googlToken($b){ $i = tke($b); $i = $i >> 2 & 1073741823; $i = $i >> 4 & 67108800 | $i & 63; $i = $i >> 4 & 4193280 | $i & 1023; $i = $i >> 4 & 245760 | $i & 16383; $j = "7"; $h = tkf($b); $k = ($i >> 2 & 15) << 4 | $h & 15; $k |= ($i >> 6 & 15) << 12 | ($h >> 8 & 15) << 8; $k |= ($i >> 10 & 15) << 20 | ($h >> 16 & 15) << 16; $k |= ($i >> 14 & 15) << 28 | ($h >> 24 & 15) << 24; $j .= tkd($k); return $j;}
function tkc(){ $l = 0; foreach (func_get_args() as $val) { $val &= 4294967295; $val += $val > 2147483647 ? -4294967296 : ($val < -2147483647 ? 4294967296 : 0); $l += $val; $l += $l > 2147483647 ? -4294967296 : ($l < -2147483647 ? 4294967296 : 0); } return $l;}
function tkd($l){ $l = $l > 0 ? $l : $l + 4294967296; $m = "$l"; //must be a string $o = 0; $n = false; for($p = strlen($m) - 1; $p >= 0; --$p){ $q = $m[$p]; if($n){ $q *= 2; $o += floor($q / 10) + $q % 10; } else { $o += $q; } $n = !$n; } $m = $o % 10; $o = 0; if($m != 0){ $o = 10 - $m; if(strlen($l) % 2 == 1){ if ($o % 2 == 1){ $o += 9; } $o /= 2; } } return "$o$l";}
function tke($l){ $m = 5381; for($o = 0; $o < strlen($l); $o++){ $m = tkc($m << 5, $m, ord($l[$o])); } return $m;}
function tkf($l){ $m = 0; for($o = 0; $o < strlen($l); $o++){ $m = tkc(ord($l[$o]), $m << 6, $m << 16, -$m); } return $m;}?>