[Change] BotGlobal, BotCommandProcess 将'Gson'和'PixivDownload'对象纳入BotGlobal;

This commit is contained in:
LamGC 2020-06-04 19:47:20 +08:00
parent 273dbd45b0
commit feb51b8534
2 changed files with 40 additions and 21 deletions

View File

@ -36,15 +36,9 @@ import java.util.concurrent.atomic.AtomicInteger;
@SuppressWarnings({"SynchronizationOnLocalVariableOrMethodParameter", "SameParameterValue"}) @SuppressWarnings({"SynchronizationOnLocalVariableOrMethodParameter", "SameParameterValue"})
public class BotCommandProcess { public class BotCommandProcess {
private final static PixivDownload pixivDownload =
new PixivDownload(BotGlobal.getGlobal().getCookieStore(), BotGlobal.getGlobal().getProxy());
private final static Logger log = LoggerFactory.getLogger(BotCommandProcess.class); private final static Logger log = LoggerFactory.getLogger(BotCommandProcess.class);
private final static File imageStoreDir = new File(BotGlobal.getGlobal().getDataStoreDir(), "data/image/cgj/"); private final static File imageStoreDir = new File(BotGlobal.getGlobal().getDataStoreDir(), "data/image/cgj/");
private final static Gson gson = new GsonBuilder()
.serializeNulls()
.create();
/* -------------------- 缓存 -------------------- */ /* -------------------- 缓存 -------------------- */
@ -54,26 +48,30 @@ public class BotCommandProcess {
* 作品信息缓存 - 不过期 * 作品信息缓存 - 不过期
*/ */
private final static CacheStore<JsonElement> illustInfoCache = private final static CacheStore<JsonElement> illustInfoCache =
new JsonRedisCacheStore(BotGlobal.getGlobal().getRedisServer(), "illustInfo", gson); new JsonRedisCacheStore(BotGlobal.getGlobal().getRedisServer(),
"illustInfo", BotGlobal.getGlobal().getGson());
/** /**
* 作品信息预加载数据 - 有效期 2 小时, 本地缓存有效期1 ± 0.25 * 作品信息预加载数据 - 有效期 2 小时, 本地缓存有效期1 ± 0.25
*/ */
private final static CacheStore<JsonElement> illustPreLoadDataCache = private final static CacheStore<JsonElement> illustPreLoadDataCache =
CacheStoreUtils.hashLocalHotDataStore( CacheStoreUtils.hashLocalHotDataStore(
new JsonRedisCacheStore(BotGlobal.getGlobal().getRedisServer(), "illustPreLoadData", gson), new JsonRedisCacheStore(BotGlobal.getGlobal().getRedisServer(),
"illustPreLoadData", BotGlobal.getGlobal().getGson()),
3600000, 900000); 3600000, 900000);
/** /**
* 搜索内容缓存, 有效期 2 小时 * 搜索内容缓存, 有效期 2 小时
*/ */
private final static CacheStore<JsonElement> searchBodyCache = private final static CacheStore<JsonElement> searchBodyCache =
new JsonRedisCacheStore(BotGlobal.getGlobal().getRedisServer(), "searchBody", gson); new JsonRedisCacheStore(BotGlobal.getGlobal().getRedisServer(),
"searchBody", BotGlobal.getGlobal().getGson());
/** /**
* 排行榜缓存, 不过期 * 排行榜缓存, 不过期
*/ */
private final static CacheStore<List<JsonObject>> rankingCache = private final static CacheStore<List<JsonObject>> rankingCache =
new JsonObjectRedisListCacheStore(BotGlobal.getGlobal().getRedisServer(), "ranking", gson); new JsonObjectRedisListCacheStore(BotGlobal.getGlobal().getRedisServer(),
"ranking", BotGlobal.getGlobal().getGson());
/** /**
* 作品页面下载链接缓存 - 不过期 * 作品页面下载链接缓存 - 不过期
@ -85,7 +83,8 @@ public class BotCommandProcess {
* 作品报告存储 - 不过期 * 作品报告存储 - 不过期
*/ */
public final static CacheStore<JsonElement> reportStore = public final static CacheStore<JsonElement> reportStore =
new JsonRedisCacheStore(BotGlobal.getGlobal().getRedisServer(), "report", gson); new JsonRedisCacheStore(BotGlobal.getGlobal().getRedisServer(),
"report", BotGlobal.getGlobal().getGson());
private final static RankingUpdateTimer updateTimer = new RankingUpdateTimer(); private final static RankingUpdateTimer updateTimer = new RankingUpdateTimer();
@ -380,12 +379,12 @@ public class BotCommandProcess {
if (!searchBodyCache.exists(requestUrl)) { if (!searchBodyCache.exists(requestUrl)) {
log.debug("searchBody缓存失效, 正在更新..."); log.debug("searchBody缓存失效, 正在更新...");
JsonObject jsonObject; JsonObject jsonObject;
HttpGet httpGetRequest = pixivDownload.createHttpGetRequest(requestUrl); HttpGet httpGetRequest = BotGlobal.getGlobal().getPixivDownload().createHttpGetRequest(requestUrl);
HttpResponse response = pixivDownload.getHttpClient().execute(httpGetRequest); HttpResponse response = BotGlobal.getGlobal().getPixivDownload().getHttpClient().execute(httpGetRequest);
String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
log.debug("ResponseBody: {}", responseBody); log.debug("ResponseBody: {}", responseBody);
jsonObject = gson.fromJson(responseBody, JsonObject.class); jsonObject = BotGlobal.getGlobal().getGson().fromJson(responseBody, JsonObject.class);
if (jsonObject.get("error").getAsBoolean()) { if (jsonObject.get("error").getAsBoolean()) {
log.error("接口请求错误, 错误信息: {}", jsonObject.get("message").getAsString()); log.error("接口请求错误, 错误信息: {}", jsonObject.get("message").getAsString());
@ -511,7 +510,7 @@ public class BotCommandProcess {
log.warn("来源群 {} 查询的作品Id {} 为R18作品, 根据配置设定, 屏蔽该作品.", fromGroup, illustId); log.warn("来源群 {} 查询的作品Id {} 为R18作品, 根据配置设定, 屏蔽该作品.", fromGroup, illustId);
return "该作品已被封印!"; return "该作品已被封印!";
} }
List<String> pagesList = PixivDownload.getIllustAllPageDownload(pixivDownload.getHttpClient(), pixivDownload.getCookieStore(), illustId, quality); List<String> pagesList = PixivDownload.getIllustAllPageDownload(BotGlobal.getGlobal().getPixivDownload().getHttpClient(), BotGlobal.getGlobal().getPixivDownload().getCookieStore(), illustId, quality);
StringBuilder builder = new StringBuilder("作品ID ").append(illustId).append(" 共有").append(pagesList.size()).append("页:").append("\n"); StringBuilder builder = new StringBuilder("作品ID ").append(illustId).append(" 共有").append(pagesList.size()).append("页:").append("\n");
int index = 0; int index = 0;
for (String link : pagesList) { for (String link : pagesList) {
@ -606,7 +605,7 @@ public class BotCommandProcess {
headRequest.addHeader("Referer", PixivURL.getPixivRefererLink(illustId)); headRequest.addHeader("Referer", PixivURL.getPixivRefererLink(illustId));
HttpResponse headResponse; HttpResponse headResponse;
try { try {
headResponse = pixivDownload.getHttpClient().execute(headRequest); headResponse = BotGlobal.getGlobal().getPixivDownload().getHttpClient().execute(headRequest);
} catch (IOException e) { } catch (IOException e) {
log.error("获取图片大小失败!", e); log.error("获取图片大小失败!", e);
return "图片获取失败!"; return "图片获取失败!";
@ -736,7 +735,7 @@ public class BotCommandProcess {
if (!illustInfoCache.exists(illustIdStr) || flushCache) { if (!illustInfoCache.exists(illustIdStr) || flushCache) {
synchronized (illustIdStr) { synchronized (illustIdStr) {
if (!illustInfoCache.exists(illustIdStr) || flushCache) { if (!illustInfoCache.exists(illustIdStr) || flushCache) {
illustInfoObj = pixivDownload.getIllustInfoByIllustId(illustId); illustInfoObj = BotGlobal.getGlobal().getPixivDownload().getIllustInfoByIllustId(illustId);
illustInfoCache.update(illustIdStr, illustInfoObj, null); illustInfoCache.update(illustIdStr, illustInfoObj, null);
} }
} }
@ -764,7 +763,7 @@ public class BotCommandProcess {
synchronized (illustIdStr) { synchronized (illustIdStr) {
if (!illustPreLoadDataCache.exists(illustIdStr) || flushCache) { if (!illustPreLoadDataCache.exists(illustIdStr) || flushCache) {
log.debug("IllustId {} 缓存失效, 正在更新...", illustId); log.debug("IllustId {} 缓存失效, 正在更新...", illustId);
JsonObject preLoadDataObj = pixivDownload.getIllustPreLoadDataById(illustId) JsonObject preLoadDataObj = BotGlobal.getGlobal().getPixivDownload().getIllustPreLoadDataById(illustId)
.getAsJsonObject("illust") .getAsJsonObject("illust")
.getAsJsonObject(Integer.toString(illustId)); .getAsJsonObject(Integer.toString(illustId));
@ -798,7 +797,7 @@ public class BotCommandProcess {
if (!pagesCache.exists(pagesSign) || flushCache) { if (!pagesCache.exists(pagesSign) || flushCache) {
synchronized (pagesSign) { synchronized (pagesSign) {
if (!pagesCache.exists(pagesSign) || flushCache) { if (!pagesCache.exists(pagesSign) || flushCache) {
List<String> linkList = PixivDownload.getIllustAllPageDownload(pixivDownload.getHttpClient(), pixivDownload.getCookieStore(), illustId, quality); List<String> linkList = PixivDownload.getIllustAllPageDownload(BotGlobal.getGlobal().getPixivDownload().getHttpClient(), BotGlobal.getGlobal().getPixivDownload().getCookieStore(), illustId, quality);
result = linkList; result = linkList;
pagesCache.update(pagesSign, linkList, null); pagesCache.update(pagesSign, linkList, null);
} }
@ -861,7 +860,7 @@ public class BotCommandProcess {
synchronized(requestSign) { synchronized(requestSign) {
if(!rankingCache.exists(requestSign) || flushCache) { if(!rankingCache.exists(requestSign) || flushCache) {
log.debug("Ranking缓存失效, 正在更新...(RequestSign: {})", requestSign); log.debug("Ranking缓存失效, 正在更新...(RequestSign: {})", requestSign);
List<JsonObject> rankingResult = pixivDownload.getRanking(contentType, mode, queryDate, 1, 500); List<JsonObject> rankingResult = BotGlobal.getGlobal().getPixivDownload().getRanking(contentType, mode, queryDate, 1, 500);
long expireTime = 0; long expireTime = 0;
if(rankingResult.size() == 0) { if(rankingResult.size() == 0) {
expireTime = 5400000 + expireTimeFloatRandom.nextInt(1800000); expireTime = 5400000 + expireTimeFloatRandom.nextInt(1800000);

View File

@ -1,6 +1,9 @@
package net.lamgc.cgj.bot.boot; package net.lamgc.cgj.bot.boot;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import net.lamgc.cgj.pixiv.PixivDownload;
import org.apache.http.HttpHost; import org.apache.http.HttpHost;
import org.apache.http.client.CookieStore; import org.apache.http.client.CookieStore;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -38,6 +41,12 @@ public final class BotGlobal {
private CookieStore cookieStore; private CookieStore cookieStore;
private final Gson gson = new GsonBuilder()
.serializeNulls()
.create();
private final PixivDownload pixivDownload;
private BotGlobal() { private BotGlobal() {
this.redisUri = URI.create("redis://" + System.getProperty("cgj.redisAddress")); this.redisUri = URI.create("redis://" + System.getProperty("cgj.redisAddress"));
this.redisServer = new JedisPool( this.redisServer = new JedisPool(
@ -59,6 +68,9 @@ public final class BotGlobal {
} }
} }
this.proxy = temp; this.proxy = temp;
this.pixivDownload =
new PixivDownload(BotGlobal.getGlobal().getCookieStore(), BotGlobal.getGlobal().getProxy());
} }
public URI getRedisUri() { public URI getRedisUri() {
@ -88,4 +100,12 @@ public final class BotGlobal {
public void setCookieStore(CookieStore cookieStore) { public void setCookieStore(CookieStore cookieStore) {
this.cookieStore = cookieStore; this.cookieStore = cookieStore;
} }
public Gson getGson() {
return gson;
}
public PixivDownload getPixivDownload() {
return pixivDownload;
}
} }