当前位置:   article > 正文

java实现每日给女友微信发送早安等微信信息_java对接抖音私信

java对接抖音私信

前言

据说这个功能最近在抖音上很火,我没有抖音,没有看到。 但是我在掘金和CSDN上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳。

其实我原来的初衷是这样的,每天定时给群里推送新闻,这个原因在之前的文章中也提到过,这边就不在细说了,然后实现了给群中推送之后,就想着,能不能每天给指定人发送消息,网上搜了搜,果然有,各种实现方式五花八门,但是都没看上,于是就自己找了个,自己写。

网上案例

网上最多的可能就是利用微信服务号给推送信息,如图所示:

缺点如下:

  • 需要点进去订阅号才能看到,没哟起到吸引的作用
  • 申请的测试服务号,也不知道多久过期,说停就给你停掉了
  • 定制化的需求有的达不到

介于此,我就自己找了一个路子去做,昨晚刚写完,测了测,效果还是比较不错的。如下图所示:

(有点肉麻~)

实现方式

下面我们来看看是如何实现的。

准备工作

  1. 注册智能微秘书账号,花20块钱开个会员(20块钱一点都不多)
  2. 注册天行数据的账号,申请三个接口(早安寄语、每日新闻、土味情话),也可以自己加入别的有意义的内容,直接申请接口就行。
  3. 准备一个微信号,可以用你现在自己的,也可以在申请一个。
  4. 准备一个服务器
  5. 准备一个java项目,放服务器上跑就可以

假使你的准备工作除4、5之外,都已经做完了,下面我们来看看如何从代码层面来实现。

实现原理

  • 调用天行数据的api,获取自己想要的数据,封装起来
  • 调用只能微秘书的接口,实现给微信好友发送消息
  • 给控制器controller类中添加定时任务,实现定时发送

关键代码如下所示:

  1. 调用天行数据接口,获取早安寄语:
  1. /**
  2. * 获取每日早安寄语
  3. *
  4. */
  5. public static String getGoodMorning() {
  6. String path = "zaoan/index";
  7. //调用每日简报的接口
  8. String body = HttpUtil
  9. .createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY)
  10. .execute()
  11. .body();
  12. JSONObject jsonObjectResult = JSON.parseObject(body);
  13. Integer code = jsonObjectResult.getInteger("code");
  14. if (code != 200) {
  15. log.error("请求每日新闻的接口出错,出错信息:" + body);
  16. return "一切都是最好的安排~";
  17. }
  18. log.info("请求每日新闻的接口成功:" + body);
  19. JSONObject resultObject = jsonObjectResult.getJSONObject("result");
  20. return resultObject.getString("content");
  21. }
  22. 复制代码
  1. 调用天行数据接口,获取土味情话:
  1. /**
  2. * 获取每日土味情话
  3. *
  4. */
  5. public static String getLoveWords(){
  6. String path = "saylove/index";
  7. //调用每日简报的接口
  8. String body = HttpUtil
  9. .createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY)
  10. .execute()
  11. .body();
  12. JSONObject jsonObjectResult = JSON.parseObject(body);
  13. Integer code = jsonObjectResult.getInteger("code");
  14. if(code!=200){
  15. log.error("请求每日新闻的接口出错,出错信息:"+body);
  16. return "一切都是最好的安排~";
  17. }
  18. JSONObject resultObject = jsonObjectResult.getJSONObject("result");
  19. log.info("请求每日新闻的接口成功:"+resultObject);
  20. return resultObject.getString("content");
  21. }
  22. 复制代码
  1. 调用天行数据接口,获取天气预报:
  1. /**
  2. * 获取天气预报
  3. *
  4. */
  5. public static JSONObject getWeather(){
  6. String path = "tianqi/index";
  7. //调用每日简报的接口
  8. String body = HttpUtil
  9. .createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY+"&type=1&city=370100")
  10. .execute()
  11. .body();
  12. JSONObject jsonObjectResult = JSON.parseObject(body);
  13. Integer code = jsonObjectResult.getInteger("code");
  14. if(code!=200){
  15. log.error("请求每日新闻的接口出错,出错信息:"+body);
  16. return null;
  17. }
  18. return jsonObjectResult.getJSONObject("result");
  19. /*
  20. * {
  21. "code": 200,
  22. "msg": "success",
  23. "result": {
  24. "date": "2022-12-19",
  25. "week": "星期一",
  26. "province": "上海",
  27. "area": "上海",
  28. "areaid": "101020100",
  29. "weather": "晴",
  30. "weatherimg": "qing.png",
  31. "weathercode": "qing",
  32. "real": "3℃",
  33. "lowest": "2℃",
  34. "highest": "9℃",
  35. "wind": "北风",
  36. "windspeed": "0",
  37. "windsc": "0级",
  38. "sunrise": "06:47",
  39. "sunset": "16:54",
  40. "moonrise": "",
  41. "moondown": "",
  42. "pcpn": "0",
  43. "uv_index": "0",
  44. "aqi": "54",
  45. "quality": "良",
  46. "vis": "18",
  47. "humidity": "48",
  48. "alarmlist": [
  49. ],
  50. "tips": "晴天紫外线等级较高,外出注意补水防晒。天气凉,适宜着一到两件羊毛衫、大衣、毛套装、皮夹克等春秋着装;年老体弱者宜着风衣加羊毛衫等厚型春秋着装。空气质量较好,可以参与各类户外活动。疫情防控不松懈,出门请佩戴口罩。"
  51. }
  52. }
  53. * */
  54. }
  55. 复制代码

