这是我第一次写Python哟,写得不好请多多指教:P
前言
==
前段时间在掘金社区写文章,得了一台 树莓派3B ,加上之前在闲鱼曾经淘到一块 1280x400 的长条屏,就想着把一直想要的哔哩哔哩UP主助手给完成了。
先上效果
有弹幕的时候是这样的
为什么两张截图的显示器不一样呢?哎,说起来都是眼泪,那天晚上我直播写这个代码写到凌晨2点,代码写完我准备把树莓派和显示屏都塞到一个纸盒子里,这个过程中不知道损坏了哪里,屏幕点不亮了...
不过好在树莓派没问题,闲话不多说,先来看看我对于框架选型的思考
框架选型
====
为什么最后会选用 Python 这个我并不会的语言呢?因为最终是希望这个程序运行在树莓派上,所以首先调研了几种在树莓派上搭建 GUI界面 的方式。
-
PyQt(python)
-
Pygame(python)
-
Electron(javascript)
-
Flutter(dart)
虽然我对3、4更加熟悉,但毕竟树莓派的性能有限,我只好弃用。1我不熟,但是在我的规划里,我并不需要一些标准化的UI组件。所以最终选择了 pygame 的框架,并且树莓派系统里也默认安装了 pygame 环境,虽从未写过 python ,但对 python 的大名如雷贯耳,早就想学习一下,正好拿这个项目练练手
功能点
===
-
显示日期时间
-
显示树莓派当前局域网IP
-
显示当前UP主粉丝数
-
显示B站未读消息
-
显示B站视频总计播放数
-
显示视频总计获赞数
-
显示总计获得充电次数
-
显示直播间人气值
-
显示直播间弹幕
-
将直播间弹幕念出来(TTS)
功能是不是还挺丰富的,从写第一行代码到完成也就花了两天不到的时间,这也证明了使用 python 开发的高效率,下面来说说这些功能开发中我遇到了哪些问题,我又是如何解决的。
pygame框架
========
pygame官网: https://www. pygame.org/
pygame 是python环境下最流行的游戏开发框架,当我不需要那些常见的UI组件时,使用游戏框架来开发反而更简单。
安装pygame
pip install pygame
框架基础使用示例
引入pygame和sys
import pygame,sys
定义一个run_game函数,把初始化的逻辑都放里面
def run_game():
初始化pygame引擎
pygame.init()
设置pygame窗口大小,如果设置为0,0则自动识别分辨率,相当于窗口最大化
screen = pygame.display.set_mode((600,400))
无限循环,游戏的主循环
while True:
监听消息
for event in pygame.event.get():
当监听到pygame的退出时,触发sys.exit退出应用
if event.type == pygame.QUIT:
sys.exit()
清空屏幕
screen.fill(BG_COLOR)
游戏绘制的主逻辑放这里
刷新屏幕
pygame.display.update()
执行run_game函数
run_game()
python对于新程序员可能挺友好的,不会对代码的编写有过多先入为主的观念。但对于已经有其他语言开发经验的我来说,也花了好一阵子才适应它的语法。
pygame加载字体显示文字
==============
220是字号
my_font = pygame.font.Font("./路径/字体.ttf", 220)
my_font.render(文字内容,是否抗锯齿,文字颜色,文字背景色)
text_element = my_font.render("文字内容", 1, (255,255,255))
计算文本渲染后的宽度高度
text_width, text_height = my_font.size("文字内容")
将文本元素绘制到屏幕指定坐标(元素左上角为原点)
screen.blit(text_element, (100,100)
python获取日期时间
============
import time
def getTime():
获取系统本地时间
localtime = time.localtime()
将本地时间格式化为年月日
date_str = time.strftime("%Y 年 %m 月 %d 日", localtime)
将本地时间格式化为24小时制
hm_str = time.strftime("%H:%M", localtime)
将本地时间格式化获取秒
second_str = time.strftime("%S", localtime)
在pygame的主循环中调用getTime,并将时间文本绘制到屏幕上,一个小时钟就做好了。
显示树莓派当前局域网IP
============
为什么要显示当前IP呢,因为大部分时候我不会给树莓派连接鼠标键盘,那显示IP后就可以直接通过VNC或者SSH来连接树莓派了。
网上有Python获取局域网IP的方案。这个是我用下来的最佳方案:p
import socket
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
显示B站各类数据
========
这里最主要就是去抓取B站的各种API接口,这里也有热心网友整理好的一份野生API文档,大家可以自行查看使用自己需要的。
https:// github.com/SocialSister Yi/bilibili-API-collect
这些B站的API中有一些是需要身份认证的,这就需要我们自己去chrome浏览器中提取,主要会用到两个cookie字段
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
(4)200多本电子书
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
(5)Python知识点汇总
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
(6)其他资料
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。
这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。