最初产生这个项目的想法应该是在2018年10月份,当时正在学习python中,就萌生了这样一个想法:从一个用户这一年发布的微博数据中,提取最有意义的top50个关键词。很明显涉及到了数据采集和自然语言处理的一些知识。
前期准备:
- 需要到微博开发平台认证开发者;
- 在微博开发平台创建应用;
- 域名1个,服务器1台;
微博应用创建和审核
创建应用的目的就是你的网站可以接入微博,使用微博登录授权,调用微博开放的一些api;质量高,用户多的应用还会被推荐到微博应用广场等等。
创建应用需要我们填写一些信息,应用名称,描述之类的。把准备好的文案直接粘贴进去就可以;需要不同规格的应用图标和三张以上应用介绍的宣传图。这个里面有一个关键点就是应用地址,需要提供一个可访问到的,并且包含微博组件的一个地址。这些东西提交完就可以提交审核了,微博应用审核的速度还算比较快的,一两天基本差不多会审核完。
等应用审核完,你就可以拿着appkey和appsecret继续往下开发了。
微博数据采集
因为微博开放的api接口里并不提供用户微博数据,所以才使用了数据采集的方案。第一个版本的工具是用nodejs写的,后来换成了python的版本。
提取关键词
这里还是使用python进行处理:
- 预处理(去掉微博里的表情、标签等);
- 分词(将整句分割为词汇);
- 加载词库(包括通用词库和用户自定义词库);
- 去停用词(去除一些无意义的词汇);
- 计算TFIDF,按权重排序;
- 取前50个词生成词云图片。
串联项目
项目的基础架构使用nodejs搭建,整个应用的路由访问控制,视图渲染,异常处理, 日志收集,进程管理,都是使用nodejs来完成。
大致流程:
- 用户访问应用;
- 引导用户到微博授权页;
- 授权成功后,后台拿到uid,开启一个新的子进程进行微博词云图片的生成;
- 这个时候给用户返回一个grant页面(此时微博词云的进程可能还没结束);
- 用户点击到下一个页面,如果图片已经生成了,就展示该展示的数据,如果还没有,就给用户等待的处理。
对,基本流程差不多就这些,比较简单。下面看下最终的效果。
重要的知识点
- 在nodejs中调用python脚本,大致思路就是生成一个shell命令,然后nodejs开启一个子进程,在子进程中执行这个shell即可。
- h5页面,长按保存成图片,这里的大致思路如下:
我们将html转为canvas,然后取出canvas数据放入一个img标签里。将这个img放到页面最顶层,并且将不透明度设为0就可以了。然后在微信、微博等app里面,长按就可以保存到手机了,具体实现代码请看下图。
总结
更多的是一些交互上的细化处理,让用户有更好的操作体验,和视觉上的冲击。这个应用视觉冲击倒是没有多少,哈哈。
最后,欢迎大家一起交流。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。