import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class customRobotGroupMessage {
public static void main(String[] args) {
timer1();
}
public static void timer1() {
new Thread(customRobotGroupMessage::run).start();
}
public static void todoDingTalk(String msg) {
try {
String CUSTOM_ROBOT_TOKEN = "9775137c4a4834b50c18e19eac1062b24e8343f6f33b250c810f7d04a664c6c4";
// pengerlee(员工UserID:25002054131245486225)
String USER_ID= "25002054131245486225";
// RobtPenger 加签
String SECRET = "SECf37a0d97bf46d3b4e837cf4dc860205b42cb1c7f84c8fd71cbf15525d7d4bb68";
Long timestamp = System.currentTimeMillis();
// System.out.println(timestamp);
String secret = SECRET;
String stringToSign = timestamp + "\n" + secret;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
// System.out.println(sign);
//sign字段和timestamp字段必须拼接到请求URL上,否则会出现 310000 的错误信息
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?sign="+sign+"×tamp="+timestamp);
//https://oapi.dingtalk.com/robot/send?access_token=9775137c4a4834b50c18e19eac1062b24e8343f6f33b250c810f7d04a664c6c4
OapiRobotSendRequest req = new OapiRobotSendRequest();
/**
* 发送文本消息
*/
//定义文本内容
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
text.setContent("【提示】"+msg);
//定义 @ 对象
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtUserIds(Arrays.asList(USER_ID));
//设置消息类型
req.setMsgtype("text");
req.setText(text);
req.setAt(at);
OapiRobotSendResponse rsp = client.execute(req, CUSTOM_ROBOT_TOKEN);
System.out.println("推送钉钉"+rsp.getBody());
} catch (ApiException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
}
}
private static void run() {
while (true) {
String msg=sendPost();
JSONObject jsonObject = (JSONObject)JSONArray.parseObject(msg).get("data");
List<Map<String,Object>> goodsList = (ArrayList)JSONObject.parseArray(((JSONArray)jsonObject.get("goodsList")).toJSONString(),Map.class);
List<Map<String,Object>> weixin=goodsList.stream()
.filter(map ->
"信用卡微信立减金券包".equals(map.getOrDefault("name", ""))
&&"2"== map.getOrDefault("stockStatus", "")
).collect(Collectors.toList());
// name : "信用卡微信立减金券包" soldOutPrompt : "已售罄" stock : 0 stockStatus : "2"
String massage="当前时间 {}" + LocalDateTime.now()+"爬取到数量为="+weixin.size();
System.out.println(massage);
if(weixin.size()>0){
System.out.println("推送钉钉");
todoDingTalk("建行一元购信用卡微信立减金");
}
try {
// 每隔1秒执行一次
Thread.sleep(1000*60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 向指定 URL 发送POST方法的请求
*
// * @param url
* 发送请求的 URL
// * @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost() {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL("https://vtravel.link2shops.com/vfuliApi/api/client/ypJyActivity/goodsList");
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
conn.setRequestProperty("Cookie", "SERVERID=7c05c1a928bcd7aded86917659ae2132|1709264981|1709264910; acw_tc=ac11000117092649106843276e3cdad8ac15a176cb64a9e6ed8197acb100c6; aliyungf_tc=417adfbcaa62a483719547ebc33f487b1e18c1d4dc28ce146638f024b8dad3dd");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print("{\"activityTag\":\"ccbyyg\",\"catagoryId\":\"\"}");
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
// System.out.println(line);
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
}