做個微信機器人每天定時推送新聞的專案

語言: CN / TW / HK

專案目標

每天早上8點跑定時任務,使用自己的微信小號給群裡推送新聞

需要資源

一臺阿里雲伺服器

image.png

註冊微祕書和天行資料,微祕書需要充20塊錢,可以用一個月

http://wechat.aibotk.com/

https://www.tianapi.com/

實現原理

我理解的大概流程就是這樣,微祕書客戶端相當於一個桌面版微信,需要掃碼登入

實現步驟

1. 編寫程式碼

``` java @Component public class NewsTask {

@Autowired
private WeChatService weChatService;

@Autowired
private NewsService newsService;

@Scheduled(cron = "0 0 8 * * ?")
public void newsCron() {
    String news = newsService.getNews();
    weChatService.sendToRoom(news, "有錢才算自由");
}

} ```

``` java @Service public class WeChatService {

@Autowired
private RestTemplate restTemplate;

public static final String WEI_MI_SHU_API = "https://api-bot.aibotk.com";
public static final String WEI_MI_SHU_KEY = "你自己的key";


public void sendToRoom(String content, String roomName) {
    String url = WEI_MI_SHU_API + "/openapi/v1/chat/room";
    WeiMiShuVO weiMiShuVO = new WeiMiShuVO();
    weiMiShuVO.setType(1);
    weiMiShuVO.setContent(content);
    JSONObject object = new JSONObject();
    object.set("apiKey", WEI_MI_SHU_KEY);
    object.set("roomName", roomName);
    object.set("message", weiMiShuVO);
    String response = restTemplate.postForObject(url, object, String.class);
    System.out.println(response);

}

} ```

NewsService中爬蟲這步比較麻煩,這裡先省略了,可以看具體程式碼。
新聞內容我沒有用天行資料的,因為我覺得那個新聞內容很差。
我是爬的公眾號每日資訊簡報中的內容,非常優質。

2. 在微祕書中進行配置

這裡協議選大恩,比較穩定,web協議很不穩定

3. 安裝和登入微祕書客戶端

登入到阿里雲,先安裝docker。

再拉取微祕書的docker映象,相關文件在這裡https://github.com/leochen-g/wechat-assistant-pro

docker pull aibotk/wechat-assistant

後臺執行微祕書客戶端

docker run -d -e AIBOTK_KEY="微祕書apikey" -e AIBOTK_SECRET="微祕書apiSecret" --name=wechatbot aibotk/wechat-assistant

啟動以後檢視日誌

docker logs -f --tail=300 映象id

日誌中會列印二維碼,用手機掃描登入

202302282033730.png

最後一步,部署啟動我自己的應用,可參考我之前這篇用springboot做一個雨雪天氣給自己發郵件的專案

測試介面

全部部署完之後用這個介面測試一下,看有沒有往微信群裡推送訊息

``` @RestController @RequestMapping("/news") public class NewsController {

@Autowired
private WeChatService weChatService;

@Autowired
private NewsService newsService;

@GetMapping("/send")
public String sendWeatherReport() {
    try {
        String news = newsService.getNews();
        weChatService.sendToRoom(news, "有錢才算自由");
    } catch (Exception e) {
        e.printStackTrace();
        return "傳送失敗";
    }
    return "傳送成功";
}

} ```

完整程式碼

https://github.com/mundane799699/myprojects/tree/master/mail

參考

https://github.com/leochen-g/wechat-assistant-pro

java實現給微信群中定時推送訊息

java實現每日給女友微信傳送早安等微信資訊

java 爬取微信公眾號文章 - 搜狗微信搜尋

Java 爬取微信公眾號文章(文字 + 圖片)

docker 命令 檢視啟動程序及日誌