likes
comments
collection
share

做个微信机器人每天定时推送新闻的项目

作者站长头像
站长
· 阅读数 21

项目目标

每天早上8点跑定时任务,使用自己的微信小号给群里推送新闻

做个微信机器人每天定时推送新闻的项目

需要资源

一台阿里云服务器

做个微信机器人每天定时推送新闻的项目

注册微秘书和天行数据,微秘书需要充20块钱,可以用一个月

wechat.aibotk.com/

www.tianapi.com/

实现原理

做个微信机器人每天定时推送新闻的项目

我理解的大概流程就是这样,微秘书客户端相当于一个桌面版微信,需要扫码登录

实现步骤

1. 编写代码

@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, "有钱才算自由");
    }
}
@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镜像,相关文档在这里github.com/leochen-g/w…

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

日志中会打印二维码,用手机扫描登录

做个微信机器人每天定时推送新闻的项目

最后一步,部署启动我自己的应用,可参考我之前这篇用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 "发送成功";
    }
}

完整代码

github.com/mundane7996…

参考

github.com/leochen-g/w…

java实现给微信群中定时推送消息

java实现每日给女友微信发送早安等微信信息

java 爬取微信公众号文章 - 搜狗微信搜索

Java 爬取微信公众号文章(文字 + 图片)

docker 命令 查看启动进程及日志