其实,本质上和爬虫没区别,只不过这是人家主动给你数据,而且是编排好格式后的数据

按个人主页url更新内容
去重,按照redis去重的方式
按时间保存内容
mysql 保存为时间格式(可以根据时间比较大小,需要把post时间转换为datetime类型存储)
定时更新,可以设置更新时间

从数据库中取前10条最新更新文章,下一页-再取10条展示
按兴趣等级标记文章:不感兴趣-不展示,一般-展示,很感兴趣-收藏,
提供收藏功能,单独展示收藏过的文字

查看关注的人的信息,提供取消关注功能,被取消的不再更新内容
提供历史关注信息?

---这种方式暂时不使用,因为有滑动验证码比较麻烦,不如直接维护关注的人的id
---虽然短时间内频繁登录很麻烦,但隔时间比较久更新还是可以的,比如隔一周后两三天更新一次关注列表

刷新关注列表时,把新增的up的头像url保存
是否更新成功用头像+id来判断,到时候首页展示所关注的up的信息
对于长期来讲就方便多了,不用手动维护一个列表,而只要设置定时任务即可
1.爬虫-登录
2.获取关注的人列表

刷新关注列表时,把新增的up的头像url保存

对于up的信息展示:头像/昵称,都可以点击到个人文章主页

文章:

标题,摘要,链接(唯一标识),post时间,作者引用,

具体实现讨论:

因为要存储,直接写sql太麻烦,考虑用模块

最终是要通过html显示的,所以直接上flask,配合sqlalchemy使用

flask + flask_sqlalchemy

更新-up:根据id判断,头像不进行更新

更新-文章:

是否是新文章:判断文章url

是否更新:判断post时间

数据分为写和读

定时向数据库保存数据,通过请求来获取数据

定时任务:一周登录一次更新关注的up,6h更新一次文章

更新:up以id为主,文章以更新时间为准

登录-关注-昵称/头像url,由昵称获得rss-id,请求获取xml

通过唯一的字段来判断是否是新用户;通过每次的登录来维护用户数据

(暂时不做用户的更新,因为基本都不会变,只做是否存在的判断)

文章:无论是什么时候关注的up,每个文章都有时间标识,最终的显示也是以时间为标准的,所以只要直接添加即可

这样附带的问题:是以时间为主,而不是以自己的关注点为主了,也无法体现出学习线路,可能文章很久了,所以会被显示在很后面,但确实是现在正在接触的东西,对自己来说是‘最新’的

解决:有突出显示两个,一个是关注的up新发布的文章,二是最新关注了那个up,所以如果是新关注的up说明当前的兴趣点在这一方面,所以把这个up的文章时间保存为另一个字段,而原来的文章时间由关注up的时间代替,这样新关注的up的文章就会显示在当前时间点,即使文章比较早了

收藏的整合,一个是博客主体平台上的,一个在rss上的,但这里是收藏时间而不是文章创建时间,所以和个人的关注点在时间顺序上是统一的

up的最终列表中,如果是新关注的,那么增加关注时间,即[1,2,[3,2019-12],4]

在遍历时判断长度,如果为2则将时间取出来代替原来的post_time,原文章发布时间保存为另一个字段

携带时间的问题:初次获取数据与之后的正常更新的区别,数据库初始化时会使得每个up都会携带时间,但并不需要这样做

两种处理方式:1.初始化时都不携带时间信息,额外字段设为空;之后更改代码逻辑,携带时间;

2.post_time保留本来的时间;初始化时都携带时间,设置给额外字段,之后新关注的也是;正常更新的,将额外字段设置为发布时间;之后取数据依照额外字段的时间

3.取数据直接依照入库时间

1需要改代码,不能保持代码的完整性;2会使得初始化文章的显示时间错乱;3与2的问题一致,且后续更新的时间不准确

还是取1,保证post时间的准确性

初始化数据库-cnblog

给文章表增加subscribe_time字段,用来通过这个字段显示文章而不是发布时间

在保存up时,如果是新的则将id保存到redis列表中;保存文章时,先判断up是否在列表中,如果在则pop出来,并将subscribe_time设置为up的create_time,否则不存在,则将subscribe_time设置为post_time

