Azure认知服务的实际应用-资讯采集推送
演示
实现的是通过使用各种azure服务,每天自动获取资讯、博客,定时推送到公众号的功能!
微信公众号搜索TechViews,或直接扫描二维码关注,每天推送科技资讯。
需求
我个人有浏览科技资讯的需求。长期以来,我通过一些新闻客户端、关注部分公众号推送、谷歌快讯、搜索引擎关键词搜索等方式去获取我想要的资讯,比较分散和费时。为了满足自己的需求,我需要能够天天获取到自己感兴趣的内容。
背景
从2016年年中接触.net core开始,陆续了解了微软相关的技术栈,其实包括Azure服务。近年来机器学习、人工智能等概念很火,但具体的应用,还不是十分广泛。微信Azure当中就提供了认知服务,其实包括语言、图片、音频、视频等相关的接口服务。自己经过对部分服务的了解和使用后,最终应用到现在的服务当中。
参考: Azure认知服务文档
技术实现
做一个每天自动推送资讯的公众号都包含哪些部分,我是如何去实现的呢?下面做简单说明。
内容来源
内容是最主要的,对于资讯来说,来是要从网络上采集,但网络上的内容众多,如何采集筛选并不容易。
资讯来源
对于资讯来说,我是直接使用的Azure提供的
Bing News Search
接口,可根据关键词返回结果。
可以通过以下链接直接体验搜索的效果。
当然,搜索过来的新闻,哪些要保存,哪些有问题,怎么去重筛选,这个不细说了,根据每个人的需求需要自定义。这样就解决了资讯来源问题。我会进一步对筛选过的网站,对详细页再进行采集处理(保留所有版权和来源信息),作为内容显示在网站TechViews上。点击在线体验必应新闻搜索。
技术文章来源
另一方面,对于一些技术类文章,我并没有选择直接从国内的博客网站上去获取,因为这些相对来说比较容易,大家想获取都可以比较轻松的获取到。所以我会有意找国外的文章。尴尬并且有意思的是,国外虽然也有个别博客平台有专门的技术分类,但基本没什么有用的内容。感觉老外更多的还是通过官方文档、stackoverflow、github、gitter之类方式学习和解决问题的,不像国内用百度一搜索,就是一堆重复的文章,散落到csdn、cnblogs等博客平台。所以,目前我能找到的是通过一些官方的博客rss源获取内容。这样原始内容算是有了。只是国外的文章需要翻译才可阅读,所以我借助Azure提供的
Bing Translate Api
接口对英文进行翻译。不过由于微软提供的翻译接口是非神经网络训练的,有需要的要自己训练 ,而自己训练要大量一定格式的训练数据,并不容易,所以现在我已经更改成Goole云提供的翻译接口了,谷歌对大部分语言都支持神经网络翻译,结果要准确的多。
内容处理
基本处理
数据来源有了,但处理是最花时间和精力的,我们要应对各种数据源缺失、重复的情况。这一块不多讲,其实没什么好办法,遇到一个处理一个,比如建立自己的过滤列表等内容。
缩略图处理
我从rss获取的博客文章,是不带缩略图的。但如果要想作为图文消息推送到微信中,就需要有一个缩略图,这个时候需要打一个组合拳了。
首先,我会对英文文章的标题处理,使用Azure认知服务中的文本分析服务,对标题进行关键词提取。然后根据关键词使用必应图片搜索服务,获取与之相关的图片地址。当然,但凡使用接口获取数据,都要根据自己的策略去对结果进行选择。这就解决了缩略图的问题。点击在线体验文本分析。
点击在线体验必应图像搜索。
基本上,通过使用翻译、搜索、文本分析等服务,我可以将一篇国外的文章,转化成可通过微信推送的中文文章。
自动化流程
内容来源和处理大概讲了,剩下的就是通过程序实现,并且要自动化整个流程。我只需要寻找好的内容来源,添加采集处理的逻辑就可以。
我们要实现的是:
- 采集自动化:确定好来源,程序应该要自己运行,不断采集新的内容入库。
- 内容处理自动化:即翻译、缩略图获取等操作都不需要人为选择。
- 推送自动化:每天按时推送,不需要人为参与。
架构
- 后台管理:集成基础管理功能和API接口。自搭环境,通过Azure devops自动化部署。
- 资讯采集程序:使用
Azure Function
服务,定时采集处理,通过后台接口更新到数据库中。 - 博客采集程序:使用
Azure Function
服务,定时采集处理,通过后台接口更新到数据库中。 - 推送服务:使用
Azure Function
服务,每天定时调用后台接口,后台接收请求后,进行微信推送。
说起来,也没什么架构,就是一个网站程序,提供后台管理的功能,然后提供一些自用接口。而对于需要耗时、定时处理的任务,直接使用 Azure Function
即可,都是一键部署,方便省心。
总结
作为从小学就接触编程教育的人,技术对我来说就是兴趣,是展现个人创造力的一种途径。如果你会乐器,你就可以把自己的想法转化成音符演奏出来;你会写作或绘画,就可以在纸上展现出来你的想法;同样的,你会写程序,也可通过编写软件提供服务的形式来展现你的想法。
一切的出发点是满足实际的需求,这样才能真正发挥技术的价值。像微软、谷歌等公司,已经为开发者提供了各种开发工具和服务的支持,如何应用这些东西实现我们的需求,是真正的价值所在。
总结使用的技术:
- ASP.Net Core:后台服务(网站及接口)
- Azure DevOps:Git代码管理及pipeline自动部署
- Azure Function:新闻采集处理等耗时、定时任务
- Azure认知服务-文本翻译:翻译英语
- Azure认知服务-文本分析:提取关键词
- Azure认知服务-必应新闻搜索:获取新闻资讯
- Azure认知服务-必应图像搜索:根据关键词获取图片
- Google Translate API:谷歌翻译,效果更好。
最最重要的是,Azure的服务都是免费的,免费的,免费的!。
Azure的注册用户可以免费使用以上全部服务,当然有一定的额度限制,但足够我目前使用的了。
Azure提供了各种功能,都可以免费体验,有实力不怕你验证,给你充分的学习和体验机会,这才是真的云!
配合优雅的C#,宇宙至强IDE,开发和部署简单轻松!