短鏈接實現原理和簡單調用


  最近在做短信業務的時候,有個內容里含有url鏈接,我們拼裝好后覺得url巨長,想起很多商家都是用短鏈接的方式,我就找了找原理及簡單的應用,下面會先講一下簡單調用第三方接口的實現思路和簡要代碼,然后再講一下真實的里面的原理和一些簡單的實現思路。

 

  經常看到的短鏈接在微博,微信,短信中可以看到,百度雲也有分享生成短鏈接的方式。對於這樣好處我覺得有三點:

1、微博限制字數為140字一條,那么如果我們需要發一些連接上去,但是這個連接非常的長,以至於將近要占用我們內容的一半篇幅,這肯定是不能被允許的,所以短網址應運而生了。

2、短網址可以在我們項目里可以很好的對開放級URL進行管理。有一部分網址可以會涵蓋性、暴力、廣告等信息,這樣我們可以通過用戶的舉報,完全管理這個連接將不出現在我們的應用中,應為同樣的URL通過加密算法之后,得到的地址是一樣的。

3、我們可以對一系列的網址進行流量,點擊等統計,挖掘出大多數用戶的關注點,這樣有利於我們對項目的后續工作更好的作出決策。

 

  各種第三方API提供商也是不僅僅提供了短鏈接的轉化,當然谷歌大佬還是做的最專業的,他家的是帶有分析,點擊統計的。

 

  谷歌大佬的簡單測試的地址:https://goo.gl/#    將鏈接放進去就可以生成一個短鏈接了,下面還有分析。大佬就是叼。想要調用這個API的話,文檔在這里:https://developers.google.com/url-shortener/v1/getting_started  做過谷歌API的,用這個比較方便,可以省去研究谷歌API的授權的問題。如果沒做過還有下面的微信,微博,我想大多人應該都做過吧。

 

  微博的估計做的少,相信大多數人還是微信用的多,appID,appSecret都用的比較六了。我用的也是微信的,就用微信做介紹,微博的話,調用其實也是授權的問題,只要有方便的授權,調用都很簡單。下面講微信的。

 

  喏,這個是openwechat平台的接口文檔,http://open.wechat.com/cgi-bin/newreadtemplate?t=overseas_open/docs/oa/promoting/url-shortener    哈,這個是英文滴,不要一打開就頭大哦,兩句話總結,就兩步,獲取accesstoken,拿着調用接口。就完事了。

  接口地址:HTTP request method: POST
https://api.wechat.com/cgi-bin/shorturl?access_token=ACCESS_TOKEN

  格式什么的,我就不貼了,看那文檔吧。看不懂?我整理了個代碼,看這個(PHP):

<?php
/**
 * Created by PhpStorm.
 * User: Yisen-YF
 * Date: 17/8/2
 * Time: 上午11:23
 * File: wechat_shorturl.php
 * 
 */
header("Content-Type: text/html; charset=utf-8");
$longurl='http://www.cnblogs.com/yangf2016';
//if(isset($_POST['longurl'])){
//    $longurl = $_POST['longurl'];
//}else{
//    die("沒有post值進來");
//}

//echo $longurl;

$id = "你的AppID";//appid
$secret = "你的AppSecret";//secret
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$id."&secret=".$secret."";

$token = getAccessToken($url);
//echo $token;die;
//$token = 'Iuy4tZ4YXdIp03AGwfpC1FL2f6vYUQ83uirWXighPXLLO0D2o44aLFQP_laHm42JWW-TeE1BiSn5wNTRnAVPEm9BZgkjJXhfVx6xB5T4zr8Il2F2vUgTWSQS6JwaTGIPDHIjADAPTU';
//你的長鏈接
//$longurl = "http://www.baidu.com/";
$data = '{"action":"long2short","long_url":"'.$longurl.'"}';
$shorturl = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token=".$token."";

echo httpPost($shorturl,$data);
//echo "你的長鏈接是:".$longurl;
//echo "<br />";
////生成的短鏈接
//echo "生成的短鏈接是:".$shortArr['short_url'];
//echo $shortArr;

function getAccessToken($url) {
    // access_token 應該全局存儲與更新,以下代碼以寫入到文件中做示例
    $data = json_decode(file_get_contents("access_token.json"));
    if ($data->expire_time < time()) {
//        echo 1;die;
        // 如果是企業號用以下URL獲取access_token
        $output = httpGet($url);
        $res = (array)json_decode($output);
        $access_token = $res['access_token'];
        if ($access_token) {
            $data->expire_time = time() + 7000;
            $data->access_token = $access_token;
            $fp = fopen("access_token.json", "w");
            fwrite($fp, json_encode($data));
            fclose($fp);
            //echo 'access_token.json讀寫了一次';
        }
    } else {
//        echo 2;die;
        $access_token = $data->access_token;
    }
    return $access_token;
}

  function httpGet($url) {
      //echo "url = ".$url;
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_TIMEOUT, 500);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
      curl_setopt($curl, CURLOPT_URL, $url);

      $res = curl_exec($curl);
      curl_close($curl);
      return $res;
  }

  function httpPost($url,$data){
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_TIMEOUT, 500);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

      $res = curl_exec($curl);
      curl_close($curl);
      return $res;
  }

  ?>

  這個有兩個點,

一、AK的獲取和存儲是放到json文件中了,這個可以按照自己項目中實際策略進行整理改造

二、post請求接口是自己寫了個方法,這個也可以按照自己項目整理替換;

 

順便說一下微信授權常見的問題,授權token過期和自己服務器緩存的策略,還有全局使用統一token的策略。

具體的就不說了,做過的肯定都知道,順帶找個博客給大家看,http://www.hutuseng.com/article/weixin-api-invalid-credential

 

Other:另外的接口地址實例:https://easywechat.org/zh-cn/docs/short-url.html

 

========================以上是應用級別,可以解決任務,以下是具體的原理和眾多博客大佬們的實現================

 

1,10進制自增ID,轉16進制,轉62進制的方式:http://blog.csdn.net/beiyeqingteng/article/details/7706010

2,md5簡便算法:http://www.chongchonggou.com/g_44404501.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM