Play Framework - 数据采集
发布日期:2021-09-03 11:46:00
浏览次数:2
分类:技术文章
本文共 6206 字,大约阅读时间需要 20 分钟。
准备工作:
环境: A.mysql5.6
mysql设置编码: 0.若是您确定你的mysql是UTF-8编码的,可以直接进入底4步验证。 1.下载https://github.com/pgq10240817/PlayNews/blob/master/conf/db/my.ini 2.把1下载的文件放到您安装目录下面,可以直接命为my.ini(默认是没有改文件的,默认是有my-default.ini). 3. 然后重启mysq打开cmd,输入services.msc 进入服务管理,定位到MySql,右键重新启动。 4.打开cmd,进入到%MYSQL%/bin(如果设置了mysql环境变量,可以略过),输入mysql, 再次输入
show variables like 'char%';
界面如下那就代表您成功了。
mysql> show variables like 'char%';+--------------------------+--------------+| Variable_name | Value |+--------------------------+--------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8
B.PLAY 控制台编码。
打开windows环境变量设置,添加系统变量:
PLAY_OPTS:-Dfile.encoding=GBK
楼主尝试过改为UTF8、UTF-8,然而还是乱码。。。。。
C.创建数据库:
运行:
创建数据库,主要是做了下默认编码。
D.play配置:
1.数据库配置:
参考
# Database configuration# db.default.url="jdbc:mysql://127.0.0.1:3306/dbnews1?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull"db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://127.0.0.1/dbnews1"db.default.user=rootdb.default.pass="123456"# Ebean configuration#ebean.default="com.yhpl.model.*"#evolutionplugin=disabledebean.default="models.*"
以上代码可以下载play project/conf/application.conf下面,也可以新建一个db.conf,然后application.conf加入
include "db.conf"就可以了。
2.常量配置: 参考:https://github.com/pgq10240817/PlayNews/blob/master/client/myNews/conf/http.conf 配置了网易音乐的一些常用链接,然后https://github.com/pgq10240817/PlayNews/blob/master/client/myNews/app/com/yhpl/utils/NewsUrlUtil.java NewsUtil提供了对该类的写访问。 3.play路由配置: https://github.com/pgq10240817/PlayNews/blob/master/client/myNews/conf/routes 暂时只是配置了如下:
GET /initChannels controllers.CaptureController.initChannels()GET /initNews controllers.CaptureController.initNews()
其中initChannels代表初始化频道,initNews代表读取频道的value去初始化新闻。
数据分析:
数据来源: 本次数据来源是采用网易新闻的来源。总共会采集2个分类,1:新闻频道,2:频道下的新闻。
数据格式:
通过fiddler抓包,发现网易新闻的数据包格式如下: 1:频道 https://github.com/pgq10240817/PlayNews/blob/master/conf/data/fiddler/channels.txt 2:新闻 https://github.com/pgq10240817/PlayNews/blob/master/conf/data/fiddler/news.txt 其中2中的抓包需要用到1的频道ID
数据分析: 通过分析数据格式发现,获取频道的内容的URL是固定的,获取新闻需要用到3个参数,频道ID,page,pageCount。
编写Bean:
Bean类位于: https://github.com/pgq10240817/PlayNews/tree/master/client/myNews/app/models 下Channels.java,News.java。
数据采集:
代码位于:https://github.com/pgq10240817/PlayNews/blob/master/client/myNews/app/controllers/CaptureController.java 1.频道采集:
public static Result initChannels() { NewChannalsVo chanals = (NewChannalsVo) JsonFileUtil.getGetUrlContentAsObject(NewsUrlUtil.getChannelUrl(), NewChannalsVo.class); if (chanals != null) { NewChannalVo[] channelArray = chanals.gettList(); Listbeans = new ArrayList (); for (int i = 0; i < channelArray.length; i++) { NewChannalVo jsonObj = channelArray[i]; Channels bean = new Channels(); bean.cname = jsonObj.getTname(); bean.cid = jsonObj.getTid(); bean.subnum = jsonObj.getSubnum(); beans.add(bean); } Ebean.beginTransaction(); for (int i = 0; i < channelArray.length; i++) { Channels bean = beans.get(i); Channels target = Channels.getChannelWithCname(bean.cname); if (target == null) { Ebean.save(bean); } else { System.out.println("exist -- " + target.cname); } } Ebean.commitTransaction(); } return ok("init Channels success"); }
2.新闻采集:
public static Result initNews() { PagepageChannel = Channels.page(1, 20, "id", "asc"); if (pageChannel.getTotalRowCount() > 0) { List channelBeans = pageChannel.getList(); if (!CollectionUtil.isEmpty(channelBeans)) { for (int i = 0; i < channelBeans.size(); i++) { // A.解析数据 Channels channelBean = channelBeans.get(i); String url = NewsUrlUtil.getChannelNewsUrlWithCidPageCount(channelBean.cid); JsonNode node = JsonFileUtil.getGetUrlContentAsJsonNode(url); ArrayNode arrayNodes = (ArrayNode) node.get(channelBean.cid); Iterator iter = arrayNodes.iterator(); List mNews = new ArrayList (); while (iter.hasNext()) { JsonNode childNode = iter.next(); NewsVo childNews = Json.fromJson(childNode, NewsVo.class); News news = new News(); news.cid = channelBean.cid; news.cp = childNews.getSource(); news.icon = childNews.getImgsrc(); news.url = childNews.getUrl(); news.title = childNews.getTitle(); news.snapDetail = childNews.getDigest(); news.time = DateUtil.getDateFromString(childNews.getPtime()); mNews.add(news); System.out.println("child:" + childNews); } // B.过滤数据库 CollectionUtil.trimListWithFilter(mNews, new TrimFilter () { @Override public boolean isFilter(News t) { return t != null && News.getNewsWithTitle(t.title) != null; } }); // C.POJO -> DB if (!CollectionUtil.isEmpty(mNews)) { System.out.println("save --- > :" + channelBean.cid); Ebean.save(mNews); } } } } return ok("init News success"); }
3.运行play之后,第一次初始化会要求add scripts,点击add即可。
Next:
昨天在wooyun提交的漏洞又是审核不通过,理由是: 无法联系到厂商并且问题影响不大。。。 那个道友助我一臂啊。。。 下次估计会在国庆节后更,内容主要是,编写接口共客户端调用,会有2个接口,获取频道,获取频道下的新闻。
文章转载自 开源中国社区[https://www.oschina.net]
转载地址:https://blog.csdn.net/weixin_34186950/article/details/90526156 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月02日 07时26分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
xml中常用的转义符
2019-04-27
关于MSDK的几个难点
2019-04-27
使用UnityEditor做工具
2019-04-27
Visual Studio我常用的快捷键
2019-04-27
写C# dll供Unity调用
2019-04-27
Linux制作run安装包
2019-04-27
一分钟学会C#解析XML
2019-04-27
unity AssetBundle的资源管理
2019-04-27
【转】Unity中HideInInspector和SerializeField一起使用
2019-04-27
单例模板类
2019-04-27
Unity与java相互调用
2019-04-27
android截屏代码
2019-04-27
unity NGUI图文混排
2019-04-27
Unity项目优化
2019-04-27
Unity3D Shader 入门
2019-04-27
MSDK手Q邀请透传参数问题:url编解码与base64编解码
2019-04-27
C#用正则表达式去匹配被双引号包起来的中文
2019-04-27
lua table排序
2019-04-27
Unity发布的ios包在iphone上声音是从听筒里出来的问题
2019-04-27