背景

  1. 由于只想了解当天新增的top热词,减少过多信息干扰,打算做一款app实现这个功能。
  2. 架构: 热词抓取 -> mysql <=> nodejs <=> nginx <=> react native应用

软件安装:

从阿里云申请的CentOS7.4裸机,因此软件安装列表如下:

  1. jdk: yum install java-1.7.0-openjdk-devel
  2. maven: wget apache-maven-3.3.9-bin.tar.gz && add to /etc/profile && source
  3. ssh免密登录:scp ~/.ssh/id_rsa.pub root@阿里云服务器ip:~/.ssh/authorized_keys
  4. nodejs: sudo yum -y install npm && sudo npm install -g n && sudo n 9.4.0
  5. mysql:

    wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

    rpm -ivh mysql-community-release-el7-5.noarch.rpm

    yum install mysql-community-server

    service mysql restart
  6. nginx:

    wget http://dl.Fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    rpm -ivh epel-release-latest-7.noarch.rpm && yum install nginx -y

    vim /etc/nginx/conf.d/nginx.yourservice.conf :
  server {
listen 80;
server_name 你的域名; #例如到阿里云申请域名,然后在域名解析设置,使用记录类型A
access_log /var/log/nginx/yourservice-access.log;
error_log /var/log/nginx/yourservice-error.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
proxy_pass http://127.0.0.1:3000; #nodejs web服务监听的端口
proxy_redirect default;
}
location /static/ {
}
}

systemctl start nginx.service 启动nginx

注意:使用阿里云服务器遇到个坑,localhost可以访问http接口,用ip无法访问,误以为是防火墙问题,后来在阿里云-实例安全组修改:允许80地址段访问才解决。

爬虫(java):

  1. 数据来源: 百度热词榜神马热词榜搜狗实时热词榜搜狗微信热词榜
  2. 数据处理: 解析使用jsoup(java的HTML解析器),数据存储使用mysql. 具体可参见代码
  3. crontab定时job: 设置/var/spool/cron/下的配置文件,每15分钟抓取一次热词:

    15 * * * * cd /your path/news-app-crawler/release/bin && sh crawler.hotquery.sh > crawler.log

服务端web(nodejs):

  1. 创建node项目,node app.js启动web服务,在浏览器中打开 http://localhost:3000 查看结果。
  2. node连接数据库配置见代码
  3. 部署代码到服务器,根据前面配置好域名和nginx,可以在浏览器打开 http://hotquery.lbsso.com/ 获取json格式热词列表。

注意:mysql连接有时间限制,当连接超过一定时间没有活动后,会自动关闭该连接,因此需要加上重连机制。另外时区设置为UTC,否则获得的时间有偏差。

客户端app(react native):

  1. 环境准备可以直接参考facebook的文档 react-native ,很详细。主要是ios要确保xcode8以上版本,android确保java8及android 6.0 sdk。
  2. 创建react项目:react-native init AwesomeProject
  3. 运行ios项目:react-native run-ios
  4. 运行android项目:react-native run-android
  5. 获取web接口热词并展现,参见代码
  6. 最终热词列表及点击结果如下:

转自个人博客:http://www.lihonghong.me/app/crawler-to-react/