日期处理关键代码

  1. 获取今天是周几
  1. /**
  2. * 获取汉字的今天周几
  3. * @param dateTime
  4. * @return
  5. * @throws ParseException
  6. */
  7. public static String getDaysByWeekChina(String dateTime) throws ParseException {
  8. Calendar cal = Calendar.getInstance();
  9. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  10. Date date = dateFormat.parse(dateTime);
  11. cal.setTime(date);
  12. int day = cal.get(Calendar.DAY_OF_WEEK);
  13. day = day - 1;
  14. //周的汉字
  15. String week = "";
  16. switch (day) {
  17. case 0:
  18. week = "日";
  19. break;
  20. case 1:
  21. week = "一";
  22. break;
  23. case 2:
  24. week = "二";
  25. break;
  26. case 3:
  27. week = "三";
  28. break;
  29. case 4:
  30. week = "四";
  31. break;
  32. case 5:
  33. week = "五";
  34. break;
  35. case 6:
  36. week = "六";
  37. break;
  38. }
  39. return week;
  40. }
  41. 复制代码
  1. 获取纪念日的天数(两个日期之间的差):
  1. /**
  2. * 得到二个日期间的间隔天数
  3. *
  4. * @param date1
  5. * @param date2
  6. * @return
  7. */
  8. public static int getDayByTwoDay(String date1, String date2) {
  9. SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
  10. Long day = 0L;
  11. try {
  12. java.util.Date date = myFormatter.parse(date1);
  13. java.util.Date mydate = myFormatter.parse(date2);
  14. day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
  15. } catch (Exception e) {
  16. return 0;
  17. }
  18. return day.intValue();
  19. }
  20. 复制代码