1.安装mysql,redis

创建数据库rss_db,进行数据库迁移

2.chrome

①安装的是chromium

安装chromium,无界面

apt-get install chromium-browser

查看位置

whereis chromium-browser

查看版本

chromium-browser --version

②chromedriver

树莓派中不用手动下载压缩包,直接apt安装即可

安装:

sudo apt-get install chromium-chromedriver

查看安装路径

dpkg -L chromium-chromedriver

selenium的driver对象配置:

不用写chromedriver的路径executable_path
browser = webdriver.Chrome(desired_capabilities=caps,options=chrome_options)

无法import cv2模块的问题:

原因:是由于opencv在linux上的bug导致的

解决:

在~/.bashrc中添加

export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0

参考: http://www.yoyojacky.com/

--------------上面如果可以就不用进行下面的了-------------

报错提示:ImportError: … cannot open shared object file: No such file or directory

问题说明及解决:https://blog.piwheels.org/how-to-work-out-the-missing-dependencies-for-a-python-package/

上面的shared object file都有了后import cv2仍然有问题

报错提示:undefined symbol: __atomic_fetch_add_8

论坛讨论及一些可行方案: https://github.com/piwheels/packages/issues/59

pillow模块安装问题:

报错提示:”The headers or library files could not be found for jpeg”

解决:

sudo apt-get install libjpeg-dev zlib1g-dev
pip install Pillow

树莓派的问题太多,改用debian官方amd64的就没什么问题,selenium正常运行,也不需要其他额外的什么东西

已经在官方系统amd64上跑通了所有东西;树莓派上最致命的是selenium的chrome用不了,又有些东西必须依赖chrome

树莓派安装官方debian:

但amd64和armhf是不同的架构,官方倒是也有armhf的版本,但selenium不能正常使用可能就是arm的问题,这就难办了

还必须得在pc上运行,这样的话得需要一个类似nuc的东西

不在nuc上跑,可以放到云服务器上,对性能没什么要求的情况,费用也较少

-----------------------

1.登录失败的处理(原因:点击登录未出现验证码图片)

递归调用2次,实际会有3次的登录,测试结果:是起作用的

2.增加了user,article的显示信息:共处理的数据数量,更新的数量,删除的数量

3.更新文章后同步其update_time字段;如果是之前关注过但取关了,则同步其create_time/delete字段

4.用户的id才是唯一标识,用户名不是,取消了用户名的unique

5.只要关注一次就当作老用户处理,无论之后是否取关/关注

6.文章的url/post_time不能是联合索引,url相同post_time不同则又会插入数据,但其实为一条数据;取消了联合索引,设置url为unique

7.取关时删除redis中的user_id

# TODO 新关注的展示文章的数量控制

