• <acronym id="eyrpt"></acronym>
    <track id="eyrpt"></track>
    <p id="eyrpt"></p>

      <table id="eyrpt"><ruby id="eyrpt"></ruby></table>
      <table id="eyrpt"></table>

    1. 當前位置:首頁 > 短網址資訊 > 正文內容

      URL短鏈接壓縮算法-短網址一一映射

      微博短地址原理解析 (Java實現)

      一種方法是調用第三方提供短址服務的接口來生成即可。一般他們提供接口或調用包。

      如:


      怎樣調用百度短網址api?  http://www.baidu.com/search/dwz.html (無需授權即可調用)




      新浪短網址API接口(6月13日更新)




      新浪更新后的長網址轉短網址官方API文檔:http://open.weibo.com/wiki/2/short_url/shorten

      調用地址:https://api.weibo.com/2/short_url/shorten.json

      請求方式:GET

      請求參數:

      1. access_token:  授權后獲得

      2. url_long:  待轉換的長地址

      返回結果:

      復制代碼
      {
          "urls": [
              {
                  "url_short": "http://t.cn/h4DwT1",
                  "url_long": "http://finance.sina.com.cn/",
                  "type": 0,
                  "result": "true"
              }
          ]
      }
      復制代碼

      注意:每次使用時都需要access_token,而access_token是需要登錄后授權才能得到的。如果你想做一個短網址轉換的應用,肯定不能要求用戶先登錄微博、授權、然后才能使用你的功能,這樣用戶體驗太差。你可以在服務器端用個測試帳號定期授權來獲取access_token,這樣就不需要用戶登錄微博授權了,用戶可以直接輸入長網址,獲取轉換后的短網址。

      關于如何授權獲取access token,請參考這篇博文:http://www.virginiabusinesslawupdate.com/


      第二種方法是自己實現,可以單獨搭建服務器提供短網址映射服務。

      (

      有個關鍵點 ..短網址 是否可以直接通過算法還原..如果不能直接通過算法還原..

      需要借助存儲(無論是db,緩存,nosql或者別的什么),那么其實采用什么樣的算法都不是重點.

      )


       最近,項目中需要用到短網址(ShortUrl)的算法,于是在網上搜索一番,發現有C#的算法,有.Net的算法,有PHP的算法,就是沒有找到Java版的短網址(ShortUrl)的算法,很是郁悶。同時還發現有不少網友在發帖求助,怎么實現Java版的短網址(ShortUrl)的算法。干脆一不做,二不休,參考了一下網上比較流行的php版短網址(ShortUrl)算法:

      再根據自己的理解,用Java實現了該短網址(ShortUrl)的算法。(\(^o^)/YES!我還真厲害?。?/p>

      先來廢話一下,是在別人的帖子上看到的,主要是讓大家了解一下短網址(ShortUrl)。

      時下,短網址應用已經在全國各大微博上開始流行了起來。例如QQ微博的url.cn,新浪的t.cn等。

      我們在新浪微博上發布網址的時候,微博會自動判別網址,并將其轉換,例如:http://t.cn/hrYnr0。為什么要這樣做的,原因我想有這樣幾點:

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

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

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

      其實以上三點純屬個人觀點,因為在我接下來的部分項目中會應用到,所以就了解了一下,下面先來看看短鏈接映射算法的理論(網上找到的資料):

      ① 將長網址用md5算法生成32位簽名串,分為4段,,每段8個字符;

      ② 對這4段循環處理,取每段的8個字符, 將他看成16進制字符串與0x3fffffff(30位1)的位與操作,超過30位的忽略處理;

      ③ 將每段得到的這30位又分成6段,每5位的數字作為字母表的索引取得特定字符,依次進行獲得6位字符串;

      ④ 這樣一個md5字符串可以獲得4個6位串,取里面的任意一個就可作為這個長url的短url地址。

      很簡單的理論,我們并不一定說得到的URL是唯一的,但是我們能夠取出4組URL,這樣幾乎不會出現太大的重復。

      首先,請大家了解在Java中如何用MD5來加密字符串得到32位的加密后的字符串,下面是我已經封裝好的JavaMD5算法:

      1. private final static String[] hexDigits = {  

      2.       "0""1""2""3""4""5""6""7",   

      3.       "8""9""a""b""c""d""e""f"};   

      4.   

      5.     public static String byteArrayToHexString(byte[] b){  

      6.         StringBuffer resultSb = new StringBuffer();  

      7.         for (int i = 0; i < b.length; i++){  

      8.             resultSb.append(byteToHexString(b[i]));  

      9.         }  

      10.         return resultSb.toString();  

      11.     }  

      12.   

      13.     private static String byteToHexString(byte b){  

      14.         int n = b;  

      15.         if (n < 0)  

      16.             n = 256 + n;  

      17.         int d1 = n / 16;  

      18.         int d2 = n % 16;  

      19.         return hexDigits[d1] + hexDigits[d2];  

      20.     }  

      21.   

      22.     public static String MD5Encode(String origin){  

      23.         String resultString = null;  

      24.             try {  

      25.                   

      26.                 resultString=new String(origin);  

      27.                 MessageDigest md = MessageDigest.getInstance("MD5");  

      28.                   

      29.                 resultString.trim();  

      30.   

      31.                 resultString=byteArrayToHexString(md.digest(resultString.getBytes("UTF-8")));  

      32.             }catch (Exception ex){}  

      33.             return resultString;  

      34.         }  

      35.   

      36.     public static void main(String[] args)   

      37.     {  

      38.       

      39.         String data = "189022881112011111118:09sz0000123456789987654321";  

      40.         System.out.println(MD5Encode(data));  

      41.     }  

       

       


       

      1. public class ShortUrl {   

      2.     public static void main(String[] args) {   

      3.         String url = "http://www.sunchis.com";   

      4.         for (String string : ShortText(url)) {   

      5.             print(string);   

      6.         }   

      7.     }   

      8.        

      9.     public static String[] ShortText(String string){   

      10.         String key = "XuLiang";                 //自定義生成MD5加密字符串前的混合KEY   

      11.         String[] chars = new String[]{          //要使用生成URL的字符   

      12.             "a","b","c","d","e","f","g","h",   

      13.             "i","j","k","l","m","n","o","p",   

      14.             "q","r","s","t","u","v","w","x",   

      15.             "y","z","0","1","2","3","4","5",   

      16.             "6","7","8","9","A","B","C","D",   

      17.             "E","F","G","H","I","J","K","L",   

      18.             "M","N","O","P","Q","R","S","T",   

      19.             "U","V","W","X","Y","Z"   

      20.         };   

      21.            

      22.         String hex = MD5Encode(key + string);   

      23.         int hexLen = hex.length();   

      24.         int subHexLen = hexLen / 8;   

      25.         String[] ShortStr = new String[4];   

      26.            

      27.         for (int i = 0; i < subHexLen; i++) {   

      28.             String outChars = "";   

      29.             int j = i + 1;   

      30.             String subHex = hex.substring(i * 8, j * 8);   

      31.             long idx = Long.valueOf("3FFFFFFF"16) & Long.valueOf(subHex, 16);   

      32.                

      33.             for (int k = 0; k < 6; k++) {   

      34.                 int index = (int) (Long.valueOf("0000003D"16) & idx);   

      35.                 outChars += chars[index];   

      36.                 idx = idx >> 5;   

      37.             }   

      38.             ShortStr[i] = outChars;   

      39.         }   

      40.            

      41.         return ShortStr;   

      42.     }   

      43.        

      44.     private static void print(Object messagr){   

      45.         System.out.println(messagr);   

      46.     }   

      47. }   


       

      下面來看看程序部分:現在可以直接使用ShortText(url)方法,可以等到下面四組值:

       

      1. ShortText("http://www.sunchis.com")[0];  //得到值:Jzyqma   

      2. ShortText("http://www.sunchis.com")[1];  //得到值:QBrMzm   

      3. ShortText("http://www.sunchis.com")[2];  //得到值:bQreM3   

      4. ShortText("http://www.sunchis.com")[3];  //得到值:VNBRna   


      選取結果中四個值的任何一個值即可作為URL對應生成的短網址了。


      掃描二維碼推送至手機訪問。

      版權聲明:本文由短鏈接發布,如需轉載請注明出處。

      本文鏈接:http://www.virginiabusinesslawupdate.com/article_204.html

      分享給朋友:

      相關文章

      通過全文相似度來尋找相同或相似的代碼

      通過全文相似度來尋找相同或相似的代碼

      最近筆者在職的公司在不斷的做App的包瘦身工作, 身邊的同事們也研究出了各種各樣實用的工具來輔助加快包瘦身的進程。在這么一個大環境下, 筆者突然又冒出一個很無聊的工具想法通過文本匹配來尋找相似的方法函數筆者給這個小工具取了一個非常傳神且牛逼...

      最久29分鐘送達?又一家“智能零售”超市

      最久29分鐘送達?又一家“智能零售”超市

      【FT12短網址】8月2日消息,億邦動力網獲悉,雅堂小超與餓了么蜂鳥配送簽署戰略合作。此次合作雅堂小超將推出定時精準配送等一系列重磅內容,雙方將在智能零售即時配送領域展開深入合作。據相關統計數據表明,中國零售行業的總規模已達到4.5萬億美元...

      一場官司耗費300萬美元 出口侵權咋避免?

      【FT12短網址】在美國,知識產權很受重視。若一個出口至美國的公司要打一場商標或專利侵權官司,費用也許到達160-300萬美金。而其商品商標或專利被投訴侵權成功的話,則直接會面對丟掉美國商場的危險。因而,跨境電商公司要想深耕美國商場,需要加...

      外賣機器人替外賣小哥完成辦公樓最后一公里

      由餓了么未來物流團隊打造的中國首個智能外賣機器人“萬小餓”首次出現在上海虹橋萬科中心,它將以其智能送餐服務,代替外賣小哥完成辦公樓宇內的“最后一公里”。未來,包括萬科在內的住宅、商業、辦公等不同類型的場所都將可能迎來機器人的入駐。據介紹,“...

      Centos 7中文語言包的安裝及中文支持,解決中文亂碼問題

      修改配置文件LANG="zh_CN.UTF-8"改為中文字符集然后在查看更改后的系統語言變量[root@5c46832b5c01 ~]# locale locale: Cannot...

      騰訊短網址在線生成哪家好?

       眾所周知,騰訊短網址就是騰訊微博的url.cn。這個短網址的優點是:訪問速度快、可以在騰訊QQ以及騰訊微信等騰訊系的社交軟件上傳播。缺點:由于接入了騰訊的惡意網址檢測api,所以如果你的網址被多人舉報,很容易被攔截。所以,很難從...

      發表評論

      訪客

      ◎歡迎參與討論,請在這里發表您的看法和觀點。
      一本色综合网久久
    2. <acronym id="eyrpt"></acronym>
      <track id="eyrpt"></track>
      <p id="eyrpt"></p>

        <table id="eyrpt"><ruby id="eyrpt"></ruby></table>
        <table id="eyrpt"></table>