新闻热词:从爬虫到react native应用的更多相关文章

  1. React Native热更新(iOS)-Pushy

    React Native的出现,使的开发iOS代码出现了更便捷的方式.由于RN是使用脚本语言编写的,实现了"解释执行"的方式,而这种执行方式的修改只需替换脚步即可,不需要重新发布程 ...

  2. React Native开发技术周报1

    (一).资讯 1.React Native 0.21版本发布,最新版本功能特点,修复的Bug可以看一下已翻译 重要:如果升级 Android 项目到这个版本一定要读! 我们简化了 Android 应用 ...

  3. React Native之code-push的热更新(ios android)

    React Native之code-push的热更新(ios android) React Native支持大家用React Native技术开发APP,并打包生成一个APP.在动态更新方面React ...

  4. React Native for Android 热部署图片自己定义方案

    情景 热部署时,我们期望升级包中包括js代码与图片资源. bundle的热部署网上已经有两种方案了,一种是用反射,一种是利用RN自带函数.将bundle初始化时直接放到指定文件夹下,之后通过替换bun ...

  5. react native 热更新

    一.安装codepush服务 npm install code-push-cli -gcode-push -v 二.创建codepush账号 code-push registercode-push l ...

  6. React Native :加载新闻列表

    代码地址如下:http://www.demodashi.com/demo/13212.html 标签与内容页联动 上一节(React Native : 自定义视图)做到了点击标签自动移动,还差跟下面的 ...

  7. 在React Native中集成热更新

    最近,在项目DYTT集成了热更新,简单来说,就是不用重新下载安装包即可达到更新应用的目的,也不算教程吧,这里记录一下. 1.热更新方案 目前网上大概有两个比较广泛的方式,分别是 react-nativ ...

  8. 用CodePush在React Native App中做热更新

    最近在学React Native,学到了CodePush热更新. 老师讲了两种实现的方法,现将其记录一下. 相比较原生开发,使用React Native开发App不仅能节约开发成本,还能做原生开发不能 ...

  9. [RN] React Native 使用 React-native-scrollable-tab-view 实现 类头条 新闻页头部 效果

    React Native 使用 React-native-scrollable-tab-view 实现 类头条 新闻页效果 效果如下: 一.安装依赖 npm install react-native- ...

随机推荐

  1. UE4 custom depth 自定义深度

    用途1: 半透明材质中实现遮挡Mesh自己其他部分的效果. 不遮挡效果如下: 遮挡后效果如下: 实现方法: 深度信息是越远值越大,使用两个Mesh,一个正常渲染,另一个渲染到custom depth ...

  2. 关于nginx中不用.htaccess 用在ningx.conf中配置的问题

    官网一直出现http://4**.**..7/php/index.php/admin/base/getConfigs报错404错误问题, 问题一:URL重写问题(nginx配置问题) 问题二:vue中 ...

  3. 使用Flink的SavePoint功能

    Flink通过SavePoint功能可以做到程序升级后,继续从升级前的那个点开始执行计算,保证数据不中断. Flink中CheckPoint用于保存状态,是自动执行的,SavePoint是指向Chec ...

  4. ios开发 第三天

    1.复合 对象可以引用其它对象,可以利用其它对象提供的特性. 通过包含作为实例变量的对象指针实现的. 2.OC是单一继承 3.继承-重构 4.类实例化对象时,self指向了对象的首地址. 类对象isa ...

  5. xmind2013激活

    参考链接:http://blog.163.com/m15999573195_1/blog/static/248705063201542622112823/

  6. maven依赖问题

    我的一个maven项目A依赖于我的另一个maven项目B,但是maven dependencies中显示的是文件.如下图: 而且项目A部署的时候,部署到tomcat容器的时候也是直接部署的B的编译后的 ...

  7. linkin大话数据结构--Map

    Map 映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value.Map里的key不允许重复.通过key总能找到唯一的value与之对应.Map里的key集存储方式和对应的Se ...

  8. JAVA中正则表达式常用的四个方法

    JAVA中正则表达式处理字符串的四个常用方法:匹配.分割.替换.截取.其跟字符串的常用函数相似,但是使用正则表达式会更简单.更加简洁.下面是具体的例子: public class TestRegex ...

  9. 异常org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 11; 注释中不允许出现字符串 "--"。的原因

    是由于编码格式不统一导致的. 把ecplise的workpace的编码改成utf-8

  10. Css3颜色值RGBA得表示方式

    RGBA(R,G,B,A) 取值 R:红色值.正整数 | 百分数 G:绿色值.正整数 | 百分数 B:蓝色值.正整数 | 百分数 A:Alpha透明度.取值0~1之间. 说明: RGBA记法. 此色彩 ...