Java實(shí)現(xiàn)每日給女友微信發(fā)送早安信息
前言
據(jù)說這個(gè)功能最近在抖音上很火,我沒有抖音,沒有看到。
但是我在網(wǎng)上看了,相關(guān)案例確實(shí)很多,但是大家都是借助于了微信服務(wù)號(hào),在我看來,效果很不佳。
其實(shí)我原來的初衷是這樣的,每天定時(shí)給群里推送新聞,這個(gè)原因在之前的文章中也提到過,這邊就不在細(xì)說了,然后實(shí)現(xiàn)了給群中推送之后,就想著,能不能每天給指定人發(fā)送消息,網(wǎng)上搜了搜,果然有,各種實(shí)現(xiàn)方式五花八門,但是都沒看上,于是就自己找了個(gè),自己寫。
網(wǎng)上案例
網(wǎng)上最多的可能就是利用微信服務(wù)號(hào)給推送信息,如圖所示:
缺點(diǎn)如下:
- 需要點(diǎn)進(jìn)去訂閱號(hào)才能看到,沒喲起到吸引的作用
- 申請(qǐng)的測(cè)試服務(wù)號(hào),也不知道多久過期,說停就給你停掉了
- 定制化的需求有的達(dá)不到
介于此,我就自己找了一個(gè)路子去做,昨晚剛寫完,測(cè)了測(cè),效果還是比較不錯(cuò)的。如下圖所示:
(有點(diǎn)肉麻~)
實(shí)現(xiàn)方式
下面我們來看看是如何實(shí)現(xiàn)的。
準(zhǔn)備工作
1.注冊(cè)智能微秘書賬號(hào),花20塊錢開個(gè)會(huì)員(20塊錢一點(diǎn)都不多),注冊(cè)地址:這里
2.注冊(cè)天行數(shù)據(jù)的賬號(hào),申請(qǐng)三個(gè)接口(早安寄語、每日新聞、土味情話),也可以自己加入別的有意義的內(nèi)容,直接申請(qǐng)接口就行,注冊(cè)地址:這里
3.準(zhǔn)備一個(gè)微信號(hào),可以用你現(xiàn)在自己的,也可以在申請(qǐng)一個(gè)。
4.準(zhǔn)備一個(gè)服務(wù)器
5.準(zhǔn)備一個(gè)java項(xiàng)目,放服務(wù)器上跑就可以
假使你的準(zhǔn)備工作除4、5之外,都已經(jīng)做完了,下面我們來看看如何從代碼層面來實(shí)現(xiàn)。
實(shí)現(xiàn)原理
調(diào)用天行數(shù)據(jù)的api,獲取自己想要的數(shù)據(jù),封裝起來
調(diào)用只能微秘書的接口,實(shí)現(xiàn)給微信好友發(fā)送消息
給控制器controller類中添加定時(shí)任務(wù),實(shí)現(xiàn)定時(shí)發(fā)送
關(guān)鍵代碼如下所示:
1.調(diào)用天行數(shù)據(jù)接口,獲取早安寄語:
/** * 獲取每日早安寄語 * */ public static String getGoodMorning() { String path = "zaoan/index"; //調(diào)用每日簡(jiǎn)報(bào)的接口 String body = HttpUtil .createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY) .execute() .body(); JSONObject jsonObjectResult = JSON.parseObject(body); Integer code = jsonObjectResult.getInteger("code"); if (code != 200) { log.error("請(qǐng)求每日新聞的接口出錯(cuò),出錯(cuò)信息:" + body); return "一切都是最好的安排~"; } log.info("請(qǐng)求每日新聞的接口成功:" + body); JSONObject resultObject = jsonObjectResult.getJSONObject("result"); return resultObject.getString("content"); }
2.調(diào)用天行數(shù)據(jù)接口,獲取土味情話:
/** * 獲取每日土味情話 * */ public static String getLoveWords(){ String path = "saylove/index"; //調(diào)用每日簡(jiǎn)報(bào)的接口 String body = HttpUtil .createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY) .execute() .body(); JSONObject jsonObjectResult = JSON.parseObject(body); Integer code = jsonObjectResult.getInteger("code"); if(code!=200){ log.error("請(qǐng)求每日新聞的接口出錯(cuò),出錯(cuò)信息:"+body); return "一切都是最好的安排~"; } JSONObject resultObject = jsonObjectResult.getJSONObject("result"); log.info("請(qǐng)求每日新聞的接口成功:"+resultObject); return resultObject.getString("content"); }
3.調(diào)用天行數(shù)據(jù)接口,獲取天氣預(yù)報(bào):
/** * 獲取天氣預(yù)報(bào) * */ public static JSONObject getWeather(){ String path = "tianqi/index"; //調(diào)用每日簡(jiǎn)報(bào)的接口 String body = HttpUtil .createGet(Constants.TIAN_XING_API + path + "?key=" + TIAN_KEY+"&type=1&city=370100") .execute() .body(); JSONObject jsonObjectResult = JSON.parseObject(body); Integer code = jsonObjectResult.getInteger("code"); if(code!=200){ log.error("請(qǐng)求每日新聞的接口出錯(cuò),出錯(cuò)信息:"+body); return null; } return jsonObjectResult.getJSONObject("result"); /* * { "code": 200, "msg": "success", "result": { "date": "2022-12-19", "week": "星期一", "province": "上海", "area": "上海", "areaid": "101020100", "weather": "晴", "weatherimg": "qing.png", "weathercode": "qing", "real": "3℃", "lowest": "2℃", "highest": "9℃", "wind": "北風(fēng)", "windspeed": "0", "windsc": "0級(jí)", "sunrise": "06:47", "sunset": "16:54", "moonrise": "", "moondown": "", "pcpn": "0", "uv_index": "0", "aqi": "54", "quality": "良", "vis": "18", "humidity": "48", "alarmlist": [ ], "tips": "晴天紫外線等級(jí)較高,外出注意補(bǔ)水防曬。天氣涼,適宜著一到兩件羊毛衫、大衣、毛套裝、皮夾克等春秋著裝;年老體弱者宜著風(fēng)衣加羊毛衫等厚型春秋著裝??諝赓|(zhì)量較好,可以參與各類戶外活動(dòng)。疫情防控不松懈,出門請(qǐng)佩戴口罩。" } } * */ }
日期處理關(guān)鍵代碼
1.獲取今天是周幾
/** * 獲取漢字的今天周幾 * @param dateTime * @return * @throws ParseException */ public static String getDaysByWeekChina(String dateTime) throws ParseException { Calendar cal = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = dateFormat.parse(dateTime); cal.setTime(date); int day = cal.get(Calendar.DAY_OF_WEEK); day = day - 1; //周的漢字 String week = ""; switch (day) { case 0: week = "日"; break; case 1: week = "一"; break; case 2: week = "二"; break; case 3: week = "三"; break; case 4: week = "四"; break; case 5: week = "五"; break; case 6: week = "六"; break; } return week; }
2.獲取紀(jì)念日的天數(shù)(兩個(gè)日期之間的差):
/** * 得到二個(gè)日期間的間隔天數(shù) * * @param date1 * @param date2 * @return */ public static int getDayByTwoDay(String date1, String date2) { SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd"); Long day = 0L; try { java.util.Date date = myFormatter.parse(date1); java.util.Date mydate = myFormatter.parse(date2); day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000); } catch (Exception e) { return 0; } return day.intValue(); }
實(shí)現(xiàn)給指定微信好友推送消息
/** * 每天將指定信息推送到微信個(gè)人 */ @Override public void sendWechatToUser() { String url = WEI_MI_SHU_API + "/openapi/v1/chat/contact"; WeiZhiMiShuVO weiZhiMiShuVO = new WeiZhiMiShuVO(); //發(fā)送文字信息 weiZhiMiShuVO.setType(1); try { //拿到發(fā)送的消息列表 SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日"); SimpleDateFormat format_h = new SimpleDateFormat("yyyy-MM-dd"); //今天的日期 String toDate = format_h.format(new Date()); //相戀的日期 String lian = "2022-03-28"; //兩個(gè)日期相差的天數(shù) int cha = DateUtils.getDayByTwoDay(toDate, lian); String todayDate = format.format(new Date()); //根據(jù)陽歷計(jì)算農(nóng)歷 Calendar today = Calendar.getInstance(); String week = DateUtils.getDaysByWeekChina(toDate); today.setTime(DateUtils.chineseDateFormat.parse(todayDate)); DateUtils lunar = new DateUtils(today); String nongli = lunar.toString(); nongli = nongli.substring(nongli.indexOf("年") + 1); StringBuilder sb = new StringBuilder(); sb.append("親愛的老婆~早\n\n") .append("充滿希望的一天又開始了,今天也要一直開心,不能生我氣氣~") .append("\n\n今天是:") .append(todayDate) .append(",星期") .append(week) .append(",農(nóng)歷") .append(nongli) .append("\n") .append("是我們相愛的第:") .append(cha) .append("天") .append("\n\n") ; JSONObject tianqiObject = TianXingApiUtil.getWeather(); sb.append("目前濟(jì)南天氣:") .append(tianqiObject.getString("weather")) .append("\n") .append("當(dāng)前氣溫:") .append(tianqiObject.getString("real")) .append("\n") .append("今天最高溫度:") .append(tianqiObject.getString("highest")) .append("\n") .append("最低溫度:") .append(tianqiObject.getString("lowest")) .append("\n") .append("風(fēng)向:") .append(tianqiObject.getString("wind")) .append("\n") .append("空氣質(zhì)量:") .append(tianqiObject.getString("quality")) .append("\n") .append("空氣質(zhì)量指數(shù):") .append(tianqiObject.getString("aqi")) .append("\n") .append("小提示:") .append(tianqiObject.getString("tips")); //土味情話 sb.append("\n\n") .append("愛你一日言:") .append(TianXingApiUtil.getLoveWords()) .append("\n\n【早安寄語】") .append(goodMorning()); weiZhiMiShuVO.setContent(sb.toString()); for (String str : SEND_USER) { JSONObject object = new JSONObject(); object.put("apiKey", WEI_MI_SHU_KEY); //好友昵稱 object.put("name", str); //好友備注 object.put("alias", str); object.put("message", weiZhiMiShuVO); String body = HttpUtil.createPost(url) .body(JSON.toJSONString(object)) .execute() .body(); System.out.println("傳遞的參數(shù)是:" + JSON.toJSONString(object)); System.out.println("發(fā)送成功了嗎?" + body); } } catch (ParseException e) { e.printStackTrace(); } }
說明:
- WeiZhiMiShuVO 類可以參考文章:java實(shí)現(xiàn)給微信群中定時(shí)推送消息
- 代碼中涉及到的常量,都放在了常量類中,SEND_USER是要發(fā)給微信好友的好友昵稱,不是備注哈。
- 智能微秘書接口地址:接口地址
然后我們?cè)诳刂破鱟ontroller中調(diào)用該方法即可實(shí)現(xiàn):
/** * 發(fā)送消息給指定的人 */ @GetMapping(value = "/sendWechatToUser") @Scheduled(cron ="0 0 8 * * ?") public void sendWechatToUser(){ articleService.sendWechatToUser(); }
cron ="0 0 8 * * ?是一個(gè)corn表達(dá)式,表示每天早上8點(diǎn)給指定的微信好友推送消息。
到此這篇關(guān)于Java實(shí)現(xiàn)每日給女友微信發(fā)送早安信息的文章就介紹到這了,更多相關(guān)Java微信發(fā)送信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
elasticsearch啟動(dòng)警告無法鎖定JVM內(nèi)存
今天小編就為大家分享一篇關(guān)于elasticsearch啟動(dòng)警告無法鎖定JVM內(nèi)存,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03Java中mkdir()和mkdirs()的區(qū)別及說明
這篇文章主要介紹了Java中mkdir()和mkdirs()的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11單點(diǎn)登錄的概念及SpringBoot實(shí)現(xiàn)單點(diǎn)登錄的操作方法
在本文中,我們將使用Spring Boot構(gòu)建一個(gè)基本的單點(diǎn)登錄系統(tǒng),我們將介紹如何使用Spring Security和JSON Web Tokens(JWTs)來實(shí)現(xiàn)單點(diǎn)登錄功能,本文假設(shè)您已經(jīng)熟悉Spring Boot和Spring Security,感興趣的朋友一起看看吧2024-10-10如何使用Spring+redis實(shí)現(xiàn)對(duì)session的分布式管理
本篇文章主要介紹了如何使用Spring+redis實(shí)現(xiàn)對(duì)session的分布式管理,本文主要是在Spring中實(shí)現(xiàn)分布式session,采用redis對(duì)session進(jìn)行持久化管理,感興趣的小伙伴們可以參考一下2018-06-06基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn)
本篇教程給大家分享基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn),驗(yàn)證碼功能的實(shí)現(xiàn)是采用Zuul網(wǎng)關(guān)的Filter過濾器進(jìn)行校驗(yàn)驗(yàn)證碼,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧2021-05-05從零搭建Spring Boot腳手架整合OSS作為文件服務(wù)器的詳細(xì)教程
這篇文章主要介紹了從零搭建Spring Boot腳手架整合OSS作為文件服務(wù)器的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08鑒權(quán)認(rèn)證+aop+注解+過濾feign請(qǐng)求的實(shí)例
這篇文章主要介紹了鑒權(quán)認(rèn)證+aop+注解+過濾feign請(qǐng)求的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03