import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 各大銀行的應(yīng)用寶下載地址
* @author wishurhere
* @date 2020/5/19
*/
public class BankUrlHandle {
/**
* 中文正則
*/
static Pattern chinese_pattern = Pattern.compile("[\u3007\u4E00-\u9FCB\uE815-\uE864]");
/**
* 根據(jù)關(guān)鍵字查詢應(yīng)用寶app
*/
static String APP_SEARCH_URL = "https://sj.qq.com/myapp/searchAjax.htm?kw=%s&sid=";
/**
* app在應(yīng)用寶下載鏈接
*/
static String APP_DOWNLOAD_URL = "https://sj.qq.com/myapp/detail.htm?apkName=%s";
public static void main(String[] args) {
ArrayList<String> banks = Lists.newArrayList("中國工商銀行",
"中國農(nóng)業(yè)銀行", "中國銀行", "中國建設(shè)銀行", "中國光大銀行", "江蘇省農(nóng)村信用社聯(lián)合");
for (String bank : banks) {
doQuery(bank);
}
}
private static void doQuery(String bankName) {
if (StringUtils.isEmpty(bankName)) {
return;
}
System.out.println("========================= " + bankName + "=========================");
RestTemplate restTemplate = new RestTemplate();
// 根據(jù)關(guān)鍵詞模糊查詢應(yīng)用寶應(yīng)用
String url = String.format(APP_SEARCH_URL, bankName);
String result = restTemplate.getForObject(url, String.class);
AppStore object = JSONObject.parseObject(result, AppStore.class);
if (object == null || object.getObj() == null
|| CollectionUtils.isEmpty(object.getObj().getItems())) {
return;
}
List<String> exceptChinese = Lists.newArrayList("銀", "行");
List<String> exceptWords = Lists.newArrayList("貸款", "直銷");
List<String> keywords = Lists.newArrayList("銀行", "信用社", "農(nóng)信");
// 將中文分割
List<String> stringList = splitChinese(bankName);
object.getObj().getItems()
.stream()
.filter(o -> (keywords.stream().anyMatch(s -> o.getAppDetail().getAppName().contains(s))
|| o.getAppDetail().getDescription().contains("信用社"))
// 官方版標簽
// && o.getAppDetail().getFlag().equals("16469"))
// && (o.getAppDetail().getDescription().contains("手機銀行")
// || o.getAppDetail().getDescription().contains(bankName))
&& exceptWords.stream().noneMatch(s -> o.getAppDetail().getAppName().contains(s)))
.peek(o -> {
if (o.getAppDetail().getAppName().equals(bankName)) {
o.setCount(bankName.length());
} else {
// 應(yīng)用名中相同漢字出現(xiàn)次數(shù)
int appNameCount = 0;
Matcher matcher = chinese_pattern.matcher(o.getAppDetail().getAppName());
while (matcher.find() && stringList.contains(matcher.group())) {
if (!exceptChinese.contains(matcher.group())) {
appNameCount = appNameCount + 1;
}
}
// 應(yīng)用開發(fā)者中相同漢字出現(xiàn)次數(shù)
int authorNameCount = 0;
Matcher matcher1 = chinese_pattern.matcher(o.getAppDetail().getAuthorName());
while (matcher1.find() && stringList.contains(matcher1.group())) {
if (!exceptChinese.contains(matcher1.group())) {
authorNameCount = authorNameCount + 1;
}
}
int match = Math.max(authorNameCount, appNameCount);
System.out.println(String.format("查詢銀行:%s, 搜索app:%s, 匹配度:%s",
bankName, o.getAppDetail().getAppName(), match));
// 匹配漢字需要超過一半關(guān)鍵詞才認定是有效的
if (match >= bankName.length() / 2) {
o.setCount(match);
}
}
}).filter(o -> o.getCount() != null)
// 選出匹配度最高的
.max(Comparator.comparing(AppStore.ObjBean.ItemsBean::getCount))
.ifPresent(o -> {
String pkgName = o.getPkgName();
// 包商村鎮(zhèn)銀行特殊處理
if (bankName.contains("包商村") && pkgName.equals("cn.com.bsb.mbank")) {
pkgName = "com.yitong.mbank.bsczb";
} else if (bankName.equals("齊魯銀行")) {
pkgName = "com.iss.qilubank";
}
String pkgUrl = String.format(APP_DOWNLOAD_URL, pkgName);
System.out.println(bankName + ",下載地址:" + pkgUrl);
});
}
/**
* 分割中文
* @param str
* @return
*/
public static List<String> splitChinese(String str) {
List<String> sb = new ArrayList<>();
// 只匹配一個中文字符
Matcher matcher = chinese_pattern.matcher(str);
while (matcher.find()) {
sb.add(matcher.group());
}
return sb;
}
@Data
public static class AppStore {
/**
* total : null
* count : null
* obj : {"items":[{"type":2,"pkgName":"com.icbc","appDetail":{"appName":"中國工商銀行","authorName":"中國工商銀行股份有限公司","pkgName":"com.icbc"}}]}
*/
private Object total;
private Object count;
private ObjBean obj;
@Data
public static class ObjBean {
private List<ItemsBean> items;
@Data
public static class ItemsBean {
private int type;
private String pkgName;
/**
* 應(yīng)用匹配度
*/
private Integer count;
private AppDetailBean appDetail;
@NoArgsConstructor
@Data
public static class AppDetailBean {
private String appName;
private String authorName;
private String pkgName;
private String flag;
private String categoryName;
private String description;
}
}
}
}
}
各大銀行的應(yīng)用寶商店下載地址收集
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。