• <table id="5bpl0"></table>

    <td id="5bpl0"></td>
    <td id="5bpl0"><ruby id="5bpl0"></ruby></td>

    <bdo id="5bpl0"></bdo>

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

    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

    分享給朋友:

    相關文章

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

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

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

    FT12短網址教你如何加入百度網站原創保護計劃,增加網站收益

    FT12短網址教你如何加入百度網站原創保護計劃,增加網站收益

    自創維護1、怎么參加自創維護?2、數據怎么準確提交?3、網站收益是啥?今日下午FT12短網址提早做好了平時作業,而且主動跟領導請求下午百度站長有直播能夠學習自創維護常識!得到領導的同意,提早準備好word文檔記錄箐箐直播間講的要點內容常識。...

    FT12短網址:如何假裝看起來很窮?

    FT12短網址:如何假裝看起來很窮?

    如果一個人能無所顧忌坦然說自己窮,那他不是太年輕,就是太幸福。 一般人到中年,無論如何都要想法證明自己,并沒有那么窮,因為窮人的自尊心啊,稍微碰一下滿地都是血。 前幾天我去吃親戚家喜酒,別人都珠光寶氣穿新衣服去,顯得光彩...

    新手最常見的負面SEO方法

    新手最常見的負面SEO方法

    什么是負面SEO負面SEO指的是自個網站排行做不上去時,通過一些辦法,通常是不正當的辦法,把競爭對手的頁面拉下來,有時分作用和自個頁面排上去差不多。這兒說的負面SEO和利用SEO手法限制公司負面新聞(或者叫搜索引擎上的網絡負面危機公關和名譽...

    Gartner發布2017年云安全技術成熟曲線

    Gartner發布2017年云安全技術成熟曲線

    [ FT12短網址 ] 云應用的快速增長不斷提高人們在云計算環境中對于數據、應用程序和工作負載的興趣。Gartner公司發布的云安全技術成熟曲線將有助于安全專業人士重新定位他們在業務支持方面的角色。圖片來自網絡云應用的快速增長不斷...

    簡單高效的短網址生成服務C#實現

    簡單高效的短網址生成服務C#實現

    項目中有一處需求,需要把長網址縮為短網址,把結果通過短信、微信等渠道推送給客戶。剛開始直接使用網上現成的開放服務,然后在某個周末突然手癢想自己動手實現一個別具特色的長網址(文本)縮短服務。由于以前做過socket服務,對數據包的封裝排列還有...

    發表評論

    訪客

    ◎歡迎參與討論,請在這里發表您的看法和觀點。
    一本色综合网久久
  • <table id="5bpl0"></table>

    <td id="5bpl0"></td>
    <td id="5bpl0"><ruby id="5bpl0"></ruby></td>

    <bdo id="5bpl0"></bdo>