微博Rss邮箱推送系统

Posted lexmoon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微博Rss邮箱推送系统相关的知识,希望对你有一定的参考价值。

微博Rss邮箱推送

?? Weibo subscription and sentiment analysis.

假期在家无聊,想到做一个微博订阅系统,可以将朋友or女朋友的微博更新动态通过邮件推送给我。

就是这样,代码已经写好了,就差个女朋友了。

最后的效果就是实时检测某一微博博主新发的微博,然后进行邮件通知。

项目地址 : https://github.com/CasterWx/WeiboRSS

演示

启动
技术分享图片

监控到微博更新,发送邮件
技术分享图片
技术分享图片

用户更新动态 邮件推送
技术分享图片 技术分享图片

实现

技术分享图片

总体来说后台是一个爬虫,用来定时监控微博用户动态,所以我们首先要完成的是微博动态爬虫。

每一个动态用Bean来存储。

技术分享图片

我们利用HttpClient类来实现爬取指定URL下的网页源码。

技术分享图片

抓取微博内容的原理很简单,新浪微博的微博秀是不需要登录就可以访问的,直接爬取解析页面就可以拿到微博内容。

http://service.weibo.com/widget/widget_blog.php?uid=`用户id`

微博用户主页是根据id来确定的,所以我们需要通过用户id来进行爬取。

技术分享图片

获得的信息如下,接下来需要对网页内容进行解析,这里我使用正则表达式对内容解析匹配。

技术分享图片

技术分享图片

在对历史动态处理时,我们将历史动态存储入一个HashMap中,每一条微博有一个唯一的URL,所以key使用动态的URL,value值为Bean,也就是动态类。

技术分享图片

接下来创建一个线程,实时分析目标动态,判断是否有新的URL出现在HashMap中。

技术分享图片

若存在新的URL,则在添加之后发送邮件给订阅用户。

技术分享图片

发送邮件使用的是QQ邮箱,需要在QQ邮箱中开启STMP服务,并获取其给定的客户端授权码。

技术分享图片

开启之后保存给定的授权码,使用Java-Mail进行邮件发送。

 public static void Send(String myMailAddress,String mailAddress,String stmpPassword,WebBean webBean) throws AddressException,MessagingException {
        Properties properties = new Properties();
        properties.put("mail.transport.protocol", "smtp");// 连接协议
        properties.put("mail.smtp.host", "smtp.qq.com");// 主机名
        properties.put("mail.smtp.port", 465);// 端口号
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用
        properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
        // 得到回话对象
        Session session = Session.getInstance(properties);
        // 获取邮件对象
        Message message = new MimeMessage(session);
        // 设置发件人邮箱地址
        message.setFrom(new InternetAddress(myMailAddress));
        // 设置收件人邮箱地址
        message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress(mailAddress)});
        //message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));//一个收件人
        // 设置邮件标题
        message.setSubject(webBean.getTitle());
        // 设置邮件内容
        message.setText("您订阅的博主更新啦!!!
...更新内容....");
        // 得到邮差对象
        Transport transport = session.getTransport();
        // 连接自己的邮箱账户
        transport.connect(myMailAddress, stmpPassword);// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
        // 发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }

stmpPassword就是我们获取到的授权码, myMailAddress是我们自己的邮箱地址,收件人地址可以是多人,也可以是一人。

总体流程就已经概述完了,接下来就可以部署到服务器跑起来啦~

后继还可以将微博动态进行情绪值分析,之前在Github上发布过一个情绪分析样本https://github.com/CasterWx/python-girlfriend-mood

以上是关于微博Rss邮箱推送系统的主要内容,如果未能解决你的问题,请参考以下文章

微信公众平台 怎么做到招商银行那种实时推送消息

RSSHub:一个轻量易于扩展的RSS生成器,支持B站-微博-网易云音乐等

带有 RSS 的 truepush.com 推送通知图标

django实现实时消息推送有啥好的方案

在 Swift 中从 RSS 推送通知

急求 安卓手机邮箱推送问题