微信群总能看到各种新闻简报,心想能否写一个爬虫每天采集些一句话新闻,让程序来生成这种简报。经过一番对比选定了界面新闻,理由是:1.大部分新闻标题概括性很强,符合一句话新闻的特点; 2. 类别丰富,国内、国际、科技、商业、体育等等都有; 3.没有太多主旋律新闻(☭的喉舌那样的你懂的)和震惊体之类的标题党新闻。
技术选型是:eggjs + request-promise + cheerio + mongoose
用egg的定时任务,每小时爬一次当天的新闻,增量地存到MongoDB。生成简报时,查出当天新闻随机摘12条即可,如果当天新闻条目数不足(比如早晨五六点的时候),就把昨天新闻拿来凑一下。
简报做好了,感觉太单薄,又加了所在城市天气预报功能,接入心知天气API。需要继发调用2个接口查询访客所在城市的天气预报:根据IP查城市名、根据城市名查天气预报。由于心知天气API(免费版)调用频率有限制,加上考虑到每次生成简报的远程HTTP请求开销,肯定要将这两个接口得到的数据存库呀。做法是:IP地址为1.2.3.4的客户访问服务时,要将1.2.3.0这个网段IP地址及所在城市存库,下次1.2.3.99的IP来访问,直接从本地数据库查到其所在城市,这样可以少发很多请求到心知天气。天气预报接口同理,只不过本地存的是城市今明两天的天气,作用一样是为了减少调用心知API的频率和次数。
继续充实简报内容,从CSDN下载了“历史上的今天”、“名人名言”、“成语词典”数据库,随机展示3条“历史上的今天”条目和1条名人名言及成语条目,成语后期还加上了汉字描红框线的样式。在简报末尾加上了年度使用进度条,简报头部加上了农历日期和节气的展示。给简报增加一个切换夜间模式的小图标。加上统计功能。加上一键复制全文功能。完事儿 :D
→ 每日新闻早读 ←
1 | 用法: |