url添加Timestamp逻辑修改

This commit is contained in:
huangzhuanghua
2016-09-28 18:47:14 +08:00
parent 6546b580e9
commit 09a0eabc48
30 changed files with 181 additions and 179 deletions

View File

@ -1,8 +1,10 @@
package com.gh.common.util;
import android.support.v4.util.ArrayMap;
import android.text.TextUtils;
import com.gh.common.constant.Config;
import com.gh.common.constant.Constants;
import java.util.regex.Pattern;
@ -11,57 +13,21 @@ public class TimestampUtils {
// 基准时间
private static final long BASE = 1426608000000L;
private static ArrayMap<String, Integer> map;
private static ArrayMap<String, Integer> intervalMap; // 间隔
private static ArrayMap<String, Integer> cdMap; // cd
/*
* 根据CD获取时间戳
*/
public static long getTimestamp(String url, int cd) {
if (map == null){
map = new ArrayMap<>();
map.put("^" + Config.HOST + "v2/version" + "$", 5);
map.put("^" + Config.HOST + "v2/disclaimer" + "$", 10);
map.put("^" + Config.HOST + "v2/stat/download" + "$", 15);
map.put("^" + Config.HOST + "v2/version\\?version_name=.+\\&channel=.+" + "$", 20);
map.put("^" + Config.HOST + "v1d45/news\\?type_group=.+\\&offset=.+\\&limit=20" + "$", 25);
map.put("^" + Config.HOST + "v1d45/news/.+/digest" + "$", 30);
map.put("^" + Config.HOST + "v1d45/news/.+/detail" + "$", 35);
map.put("^" + Config.HOST + "v1d45/news/.+/suggestion" + "$", 40);
map.put("^" + Config.HOST + "v1d45/game/remenkapai" + "$", 45);
map.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=3" + "$", 50);
map.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=20\\&offset=.+" + "$", 55);
map.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=20\\&offset=.+\\&type=.+" + "$", 60);
map.put("^" + Config.HOST + "v1d45/search/game/default" + "$", 65);
map.put("^" + Config.HOST + "v1d45/search/game\\?keyword=.+" + "$", 70);
map.put("^" + Config.HOST + "v1d45/search/news\\?game_id=.+\\&keyword=.+\\&page=.+\\&limit=20" + "$", 75);
map.put("^" + Config.HOST + "v1d45/support/setting/ui" + "$", 80);
map.put("^" + Config.HOST + "v1d45/support/setting/platform" + "$", 85);
map.put("^" + Config.HOST + "v1d45/support/package/.+/game/digest" + "$", 90);
map.put("^" + Config.HOST + "v1d45/support/package/unused\\?skip=.+" + "$", 95);
map.put("^" + Config.HOST + "v1d45/support/package/update\\?package=.+" + "$", 100);
map.put("^" + Config.HOST + "v1d45/support/package/latest\\?package=.+" + "$", 105);
map.put("^" + Config.HOST + "v1d45/support/setting/download/.+/switch2\\?version=.+" + "$", 110);
map.put("^" + Config.HOST + "v1d46/support/suggestion" + "$", 115);
map.put("^" + Config.HOST + "v1d50/index/slides" + "$", 120);
map.put("^" + Config.HOST + "v1d50/game/chajian" + "$", 125);
map.put("^" + Config.HOST + "v1d50/game/tuijian" + "$", 130);
map.put("^" + Config.HOST + "v1d50/game/column/.+\\?page=.+" + "$", 135);
map.put("^" + Config.HOST + "v1d50/game/danjiyouxi\\?limit=20\\&offset=.+" + "$", 140);
map.put("^" + Config.HOST + "v1d50/news/zixun\\?limit=10\\&offset=.+" + "$", 145);
map.put("^" + Config.HOST + "v1d50/news/yuanchuang\\?limit=10\\&offset=.+" + "$", 150);
map.put("^" + Config.HOST + "v2d0/game/.+/digest" + "$", 155);
map.put("^" + Config.HOST + "v2d0/game/.+/detail" + "$", 160);
map.put("^" + Config.HOST + "v2d0/game/.+/news_digest" + "$", 165);
map.put("^" + Config.HOST + "v2d0/zixun/guanzhu\\?key=.+\\&limit=10\\&offset=.+" + "$", 170);
map.put("^" + Config.HOST + "v2d0/zixun/guanzhu\\?game_id=.+\\&limit=10\\&offset=.+" + "$", 175);
map.put("^" + Config.HOST + "v2d0/device/.+/concern" + "$", 180);
map.put("^" + Config.HOST + "v2d0/device/.+/concern/.+" + "$", 185);
if (intervalMap == null) {
initIntervalMap();
}
long base = BASE;
for (String key : map.keySet()){
for (String key : intervalMap.keySet()){
if (Pattern.matches(key, url)) {
Utils.log("url add base = " + url);
base += map.get(key);
base += intervalMap.get(key);
break;
}
}
@ -70,10 +36,96 @@ public class TimestampUtils {
return (long) (Math.ceil((now - base) / cd) * cd + base);
}
private static void initCDMap() {
cdMap = new ArrayMap<>();
cdMap.put("^" + Config.HOST + "v1d50/index/slides" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v1d50/game/chajian" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v1d50/game/tuijian" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v2d0/game/.+/detail" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v2d0/game/.+/digest" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v1d45/game/remenkapai" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v2d0/game/.+/news_digest" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v1d50/game/column/.+\\?page=.+" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v1d45/support/package/.+/game/digest" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v1d50/game/danjiyouxi\\?limit=20\\&offset=.+" + "$", Constants.GAME_CD);
cdMap.put("^" + Config.HOST + "v1d45/news/.+/digest" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d45/news/.+/detail" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d45/news/.+/suggestion" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=3" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d50/news/zixun\\?limit=10\\&offset=.+" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=20\\&offset=.+" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d50/news/yuanchuang\\?limit=10\\&offset=.+" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d45/news\\?type_group=.+\\&offset=.+\\&limit=20" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v2d0/zixun/guanzhu\\?key=.+\\&limit=10\\&offset=.+" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=20\\&offset=.+\\&type=.+" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v2d0/zixun/guanzhu\\?game_id=.+\\&limit=10\\&offset=.+" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d45/search/news\\?game_id=.+\\&keyword=.+\\&page=.+\\&limit=20" + "$", Constants.NEWS_CD);
cdMap.put("^" + Config.HOST + "v1d45/search/game\\?keyword=.+" + "$", Constants.SEARCH_CD);
cdMap.put("^" + Config.HOST + "v1d45/support/setting/platform" + "$", Constants.PLATFORM_CD);
cdMap.put("^" + Config.HOST + "v1d45/support/package/update\\?package=.+" + "$", Constants.UPDATE_CD);
cdMap.put("^" + Config.HOST + "v2d0/device/.+/concern" + "$", 0);
cdMap.put("^" + Config.HOST + "v2d0/device/.+/concern/.+" + "$", 0);
cdMap.put("^" + Config.HOST + "v2/stat/download" + "$", 0);
cdMap.put("^" + Config.HOST + "v2/disclaimer" + "$", 0);
cdMap.put("^" + Config.HOST + "v1d45/search/game/default" + "$", 0);
cdMap.put("^" + Config.HOST + "v2d0/support/upgrade\\?version=.+\\&channel=.+" + "$", 0);
cdMap.put("^" + Config.HOST + "v2d0/support/time/current" + "$", 0);
cdMap.put("^" + Config.HOST + "v1d45/support/setting/ui" + "$", 0);
cdMap.put("^" + Config.HOST + "v2d0/support/download_status\\?version=.+\\&channel=.+" + "$", 0);
cdMap.put("^" + Config.HOST + "v1d46/support/suggestion" + "$", 0);
cdMap.put("^" + Config.HOST + "v2/game/.+/serverInfo" + "$", 0);
cdMap.put("^" + Config.HOST + "v1d45/support/package/unused\\?skip=.+" + "$", 0);
}
private static void initIntervalMap() {
intervalMap = new ArrayMap<>();
intervalMap.put("^" + Config.HOST + "v1d50/index/slides" + "$", 5);
intervalMap.put("^" + Config.HOST + "v1d50/game/chajian" + "$", 10);
intervalMap.put("^" + Config.HOST + "v1d50/game/tuijian" + "$", 15);
intervalMap.put("^" + Config.HOST + "v2d0/game/.+/detail" + "$", 20);
intervalMap.put("^" + Config.HOST + "v2d0/game/.+/digest" + "$", 25);
intervalMap.put("^" + Config.HOST + "v1d45/game/remenkapai" + "$", 30);
intervalMap.put("^" + Config.HOST + "v2d0/game/.+/news_digest" + "$", 35);
intervalMap.put("^" + Config.HOST + "v1d50/game/column/.+\\?page=.+" + "$", 40);
intervalMap.put("^" + Config.HOST + "v1d45/support/package/.+/game/digest" + "$", 45);
intervalMap.put("^" + Config.HOST + "v1d50/game/danjiyouxi\\?limit=20\\&offset=.+" + "$", 50);
intervalMap.put("^" + Config.HOST + "v1d45/news/.+/digest" + "$", 55);
intervalMap.put("^" + Config.HOST + "v1d45/news/.+/detail" + "$", 60);
intervalMap.put("^" + Config.HOST + "v1d45/news/.+/suggestion" + "$", 65);
intervalMap.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=3" + "$", 70);
intervalMap.put("^" + Config.HOST + "v1d50/news/zixun\\?limit=10\\&offset=.+" + "$", 75);
intervalMap.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=20\\&offset=.+" + "$", 80);
intervalMap.put("^" + Config.HOST + "v1d50/news/yuanchuang\\?limit=10\\&offset=.+" + "$", 85);
intervalMap.put("^" + Config.HOST + "v1d45/news\\?type_group=.+\\&offset=.+\\&limit=20" + "$", 90);
intervalMap.put("^" + Config.HOST + "v2d0/zixun/guanzhu\\?key=.+\\&limit=10\\&offset=.+" + "$", 95);
intervalMap.put("^" + Config.HOST + "v1d45/game/.+/news\\?limit=20\\&offset=.+\\&type=.+" + "$", 100);
intervalMap.put("^" + Config.HOST + "v2d0/zixun/guanzhu\\?game_id=.+\\&limit=10\\&offset=.+" + "$", 105);
intervalMap.put("^" + Config.HOST + "v1d45/search/news\\?game_id=.+\\&keyword=.+\\&page=.+\\&limit=20" + "$", 110);
intervalMap.put("^" + Config.HOST + "v1d45/search/game\\?keyword=.+" + "$", 115);
intervalMap.put("^" + Config.HOST + "v1d45/support/setting/platform" + "$", 120);
intervalMap.put("^" + Config.HOST + "v1d45/support/package/update\\?package=.+" + "$", 125);
}
/*
* 为url添加timestamp
*/
public static String addTimestamp(String url, int cd) {
public static String addTimestamp(String url) {
if (TextUtils.isEmpty(url)) {
return url;
}
if (cdMap == null) {
initCDMap();
}
int cd = 0;
for (String key : cdMap.keySet()){
if (Pattern.matches(key, url)) {
cd = cdMap.get(key);
break;
}
}
if (cd == 0) {
return url;
}
if (url.contains("?")) {
String u = url + "&timestamp=" + getTimestamp(url, cd);
Utils.log("url = " + u);
@ -84,7 +136,7 @@ public class TimestampUtils {
return u;
}
}
/*
* 去除url中的timestamp
*/