打造一个干净且个性化的公众号阅读环境
背景
假设你关注的公众号有十来个,若一个公众号两周接一次广告,理论上你会面临二十多次广告,实际上会更多,运气不好的话一天刷下来都是广告也不一定。若你关注了二三十个公众号,那很难避免现阶段公众号环境的广告轰炸。
我收集了一百多篇微信广告文章,提取关键字做了个云图,大家可以看看里面的关键字感受一下:
可以看到大部分的广告,无不是贩卖焦虑,营造消极气氛,实在无法忍受且严重影响我的心情。但有些公众号写的文章又确实不错,那怎么做可以不看广告只看文章呢?
于是我产生了一个想法,为什么不构建一个多源(公众号、RSS)、干净、个性化的阅读环境呢?这个阅读环境满足以下三个核心要求:
去广告!
考虑到以公众号为主,阅读环境还是在微信生态里面,可以基于企业微信号做文章分发
多源,除了微信公众号,还可以定订阅其他市面上优质内容源
最终效果大家可以先感受一下:
如果诸位觉得有用,请继续阅读。
思路
至此,已经可以大概看到这个项目的面貌了,接下来要做的就是怎么实现一个满足上述要求的项目。
我的思路很简单,大概流程如下:
简单解释一下:
采集器:监控各自关注的公众号或者博客源,最终构建
Feed
流作为输入源;分类器(广告):基于历史广告数据,利用机器学习实现一个广告分类器(可自定义规则),然后给每篇文章自动打上标签再持久化到
MongoDB
;分发器:依靠接口层进行数据请求&响应,为使用者提供个性化配置,然后根据配置自动进行分发,将干净的文章流向微信、钉钉、TG 甚至自建网站都行。
这样做就实现了干净阅读环境的构建,衍生一下,还可以实现个人知识库的构建,可以做诸如标签管理、图谱构建等,这些都可以在接口层进行实现。
开发
其实有了思路,只要有一定的编程基础,接下来的事情就很清晰了,我在这里不详细说开发过程以及代码怎么写,因为我都开源出来了哈。
项目我取名为2C[1],含义是Claen & Customize Content
,真正的开发时间前后大概花了我两周的业余时间,所以还是付出了我的一些心血,如果大家觉得不错,来个 Star 呗 ❤️。
这个项目最大的阻力就是广告样本的收集,这也决定2C
项目的效果,所以我非常欢迎且期待大家参与进来,提交广告样本,具体请看Issue_更多的广告样本[2]。
使用
接下来重点说说怎么使用2C
,此项目对于一些基础环境是有一点要求的,为了尽可能减少开发者部署使用的复杂度(特别是非 Python 开发者),因此我计划使用Docker
进行调度运行,这样对用户的使用来说是比较方便的,请按照顺序执行以下TODO
:
安装
Docker
:推荐直接使用Docker 极速下载[3]安装
MongoDB
:用于持久化,可手动或使用镜像安装下载
2C
配置
2C
运行
2C
MongoDB
2C
的存储部分依赖MongoDB
,如果你已经部署好了MongoDB
,直接在配置里面进行数据库配置即可。
如果你没有准备好的MongoDB
,可以使用Docker
一键执行:
# 数据库路径,开发者可自由设置
mkdir -p /data/db
docker run --name mongodb --restart=always -p 27017:27017 -e /data/db:/data/db -d mongo:3.6
可在Docker
查询是否成功启动:
[root@centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
758617a57827 mongo:3.6 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:27017->27017/tcp mongodb
下载 2C
安装2C
前,需要你的系统环境安装有Python3.6+[4]环境。如果确认准备好环境,请进入终端,做环境检查,如下命令:
[~] python --version
Python 3.6.8 :: Anaconda, Inc.
[~] pip --version
pip 21.1.1 from /Users/howie6879/.local/share/virtualenvs/2c-BCq66QuF/lib/python3.6/site-packages/pip (python 3.6)
本项目使用 pipenv[5] 进行项目管理,安装使用过程如下:
# 确保有Python3.6+环境
git clone https://github.com/howie6879/2c.git
cd 2c# 创建基础环境
pipenv install --python={your_python3.6+_path} --skip-lock --dev
搭建好基础环境后,就需要对项目进行配置,具体参考如下2C 配置部分。
配置 2C
项目的配置文件位于路径src/config/config.py
下,使用者可以进行以下配置:
配置需要订阅的公众号
数据库
分发器类型配置:支持企业微信和钉钉
公众号配置
输入你订阅的公众号名称即可:
WECHAT_LIST = ["老胡的储物柜",
]
数据库配置
如果是本机开发,使用上述方法搭建的MongoDB
,保持不变即可:
# 数据库配置
MONGODB_CONFIG = {# "mongodb://0.0.0.0:27017""username": os.getenv("CC_M_USER", ""),"password": os.getenv("CC_M_PASS", ""),"host": os.getenv("CC_M_HOST", "0.0.0.0"),"port": int(os.getenv("CC_M_PORT", "27017")),"db": os.getenv("CC_M_DB", "2c"),
}
分发器配置
目前分发器支持类型如下:
ding:钉钉
wecom:企业微信
钉钉
建立一个群聊用于接收文章消息,然后新增一个群机器人,如下图:
然后配置机器人:
最后记住机器人对应的Token
,一般格式如下:1dea61224e683d90c5d3694c89e30841681567747f41fb9722597d48655f4365
,那么此时分发器配置如下:
# 分发配置,目标支持:ding[钉钉]、wecom[企业微信]、tg[Telegram] 等等
# 目前仅支持钉钉
SENDER_LIST = ["ding"]
# 申请钉钉TOKEN时候,关键字必须带有 [2c]
DD_TOKEN = os.getenv('CC_D_TOKEN', '1dea61224e683d90c5d3694c89e30841681567747f41fb9722597d48655f4365')
企业微信
如果你热衷微信生态,2C
同样对企业微信做了支持,请先随便用手机号注册一个企业微信[6]。
首先创造应用:
获取相关 ID:
企业 ID 在我的企业->企业信息->企业ID
。
为了方便可以在微信上接收消息,记得开启微信插件,进入下图所在位置,然扫码关注你的二维码即可:
现在你获取了以下三个参数,请填写到对应配置:
WECOM_ID = os.getenv("CC_WECOM_ID", "wwee29721ad4f6e1c9")
WECOM_AGENT_ID = os.getenv("CC_WECOM_AGENT_ID", "1000001")
WECOM_SECRET = os.getenv("CC_WECOM_SECRET", "O4M9w38wuwAxCMr0O3lTqAgzLC7yxjsDGr6lgv12345"
)
关于配置,除了可以直接在代码中的配置文件中进行,更建议直接在.env
中进行配置,具体说明请参考环境变量文件。
运行 2C
配置完成后,直接在终端运行即可:
pipenv run dev
不出意外,会得到以下输出:
[2c] pipenv run python src/run.py
Loading .env environment variables…
[2021:04:11 22:08:50] INFO Request <GET: https://wechat.privacyhide.com/VERSION?>
[2021:04:11 22:08:52] INFO Ruia Spider started!
[2021:04:11 22:08:52] INFO Ruia Worker started: 140195525068320
[2021:04:11 22:08:52] INFO Ruia Worker started: 140195525068728
[2021:04:11 22:08:52] INFO Request <GET: https://cdn.jsdelivr.net/gh/hellodword/wechat-feeds@4153bf9/details.json>
[2021:04:11 22:12:45] INFO Ruia Stopping spider: Ruia
[2021:04:11 22:12:45] INFO Ruia Total requests: 1
[2021:04:11 22:12:45] INFO Ruia Time usage: 0:03:53.628657
[2021:04:11 22:12:45] INFO Ruia Spider finished!
[2021:04:11 22:12:45] INFO 2c Schedule started successfully :)
[2021:04:11 22:12:45] INFO 2c Schedule time:07:1011:1016:1020:1023:10
这样就成功启动了,钉钉分发效果如下(微信分发效果在文首):
说明
这里声明一点,看广告是对作者的支持,这样一定程度上可以促进作者更好地产出。但我看到喜欢的会直接打赏支持,所以搭便车的言论在我这里站不住脚,谢谢。
看到这里,说明这篇文章以及2C
项目你是感兴趣的,非常期待你使用2C
,让你有更好的阅读体验,如果能参与进来,一起收集样本,贡献项目,那更是欢迎至极。
有任何问题,留言或者加我微信都行,看到就会解答。创作不易,如果觉得不错,欢迎转发点好看:),谢谢。
参考资料
[1]
2C: https://github.com/howie6879/2c
[2]
Issue_更多的广告样本: https://github.com/howie6879/2c/issues/4
[3]
安装Docker
:推荐直接使用[Docker 极速下载: https://get.daocloud.io/
[4]
Python3.6+: https://www.python.org/
[5]
pipenv: https://pipenv.pypa.io/en/latest/
[6]
企业微信: https://work.weixin.qq.com/
打造一个干净且个性化的公众号阅读环境相关推荐
- php模拟微信公众号服务器,GitHub - Lin07ux/wechat-third-server: 使用 ThinkPHP、Vue 搭建一个带有后台的微信公众号第三方服务器的基础模板...
微信公众号第三方服务器 该项目用于实现一个最基本的微信公众号第三方服务器开发的模板. 基于: ThinkPHP v3.2.3 Vue v2.2.0 Vue-resource v1.0.3 功能 微信用 ...
- 微信公众号服务器页面模板,GitHub - devsnippet/wechat-third-server: 使用 ThinkPHP、Vue 搭建一个带有后台的微信公众号第三方服务器的基础模板...
微信公众号第三方服务器 该项目用于实现一个最基本的微信公众号第三方服务器开发的模板. 基于: ThinkPHP v3.2.3 Vue v2.2.0 Vue-resource v1.0.3 功能 微信用 ...
- 如何提升公众号的阅读量?提高公众号阅读量的方法介绍
如何提升公众号的阅读量?公众号阅读量太低怎么办?想要做好公众号运营公众号的曝光率必须高,没有阅读量自然就没有曝光,那么如何提高微信公众号的阅读量呢?下面就一起来学习一下吧. 01文章排版要优化 不要觉 ...
- 如何利用Excel对公众号阅读量进行预测?
刚开始写文章的朋友们估计都会很关注自己文章的阅读量,毕竟辛辛苦苦码出来的字还是希望更多的人看到.我记得我刚开始写文章的时候,在文章发出去以后隔一会就会去公众号后台看一下阅读量,隔一会看一次,不知道有多 ...
- 微信公众号本地环境搭建(解决微信接口需要公网地址,但是只有本地环境的问题)
微信公众号本地环境搭建(解决微信接口需要公网地址,但是只有本地环境的问题) 置顶2018年01月08日 17:22:13 阅读数:342 目前移动开发处于比较火的的趋势,很多的开发者都跃跃欲试,目前移 ...
- 这样查找热点新闻素材,3招帮你提升公众号阅读量
这样查找热点新闻素材,3招帮你提升公众号阅读量!想要做好微信公众号可不容易,之前微信公众号甚至连进入公共流量池的推送机会都没有,只面向于自己的粉丝.现在公众号出现了推荐阅读机制,想要提升阅读量,就一定 ...
- 某个个人公众号阅读量和点赞数分析
某个个人公众号阅读量和点赞数分析 15335055 数据科学与计算机学院 目录 某个个人公众号阅读量和点赞数分析 分析公众号阅读量和点赞数的原因 该公众号阅读量和点赞数的分析 结论 1.分析公众号阅读 ...
- 如何做一个能赚钱的技术公众号?
晓衡上周去了趟苏州,有幸参考技术圈公众号主的聚会.回来后,有朋友问我有些什么收获,这此收获最大在于了解到了关于技术公众号是如何赚钱的逻辑.而且我也发现社区有越来越多的发者,开始尝试在公众号上发自己的技 ...
- 宏基因组公众号创立初衷及如何注册一个名字好记的公众号
我为什么注册公众号? 分享知识! 做技术的人一定会有这样的经历:经常会碰到很多技术问题,最快的方法是在百度上搜索问题的描述,找到各类博客.论坛上中文的解决方法:其次是请教身边有经验的大牛,直接一两句话 ...
最新文章
- Blender 3D插图插画设计视频教程 Fantastic 3D illustration with Blender
- Java三大特性: 封装、继承、多态
- java list 遍历 删除元素_java中List遍历删除元素相关做法和注意事项
- 程序设计原则——优化程序
- 在word中,整篇文章想要在每一章另起一页
- 守住你自己的“沉香”
- 局域网技术与组网工程实训
- matlab imagesc clims,imagesc
- 为什么数据可视化很重要
- django 业务代码写哪儿_测试人员快速上手Django指南
- python socks代理 命令行_python socks5 代理无法使用
- Unity Shader学习记录第一章
- Docker部署应用案例
- 技术人员应该具备的几项基本技能
- 终于解决win7下部分软件乱码的问题
- 基于FPGA的花样流水灯
- 嵌入式计算机系统简述,嵌入式系统定义_简述嵌入式系统的定义和组成
- element plus中的el-link如何去掉下划线
- 好书推荐——《Modbus软件开发实战》
- LeetCode-Revers_Bits
热门文章
- 迷惑操作,Win10 上线了一款“摸鱼”App
- 狼人杀 java_狼人杀背后的秘密,实时语音你不知道的那些事
- 去泰国不能错过的11件事|新世界资讯报道
- 开闭原则与里氏替换原则
- kinit: Included profile directory could not be read while initializing Kerberos 5 library
- 华硕飞行堡垒耳机插进去之后再拔出来,电脑就没有声音了
- 【论文译文】GLOW
- 信息系统项目管理师2021年上半年下午案例分析题及答案
- (ElasticSearch)关于term搜索不到指定数据的问题
- 2017年个人总结-程序员的中年焦虑症