实现给指定微信好友推送消息

  1. /**
  2. * 每天将指定信息推送到微信个人
  3. */
  4. @Override
  5. public void sendWechatToUser() {
  6. String url = WEI_MI_SHU_API + "/openapi/v1/chat/contact";
  7. WeiZhiMiShuVO weiZhiMiShuVO = new WeiZhiMiShuVO();
  8. //发送文字信息
  9. weiZhiMiShuVO.setType(1);
  10. try {
  11. //拿到发送的消息列表
  12. SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
  13. SimpleDateFormat format_h = new SimpleDateFormat("yyyy-MM-dd");
  14. //今天的日期
  15. String toDate = format_h.format(new Date());
  16. //相恋的日期
  17. String lian = "2022-03-28";
  18. //两个日期相差的天数
  19. int cha = DateUtils.getDayByTwoDay(toDate, lian);
  20. String todayDate = format.format(new Date());
  21. //根据阳历计算农历
  22. Calendar today = Calendar.getInstance();
  23. String week = DateUtils.getDaysByWeekChina(toDate);
  24. today.setTime(DateUtils.chineseDateFormat.parse(todayDate));
  25. DateUtils lunar = new DateUtils(today);
  26. String nongli = lunar.toString();
  27. nongli = nongli.substring(nongli.indexOf("年") + 1);
  28. StringBuilder sb = new StringBuilder();
  29. sb.append("亲爱的老婆~早\n\n")
  30. .append("充满希望的一天又开始了,今天也要一直开心,不能生我气气~")
  31. .append("\n\n今天是:")
  32. .append(todayDate)
  33. .append(",星期")
  34. .append(week)
  35. .append(",农历")
  36. .append(nongli)
  37. .append("\n")
  38. .append("是我们相爱的第:")
  39. .append(cha)
  40. .append("天")
  41. .append("\n\n")
  42. ;
  43. JSONObject tianqiObject = TianXingApiUtil.getWeather();
  44. sb.append("目前济南天气:")
  45. .append(tianqiObject.getString("weather"))
  46. .append("\n")
  47. .append("当前气温:")
  48. .append(tianqiObject.getString("real"))
  49. .append("\n")
  50. .append("今天最高温度:")
  51. .append(tianqiObject.getString("highest"))
  52. .append("\n")
  53. .append("最低温度:")
  54. .append(tianqiObject.getString("lowest"))
  55. .append("\n")
  56. .append("风向:")
  57. .append(tianqiObject.getString("wind"))
  58. .append("\n")
  59. .append("空气质量:")
  60. .append(tianqiObject.getString("quality"))
  61. .append("\n")
  62. .append("空气质量指数:")
  63. .append(tianqiObject.getString("aqi"))
  64. .append("\n")
  65. .append("小提示:")
  66. .append(tianqiObject.getString("tips"));
  67. //土味情话
  68. sb.append("\n\n")
  69. .append("爱你一日言:")
  70. .append(TianXingApiUtil.getLoveWords())
  71. .append("\n\n【早安寄语】")
  72. .append(goodMorning());
  73. weiZhiMiShuVO.setContent(sb.toString());
  74. for (String str : SEND_USER) {
  75. JSONObject object = new JSONObject();
  76. object.put("apiKey", WEI_MI_SHU_KEY);
  77. //好友昵称
  78. object.put("name", str);
  79. //好友备注
  80. object.put("alias", str);
  81. object.put("message", weiZhiMiShuVO);
  82. String body = HttpUtil.createPost(url)
  83. .body(JSON.toJSONString(object))
  84. .execute()
  85. .body();
  86. System.out.println("传递的参数是:" + JSON.toJSONString(object));
  87. System.out.println("发送成功了吗?" + body);
  88. }
  89. } catch (ParseException e) {
  90. e.printStackTrace();
  91. }
  92. }
  93. 复制代码

说明:

  1. WeiZhiMiShuVO 类可以参考文章:java实现给微信群中定时推送消息
  2. 代码中涉及到的常量,都放在了常量类中,SEND_USER是要发给微信好友的好友昵称,不是备注哈。
  3. 智能微秘书接口地址:接口地址

然后我们在控制器controller中调用该方法即可实现:

  1. /**
  2. * 发送消息给指定的人
  3. */
  4. @GetMapping(value = "/sendWechatToUser")
  5. @Scheduled(cron ="0 0 8 * * ?")
  6. public void sendWechatToUser(){
  7. articleService.sendWechatToUser();
  8. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/178556
推荐阅读
相关标签
  

闽ICP备14008679号