騰訊web引用skey g_tk bkn和日期顯示分析

skey,bkn,g_tk獲取

       skey是一個比較重要的參數,騰訊的很多網頁上的應用都有用到這個參數,這個參數是在登陸後存放在cookies

中的,比如bkn,g_tk就是用這個參數去計算獲得。skey會定時該變。

 

獲取可變參數值(bkn,g_tk)

步驟:

1、登陸或在cookie中獲取skey

1、通過計算獲取bkn(羣信息獲取)

2、通過計算獲取g_tk

 

java代碼計算:

private int getGTKorBKN(String skey) {

   int hash = 5381;

   for (int i = 0, len = skey.length(); i < len; ++i)

   hash += (hash << 5) + skeyValue.charAt(i);

   int gtkOrbkn = hash & 2147483647;

   return gtkOrbkn ;

}


顯示日期獲取

       在騰訊的一些應用上,很多時候我們會從一些接受到的數據中得到一個ceateTime,或者time之類的數據,但是

這個值跟我們在頁面上看到的值不一樣,以下我們就來看看我們獲取到的值通過怎樣的計算後可以得到我們顯示在

頁面上的時間值。

步驟:

1、獲取帶有time參數的值。

2、將獲取到的值進行以下計算就能得到與頁面顯示相同的效果。

頁面js源碼:

 b = $("qun-created");

 b.innerHTML = genDateStr(new Date(qunInfo.gCrtTime * 1E3));

 function genDateStr(a, b) {

    b = b || "-";

    return a.getFullYear() + b 
           + String(a.getMonth() + 101).substring(1) + b 
           + String(a.getDate() + 100).substring(1);
}

java 代碼模擬實現:


//通過gcrTime獲取真實的時間
public String getRealgCrtTime(String gcrtTime){

    long real_gcrtTime = Long.parseLong(gcrtTime)*1000;

    Date date = new Date(real_gcrtTime);

    Calendar calendar = Calendar.getInstance();

    calendar.setTime(date);

    String year = calendar.get(Calendar.YEAR)+"";

    String month = calendar.get(Calendar.MONTH)+101+"";

    String date2 = calendar.get(Calendar.DATE)+100+"";

    String realgcetimeStr = year+"-" + month.substring(
                     1, month.length()) + "-" 
		     + date2.substring(1, date2.length());

    System.out.println(realgcetimeStr);

    return realgcetimeStr;

 }
 

例子:

登陸後獲取羣創建時間:
鏈接:http://qinfo.clt.qq.com/cgi-bin/qun_info/get_group_info?gc=羣號&bkn=以上計算獲取

首發:http://blog.sina.com.cn/s/blog_97b60b5d0101finz.html

更多技術分享請到這裏



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章