“青柠日报”小程序
一个可以每日发送昨天热搜数据的小程序。
最初的想法主要是想解决自己不喜欢刷微博却又不想错过一些当前热门事件的需求。最终,写了一个一两百行代码的程序和一个邮件模板 Html 文件解决了这个的需求。本文主要记录解决这个问题的流程及思考。
实现这个 idea,前提是能搞到微博等平台的热搜数据。这个其实早就已经解决了,在我的服务器上每天都有程序在会采集微博、抖音和头条的热搜榜单数据。所以,本文并不讲述如何爬取热搜数据。(这可是我这个应用唯一有门槛的部分了)
设计 Logo
当数据准备妥当后,开始着手设计 Logo。没有艺术细胞的我,只得走极简路线。鼓捣半天,做出来一个头图。
设计邮件模版
同样是极简风格的路线。
编写词云程序
虽然有现成的库可以生成词云,但是为了样式美观,还是测试了好几种字体以及词云样式。最终决定用微软雅黑字体和词云的默认配置。词云内容来自微博、抖音和头条的热搜关键词。
生成图片后,需要考虑将图片存储到七牛云还是存到自己服务器上的对象存储服务。最终,经过决定将图片编码为 Base64 格式放到模板里。在这个场景中,这种方式最为稳定可靠。
测试邮箱
申请邮箱,编写邮件发送模块。经过测试,邮件模板正常显示。
选择模版引擎
之前使用 Django 时,都是使用框架自带的模板引擎。经过调研发现有两款模版渲染引擎比较靠谱,一个是 mako ,另一个就是 Jinja2。对比后,感觉Jinja2更好用一些。 然后,以 Jinja2 支持的语法来编辑邮件模板。
编写主程序
经过上述准备,开始编写主程序。最初只打算写自己用的小程序,但是一向乐于分享的我考虑到可能有和我有同样需求的同学,所以在设计上对于以后扩展留有余地。单独准备了一张用户表用户存储用户的一些个性化配置数据,前端界面开发的进度视用户数量情况而定。
效果展示
订阅方式
目前仅支持使用【接收邮箱】发送【昵称】、【微博热搜数据数量】(非必填,默认25条)到 i@qingning99.cn ,取消订阅也需要发送邮件告知管理员。
原文链接:https://www.changxuan.top/?p=1032
- 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件
- BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
- UVa 10341 - Solve It【经典二分,单调性求解】
- UVa 11461 - Square Numbers【数学,暴力】
- BZOJ 3097: Hash Killer I【构造题,思维题】
- Python Selenium设计模式-POM
- BZOJ 1207: [HNOI2004]打鼹鼠【妥妥的n^2爆搜,dp】
- HDU 1711 Number Sequence(KMP裸题,板子题,有坑点)
- BZOJ 2222: [Cqoi2006]猜数游戏【神奇的做法,傻逼题,猜结论】
- BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】
- 洛谷 P1019 单词接龙【经典DFS,温习搜索】
- MVCforum 支持多国语言
- BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
- BZOJ 1303: [CQOI2009]中位数图【前缀和】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 听说你还不知道Promise的allSettled()和all()的区别?
- React 条件渲染最佳实践(7 种方法)
- 一文带你层层解锁「文件下载」的奥秘
- Android实现简单C/S聊天室应用
- Android仿IOS回弹效果 支持任何控件
- 送你一道字节前端原题(Add sumOf)|文末送红宝书
- xadmin使用formfield_for_dbfield函数过滤下拉表单实例
- Python3之外部文件调用Django程序操作model等文件实现方式
- python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
- 前端多线程大文件下载实践,提速10倍(拿捏百度云盘)
- docker 中的mysql 经常重启优化
- python MultipartEncoder传输zip文件实例
- 当Flutter遇到节流与防抖的思路和流程优化
- 花样使用Handler与源码分析
- 几个你不知道的Git小命令,却收获快乐。