shorturl.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. /*
  3. * 生成新浪的短链接或还原新浪短链接
  4. */
  5. class shorturl{
  6. //新浪APPKEY
  7. const APPKEY='3310867184';
  8. const SHORTURL= 'http://t.cn/';
  9. //CURL
  10. private static function CURLQueryString($url){
  11. //设置附加HTTP头
  12. $addHead=array("Content-type: application/json");
  13. //初始化curl
  14. $curl_obj=curl_init();
  15. //设置网址
  16. curl_setopt($curl_obj,CURLOPT_URL,$url);
  17. //附加Head内容
  18. curl_setopt($curl_obj,CURLOPT_HTTPHEADER,$addHead);
  19. //是否输出返回头信息
  20. curl_setopt($curl_obj,CURLOPT_HEADER,0);
  21. //将curl_exec的结果返回
  22. curl_setopt($curl_obj,CURLOPT_RETURNTRANSFER,1);
  23. //设置超时时间
  24. curl_setopt($curl_obj,CURLOPT_TIMEOUT,8);
  25. //执行
  26. $result=curl_exec($curl_obj);
  27. //关闭curl回话
  28. curl_close($curl_obj);
  29. return $result;
  30. }
  31. //处理返回结果
  32. private static function doWithResult($result,$field){
  33. $result=json_decode($result,true);
  34. return isset($result[0][$field])?$result[0][$field]:'';
  35. }
  36. //获取短链接
  37. public static function getShort($url_long){
  38. fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/ShortUrlRedisService.php');
  39. $short_url_redis = new ShortUrlRedisService();
  40. $url_short = $short_url_redis->get_short($url_long);
  41. if (empty($url_short)){
  42. $url='http://api.t.sina.com.cn/short_url/shorten.json?source='.self::APPKEY.'&url_long='.$url_long;
  43. $result=self::CURLQueryString($url);
  44. $url_short = self::doWithResult($result,'url_short');
  45. $short_url_redis->set_short($url_long,$url_short);
  46. }
  47. return $url_short;
  48. }
  49. //获取长链接
  50. public static function getLong($url){
  51. $url='http://api.t.sina.com.cn/short_url/expand.json?source='.self::APPKEY.'&url_short='.$url;
  52. $result=self::CURLQueryString($url);
  53. return self::doWithResult($result,'url_long');
  54. }
  55. }
  56. ?>