rss订阅的更多相关文章

  1. 做个简单的RSS订阅(ASP.NET Core),节省自己的时间

    0x01 前言 因为每天上下班路上,午休前,都是看看新闻,但是种类繁多,又要自己找感兴趣的,所以肯定会耗费不少时间. 虽说现在有很多软件也可以订阅一些自己喜欢的新闻,要安装到手机,还是挺麻烦的.所以就 ...

  2. Rss 订阅:php动态生成xml格式的rss文件

    Rss 简介: 简易信息聚合(也 叫聚合内容)是一种描述和同步网站内容的格式.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RS ...

  3. 常用RSS订阅地址

    随着Google Reader关门大吉,转战鲜果网了,RSS订阅地址经过几次折腾,丢的没剩几个了,写个文章记录一下吧,随时补充. --PS-- ,微信.微博之类的是社交平台,不能很好的梳理知识,一直用 ...

  4. php的rss订阅

    一般来说我们很少自己造轮子,读取rss还是用git上的开源库吧 https://github.com/dg/rss-php 这个开源库不能读取博客园的rss订阅,新浪微博的格式显示有问题. 博客园的订 ...

  5. 为网站加入Drupal星球制作RSS订阅源

    目前中文 Drupal 星球的版块还未成立,但大家的积极性挺高,不少站长都已经调整好自己的网站,生成了可供Drupal Planet 使用的RSS订阅源. 如果你也想让网站做好准备,可以不必再花上不少 ...

  6. rome实现rss订阅与发布

    1. 什么是RSS RSS也叫聚合RSS,是在线共享内容的一种简易方式(也叫聚合内容, 简易供稿,Really Simple Syndication(真正简单的聚合 )).通常在时效性比较强的内容上使 ...

  7. Web版RSS阅读器(三)——解析在线Rss订阅

    上篇博客<Web版RSS阅读器(二)——使用dTree树形加载rss订阅分组列表>已经写到读取rss订阅列表了,今天就说一下,当获取一条在线rss订阅的信息,怎么去解析它,从而获取文章或资 ...

  8. Web版RSS阅读器(二)——使用dTree树形加载rss订阅分组列表

    在上一边博客<Web版RSS阅读器(一)——dom4j读取xml(opml)文件>中已经讲过如何读取rss订阅文件了.这次就把订阅的文件读取到页面上,使用树形结构进行加载显示. 不打算使用 ...

  9. .Net开发者必知的技术类RSS订阅指南

    目录 RSS订阅资源 .Net基金会 MSDN中文版 杂志 微软 Github 系列 微软DevBlog系列 InfoQ中文版系列 如何找到大佬的 Twitter/Youtube/Stackoverf ...

  10. 如何用RSS订阅?

    本文由云+社区发表 摘要:我们常常会有订阅别人文章的需求,有更新的时候希望能有提醒的功能,RSS就是这样一个订阅的方式.很多网站上看到RSS的入口,点进去以后总是显示一堆的XML代码,我们来看看怎么使 ...

随机推荐

  1. flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证

    flask路由中的endpoint 与自定义转化器 ''' endpoint主要用于 反向解析, 例如:login函数中配的路由是/login,其中endpoint='lg' 则在其他函数,可以用 u ...

  2. 记MacOs视频mov与mp4格式转换问题解决

    综述 记录了mov转mp4格式的方法 记录了自己是多蠢 问题背景 这学期选修的<工程英语视听说>课,需要提交一段口语考试视频,于是乎: 带着我的大疆Mavic Mini 和iPad Pro ...

  3. Linux 部署 rabbitMQ集群

    1. 部署Erlang 1.1 RabbitMQ依赖于Erlang,版本对应请查看 https://www.rabbitmq.com/which-erlang.html 1.2 下载安装Erlang ...

  4. Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之九 || 依赖注入IoC学习 + AOP界面编程初探

    本文梯子 本文3.0版本文章 更新 代码已上传Github+Gitee,文末有地址 零.今天完成的绿色部分 一.依赖注入的理解和思考 二.常见的IoC框架有哪些 1.Autofac+原生 2.三种注入 ...

  5. python基础(6):基本数据类型一(int、bool、str)

    1. 基本数据类型 1. int ==> 整数,主要⽤来进⾏数学运算 2. str ==> 字符串,可以保存少量数据并进⾏相应的操作 3. bool==>判断真假,True,Fals ...

  6. Jquery补充及插件

    此篇为jQuery补充的一些知识点,详细资料请看另一篇博客,地址:https://www.cnblogs.com/chenyanbin/p/10454503.html 一.jQuery中提供的两个函数 ...

  7. SpringBoot(一):构建第一个SpringBoot工程

    1.项目格式如下: 1.启动类: package com.monkey01.springbootstart; import org.springframework.boot.SpringApplica ...

  8. Docker基础概念与安装

    Docker是什么? Docker最初是dotCloud公司的创始人Solomon Hyks在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于2013年3月以 ...

  9. JS基础语法---分支语句之:if语句,if-else语句,if-ever if语句

    //if语句只有一个分支 //if-else语句有两个分支,最终执行一个分支 //if-else if-else if-else if-else if..........else---多分支,最终也是 ...

  10. Java 包的使用

    Java 包 Java面向对象的核心的概念:类.接口.抽象类.对象:[主体] 包的定义: 指的是一个程序的目录,在最早的时候,如果要开发一个程序,只需要定义一个Java文件,而后在这个文件中编写所需要 ...