Java實現(xiàn)每日給女友微信發(fā)送早安信息
前言
據(jù)說這個功能最近在抖音上很火,我沒有抖音,沒有看到。
但是我在網(wǎng)上看了,相關(guān)案例確實很多,但是大家都是借助于了微信服務(wù)號,在我看來,效果很不佳。
其實我原來的初衷是這樣的,每天定時給群里推送新聞,這個原因在之前的文章中也提到過,這邊就不在細說了,然后實現(xiàn)了給群中推送之后,就想著,能不能每天給指定人發(fā)送消息,網(wǎng)上搜了搜,果然有,各種實現(xiàn)方式五花八門,但是都沒看上,于是就自己找了個,自己寫。
網(wǎng)上案例
網(wǎng)上最多的可能就是利用微信服務(wù)號給推送信息,如圖所示:


缺點如下:
- 需要點進去訂閱號才能看到,沒喲起到吸引的作用
- 申請的測試服務(wù)號,也不知道多久過期,說停就給你停掉了
- 定制化的需求有的達不到
介于此,我就自己找了一個路子去做,昨晚剛寫完,測了測,效果還是比較不錯的。如下圖所示:

(有點肉麻~)
實現(xiàn)方式
下面我們來看看是如何實現(xiàn)的。
準(zhǔn)備工作
1.注冊智能微秘書賬號,花20塊錢開個會員(20塊錢一點都不多),注冊地址:這里
2.注冊天行數(shù)據(jù)的賬號,申請三個接口(早安寄語、每日新聞、土味情話),也可以自己加入別的有意義的內(nèi)容,直接申請接口就行,注冊地址:這里
3.準(zhǔn)備一個微信號,可以用你現(xiàn)在自己的,也可以在申請一個。
4.準(zhǔn)備一個服務(wù)器
5.準(zhǔn)備一個java項目,放服務(wù)器上跑就可以
假使你的準(zhǔn)備工作除4、5之外,都已經(jīng)做完了,下面我們來看看如何從代碼層面來實現(xiàn)。
實現(xiàn)原理
調(diào)用天行數(shù)據(jù)的api,獲取自己想要的數(shù)據(jù),封裝起來
調(diào)用只能微秘書的接口,實現(xiàn)給微信好友發(fā)送消息
給控制器controller類中添加定時任務(wù),實現(xiàn)定時發(fā)送
關(guān)鍵代碼如下所示:
1.調(diào)用天行數(shù)據(jù)接口,獲取早安寄語:
/**
* 獲取每日早安寄語
*
*/
public static String getGoodMorning() {
String path = "zaoan/index";
//調(dià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("請求每日新聞的接口出錯,出錯信息:" + body);
return "一切都是最好的安排~";
}
log.info("請求每日新聞的接口成功:" + 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)用每日簡報的接口
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("請求每日新聞的接口出錯,出錯信息:"+body);
return "一切都是最好的安排~";
}
JSONObject resultObject = jsonObjectResult.getJSONObject("result");
log.info("請求每日新聞的接口成功:"+resultObject);
return resultObject.getString("content");
}
3.調(diào)用天行數(shù)據(jù)接口,獲取天氣預(yù)報:
/**
* 獲取天氣預(yù)報
*
*/
public static JSONObject getWeather(){
String path = "tianqi/index";
//調(dià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("請求每日新聞的接口出錯,出錯信息:"+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級",
"sunrise": "06:47",
"sunset": "16:54",
"moonrise": "",
"moondown": "",
"pcpn": "0",
"uv_index": "0",
"aqi": "54",
"quality": "良",
"vis": "18",
"humidity": "48",
"alarmlist": [
],
"tips": "晴天紫外線等級較高,外出注意補水防曬。天氣涼,適宜著一到兩件羊毛衫、大衣、毛套裝、皮夾克等春秋著裝;年老體弱者宜著風(fēng)衣加羊毛衫等厚型春秋著裝。空氣質(zhì)量較好,可以參與各類戶外活動。疫情防控不松懈,出門請佩戴口罩。"
}
}
* */
}
日期處理關(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ù)(兩個日期之間的差):
/**
* 得到二個日期間的間隔天數(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();
}
實現(xiàn)給指定微信好友推送消息
/**
* 每天將指定信息推送到微信個人
*/
@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";
//兩個日期相差的天數(shù)
int cha = DateUtils.getDayByTwoDay(toDate, lian);
String todayDate = format.format(new Date());
//根據(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("目前濟南天氣:")
.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實現(xiàn)給微信群中定時推送消息
- 代碼中涉及到的常量,都放在了常量類中,SEND_USER是要發(fā)給微信好友的好友昵稱,不是備注哈。
- 智能微秘書接口地址:接口地址
然后我們在控制器controller中調(diào)用該方法即可實現(xiàn):
/**
* 發(fā)送消息給指定的人
*/
@GetMapping(value = "/sendWechatToUser")
@Scheduled(cron ="0 0 8 * * ?")
public void sendWechatToUser(){
articleService.sendWechatToUser();
}cron ="0 0 8 * * ?是一個corn表達式,表示每天早上8點給指定的微信好友推送消息。
到此這篇關(guān)于Java實現(xiàn)每日給女友微信發(fā)送早安信息的文章就介紹到這了,更多相關(guān)Java微信發(fā)送信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)之線索化二叉樹的實現(xiàn)
在二叉樹的結(jié)點上加上線索的二叉樹稱為線索二叉樹,對二叉樹以某種遍歷方式進行遍歷,使其變?yōu)榫€索二叉樹的過程稱為對二叉樹進行線索化。本文將詳解如何實現(xiàn)線索化二叉樹,需要的可以參考一下2022-05-05
SpringBoot中@ConditionalOnProperty的使用及作用詳解
這篇文章主要介紹了SpringBoot中@ConditionalOnProperty的使用及作用詳解,@ConditionalOnProperty通過讀取本地配置文件中的值來判斷 某些 Bean 或者 配置類 是否加入spring 中,需要的朋友可以參考下2024-01-01
MyBatis的<foreach>以及java代碼的批處理方式
這篇文章主要介紹了MyBatis的<foreach>以及java代碼的批處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Spring Boot中進行 文件上傳和 文件下載功能實現(xiàn)
開發(fā)Wb應(yīng)用時,文件上傳是很常見的一個需求,瀏覽器 通過 表單形式 將 文件 以 流的形式傳遞 給 服務(wù)器,服務(wù)器再對上傳的數(shù)據(jù)解析處理,下面將通過一個案例講解使用 SpringBoot 實現(xiàn) 文件上傳,感興趣的朋友一起看看吧2024-07-07
詳解spring cloud hystrix請求緩存(request cache)
這篇文章主要介紹了詳解spring cloud hystrix請求緩存(request cache),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
springboot項目訪問圖片的3種實現(xiàn)方法(親測可用)
本文主要介紹了springboot項目訪問圖片的3種實現(xiàn)方法,通過springboot項目訪問除項目根目錄之外的其它目錄的圖片,具有一定的參考價值,感興趣的可以了解一下2023-09-09

