2021-12-19 14:17:38 [显示全部楼层]
376浏览
查看: 376|回复: 3

Mind+Python bilibili播放次数提醒灯

[复制链接]
本帖最后由 云天 于 2021-12-19 14:21 编辑

IMG_20211219_135747.jpg

【项目背景】
最近在论坛发了一个“光传声”小实验的帖子,视频上传到bilibili上,没想到播放量几日便接近20W。近几日又上传了几个视频,播放量就不行了,但我还是挺关注的,但也不能一直关注着。所以想通过灯光提醒,小屏幕显示播放次数有变化。
【项目设计】
在Mind+Python模式中,使用BeautifulSoup库对网页数据进行抓取分析,提取出播放量。再通过Pinpong库,让Arduino控制LED灯带及OLED屏。 SunDecember-202112197651..png

【程序设计】
  1. from bs4 import BeautifulSoup
  2. import re
  3. import requests
  4. import time
  5. from pinpong.board import Board,NeoPixel,Pin
  6. from pinpong.libs.dfrobot_ssd1306 import SSD1306_I2C #导入ssd1306库
  7. Board("uno").begin()               #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别
  8. oled=SSD1306_I2C(width=128, height=64) #初始化屏幕,传入屏幕像素点数
  9. NEOPIXEL_PIN = Pin(Pin.D2)
  10. PIXELS_NUM = 60 #灯数
  11. np = NeoPixel(NEOPIXEL_PIN,PIXELS_NUM)
  12. html='https://www.bilibili.com/video/BV1Wb4y1q7ZU'
  13. tem_num=0
  14. np.clear()
  15. oled.fill(0) #全部填充熄灭,清屏
  16. oled.show() #显示生效
  17. while(1):
  18.   res = requests.get(html)
  19.   res.encoding = 'utf-8'
  20.   bs = BeautifulSoup(res.text,"html.parser")
  21.   pl_list=bs.find_all(id=re.compile("viewbox_report"))  #寻找id="viewbox_report"  
  22.   bs2 = BeautifulSoup(str(pl_list),"html.parser")#寻找浏览个数所在“span”
  23.   view=bs2.find('span', class_='view')
  24.   view=str(view)
  25.   view=view.replace("播放","")
  26.   view=view.replace("·","")
  27.   
  28.   bs2 = BeautifulSoup(view,"html.parser")
  29.   data=int(bs2.span.text)
  30.   
  31.   if tem_num==0:#判断浏览量是否有增加
  32.      tem_num=data
  33.   if data>tem_num:   
  34.       tem_num=data
  35.       #因暂时编译有错误,不显示中文,暂时用以下英文“点赞”代替
  36.       oled.text("Look it",8,8)
  37.       oled.text(data,8,20) #指定位置显示文字,
  38.       oled.show()  #显示生效
  39.       np.rainbow(0,60,0,0x0000FF)
  40.    
  41.       time.sleep(3)
  42.       oled.fill(0) #全部填充熄灭,清屏
  43.       oled.show() #显示生效
  44.       np.clear()
  45.   else:
  46.     time.sleep(10)   
复制代码


使用的bilibili页面是:https://www.bilibili.com/video/BV1Wb4y1q7ZU,有人点击播放,就有灯光和显示提示。
【效果图】

IMG_20211219_135745.jpg


IMG_20211219_135729.jpg


【演示视频】


【Dfrobot浏览量提醒】
我一开始是做的“Dfrobot浏览量提醒”,但论坛存在“增加浏览量”的问题,之前我反应过,但到现在还没有处理好。通过以下程序,并不能实现以上功能,因为程序循环一次,页面浏览量就增加1次(作弊)。
代码放在下面:

from bs4 import BeautifulSoup
import re
import requests
import time
from pinpong.board import Board,NeoPixel,Pin
from pinpong.libs.dfrobot_ssd1306 import SSD1306_I2C #导入ssd1306库
Board("uno").begin()               #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别

oled=SSD1306_I2C(width=128, height=64) #初始化屏幕,传入屏幕像素点数
NEOPIXEL_PIN = Pin(Pin.D2)
PIXELS_NUM = 7 #灯数

np = NeoPixel(NEOPIXEL_PIN,PIXELS_NUM)
html='https://mc.dfrobot.com.cn/thread-311681-1-1.html'

tem_num=0
np.clear()
oled.fill(0) #全部填充熄灭,清屏
oled.show() #显示生效
while(1):
  res = requests.get(html)
  res.encoding = 'utf-8'
  bs = BeautifulSoup(res.text,"html.parser")
  pl_list=bs.find_all(id=re.compile("recommendv_add"))#寻找id="recommendv_add"
  
  bs2 = BeautifulSoup(str(pl_list[1]),"html.parser")#寻找浏览个数所在“span”
  data=bs2.span.text.strip("浏览")#去除“浏览”
  print(pl_list)
  
  if tem_num==0:#判断浏览量是否有增加
     tem_num=data
  if data>tem_num:   
      tem_num=data
      #因暂时编译有错误,不显示中文,暂时用以下英文“点赞”代替
      oled.text("Look it",8,8)
      oled.text(data,8,20) #指定位置显示文字,
      oled.show()  #显示生效
      for j in range(60):#60灯亮红
          np[j]=(255,0,0)
   
      time.sleep(3)
      oled.fill(0) #全部填充熄灭,清屏
      oled.show() #显示生效
      np.clear()
  else:
    time.sleep(10)




pATAq  版主

发表于 2021-12-19 17:11:45

这个好玩~
回复

使用道具 举报

CPJ  学徒

发表于 2021-12-27 20:22:19

强哇强哇(๑•̀ㅂ•́)و✧
回复

使用道具 举报

木子呢  NPC

发表于 2022-1-7 10:44:25

这个有趣欸,云天老师真是抓住了生活里好多细节~太赞了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail