最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)B站UP主小助手詳解開發(fā)流程

 更新時間:2022年02月17日 16:06:09   作者:落伍的碼農(nóng)  
功能是不是還挺豐富的,從寫第一行代碼到完成也就花了兩天不到的時間,這也證明了使用python開發(fā)的高效率,下面來說說這些功能開發(fā)中我遇到了哪些問題,我又是如何解決的

功能點(diǎn)

  • 顯示日期時間
  • 顯示樹莓派當(dāng)前局域網(wǎng)IP
  • 顯示當(dāng)前UP主粉絲數(shù)
  • 顯示B站未讀消息
  • 顯示B站視頻總計播放數(shù)
  • 顯示視頻總計獲贊數(shù)
  • 顯示總計獲得充電次數(shù)
  • 顯示直播間人氣值
  • 顯示直播間彈幕
  • 將直播間彈幕念出來(TTS)

大家好,我是 大帥 ,一個 老 程序 猿 。

這是我第一次寫Python喲,寫得不好請多多指教

前言

前段時間在掘金社區(qū)寫文章,得了一臺 樹莓派3B ,加上之前在閑魚曾經(jīng)淘到一塊 1280x400 的長條屏,就想著把一直想要的嗶哩嗶哩UP主助手給完成了。

先上效果

有彈幕的時候是這樣的

為什么兩張截圖的顯示器不一樣呢?哎,說起來都是眼淚,那天晚上我直播寫這個代碼寫到凌晨2點(diǎn),代碼寫完我準(zhǔn)備把樹莓派和顯示屏都塞到一個紙盒子里,這個過程中不知道損壞了哪里,屏幕點(diǎn)不亮了...

不過好在樹莓派沒問題,閑話不多說,先來看看我對于框架選型的思考

框架選型

為什么最后會選用 Python 這個我并不會的語言呢?因為最終是希望這個程序運(yùn)行在樹莓派上,所以首先調(diào)研了幾種在樹莓派上搭建 GUI界面 的方式。

  • PyQt(python)
  • Pygame(python)
  • Electron(javascript)
  • Flutter(dart)

雖然我對3、4更加熟悉,但畢竟樹莓派的性能有限,我只好棄用。1我不熟,但是在我的規(guī)劃里,我并不需要一些標(biāo)準(zhǔn)化的UI組件。所以最終選擇了 pygame 的框架,并且樹莓派系統(tǒng)里也默認(rèn)安裝了 pygame 環(huán)境,雖從未寫過 python ,但對 python 的大名如雷貫耳,早就想學(xué)習(xí)一下,正好拿這個項目練練手

功能點(diǎn)

  • 顯示日期時間
  • 顯示樹莓派當(dāng)前局域網(wǎng)IP
  • 顯示當(dāng)前UP主粉絲數(shù)
  • 顯示B站未讀消息
  • 顯示B站視頻總計播放數(shù)
  • 顯示視頻總計獲贊數(shù)
  • 顯示總計獲得充電次數(shù)
  • 顯示直播間人氣值
  • 顯示直播間彈幕
  • 將直播間彈幕念出來(TTS)

功能是不是還挺豐富的,從寫第一行代碼到完成也就花了兩天不到的時間,這也證明了使用 python 開發(fā)的高效率,下面來說說這些功能開發(fā)中我遇到了哪些問題,我又是如何解決的。

pygame框架

pygame官網(wǎng): https://www.pygame.org/

pygame 是python環(huán)境下最流行的游戲開發(fā)框架,當(dāng)我不需要那些常見的UI組件時,使用游戲框架來開發(fā)反而更簡單。

# 安裝pygame
pip install pygame

框架基礎(chǔ)使用示例

# 引入pygame和sys
import pygame,sys 
 
# 定義一個run_game函數(shù),把初始化的邏輯都放里面
def run_game():
 # 初始化pygame引擎
 pygame.init()
 # 設(shè)置pygame窗口大小,如果設(shè)置為0,0則自動識別分辨率,相當(dāng)于窗口最大化
 screen = pygame.display.set_mode((600,400))
 
 # 無限循環(huán),游戲的主循環(huán)
 while True:
  # 監(jiān)聽消息
  for event in pygame.event.get(): 
   # 當(dāng)監(jiān)聽到pygame的退出時,觸發(fā)sys.exit退出應(yīng)用
   if event.type == pygame.QUIT:
    sys.exit()
  # 清空屏幕
  screen.fill(BG_COLOR)
  
  # 游戲繪制的主邏輯放這里
  
  # 刷新屏幕
  pygame.display.update() 
 
# 執(zhí)行run_game函數(shù)
run_game()

python對于新程序員可能挺友好的,不會對代碼的編寫有過多先入為主的觀念。但對于已經(jīng)有其他語言開發(fā)經(jīng)驗的我來說,也花了好一陣子才適應(yīng)它的語法。

pygame加載字體顯示文字

# 220是字號
my_font = pygame.font.Font("./路徑/字體.ttf", 220)
 
# my_font.render(文字內(nèi)容,是否抗鋸齒,文字顏色,文字背景色)
text_element = my_font.render("文字內(nèi)容", 1, (255,255,255))
 
# 計算文本渲染后的寬度高度
text_width, text_height = my_font.size("文字內(nèi)容")
 
# 將文本元素繪制到屏幕指定坐標(biāo)(元素左上角為原點(diǎn))
screen.blit(text_element, (100,100)

python獲取日期時間

import time
 
def getTime():
 # 獲取系統(tǒng)本地時間
 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的主循環(huán)中調(diào)用getTime,并將時間文本繪制到屏幕上,一個小時鐘就做好了。

顯示樹莓派當(dāng)前局域網(wǎng)IP

為什么要顯示當(dāng)前IP呢,因為大部分時候我不會給樹莓派連接鼠標(biāo)鍵盤,那顯示IP后就可以直接通過VNC或者SSH來連接樹莓派了。

網(wǎng)上有Python獲取局域網(wǎng)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站各類數(shù)據(jù)

這里最主要就是去抓取B站的各種API接口,這里也有熱心網(wǎng)友整理好的一份野生API文檔,大家可以自行查看使用自己需要的。

https://github.com/SocialSisterYi/bilibili-API-collect

這些B站的API中有一些是需要身份認(rèn)證的,這就需要我們自己去chrome瀏覽器中提取,主要會用到兩個cookie字段

  • SESSDATA
  • CSRF Token(bili_jct)
import requests
 
# 請求直播間彈幕列表
res = requests.get('https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory?roomid='+BILI_LIVEID)
 
data = res.json()

但是requests是同步執(zhí)行的,會阻塞主線程的執(zhí)行。比如在本例中,如果我直接使用requests發(fā)起請求,那么在請求時pygame的主邏輯循環(huán)就被卡住,這肯定不是我所希望的。網(wǎng)上有很多改異步的教程,我就不贅述了,這里我改用了另一個支持異步的庫叫 httpx ,用法和普通requests無比接近

import httpx
 
async with httpx.AsyncClient() as client:
 res = await client.get('https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory?roomid='+BILI_LIVEID)
 data = res.json()

然而在我設(shè)計里,要請求5個B站接口才能獲取到顯示的全部數(shù)據(jù)字段。這個顯然也是可以優(yōu)化的,而我最終選擇使用 uniCloud 來開發(fā)一個云函數(shù),然后將這個云函數(shù)URL化后給python使用,這也是我曾經(jīng)在視頻教程里提到過的,我們可以用uniCloud來開發(fā)后端接口,然后前端用Flutter或者其他任意框架,并不需要局限在uniapp。

將直播間彈幕念出來(TTS)

import pyttsx3
 
pyttsx3.speak("你好")

是的,這個pyttsx3用來做TTS很簡單,但它是利用系統(tǒng)自帶的服務(wù)來完成的。

  • Windows系統(tǒng):SAPI5
  • MacOS:NSSpeechSynthesizer
  • Linux:eSpeak

優(yōu)點(diǎn)就像前面的代碼,使用非常簡單。缺點(diǎn)是在各個平臺不太統(tǒng)一,跨端也會遇到一些兼容性問題。比如我在mac上開發(fā),在linux上運(yùn)行,效果是不一樣的。這個方法默認(rèn)也是同步的,就是在播放語音時,是阻塞主線程的,等語音播放結(jié)束后,主線程才會繼續(xù)執(zhí)行。這個體驗就太差了,我要等彈幕結(jié)束,彈幕才能在屏幕上跑起來。

解決方案:使用Thread開啟子線程執(zhí)行

from threading import Thread
 
Thread(target=pyttsx3.speak,args=('你好',)).start()

總結(jié)

Python還挺好玩的,第一次寫雖有一些不適應(yīng),遇到問題google一下,也能很快找到解決方案。開發(fā)效率非常高,以后有機(jī)會還會拿Python多寫點(diǎn)東西。

github倉庫

本項目代碼已全部開源,喜歡的朋友請給個Star以示鼓勵吧 https://github.com/ezshine/raspi-bilihelper

到此這篇關(guān)于Python實現(xiàn)B站UP主小助手詳解開發(fā)流程的文章就介紹到這了,更多相關(guān)Python B站助手內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)Singleton模式的方式詳解

    Python實現(xiàn)Singleton模式的方式詳解

    這篇文章主要介紹了Python實現(xiàn)Singleton模式的方式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python 爬蟲爬取京東ps4售賣情況

    python 爬蟲爬取京東ps4售賣情況

    這篇文章主要介紹了python 如何用爬蟲爬取京東ps4售賣情況,幫助大家更好的利用python爬取自己想要的數(shù)據(jù),感興趣的朋友可以了解下
    2020-12-12
  • Python編程修改MP3文件名稱的方法

    Python編程修改MP3文件名稱的方法

    這篇文章主要介紹了Python編程修改MP3文件名稱的方法,結(jié)合實例形式分析了Python修改文件名稱的相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • python中map、any、all函數(shù)用法分析

    python中map、any、all函數(shù)用法分析

    這篇文章主要介紹了python中map、any、all函數(shù)用法,實例分析了map、any、all函數(shù)的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 基于opencv的selenium滑動驗證碼的實現(xiàn)

    基于opencv的selenium滑動驗證碼的實現(xiàn)

    這篇文章主要介紹了基于opencv的selenium滑動驗證碼的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python?pyvis庫創(chuàng)建可視化交互式網(wǎng)絡(luò)圖

    python?pyvis庫創(chuàng)建可視化交互式網(wǎng)絡(luò)圖

    這篇文章主要為大家介紹了python?pyvis庫創(chuàng)建可視化交互式網(wǎng)絡(luò)圖,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python判斷字符串是否包含特定子字符串的多種方法(7種方法)

    Python判斷字符串是否包含特定子字符串的多種方法(7種方法)

    我們經(jīng)常會遇這樣一個需求判斷字符串中是否包含某個關(guān)鍵詞,也就是特定的子字符串,接下來通過本文給大家分享Python判斷字符串是否包含特定子字符串的多種方法(7種方法),需要的朋友可以參考下
    2023-03-03
  • Python針對不同文本長度的處理方案總結(jié)與對比

    Python針對不同文本長度的處理方案總結(jié)與對比

    這篇文章主要為大家詳細(xì)介紹了Python如何針對不同文本長度的處理方案,結(jié)合層次化編碼和檢索優(yōu)化策略,感興趣的小伙伴可以參考一下
    2025-02-02
  • Python實現(xiàn)二分法算法實例

    Python實現(xiàn)二分法算法實例

    這篇文章主要介紹了Python實現(xiàn)二分法算法實例,本文先是介紹了算法規(guī)則,然后給出了實現(xiàn)例子,需要的朋友可以參考下
    2015-02-02
  • 解決python字典對值(值為列表)賦值出現(xiàn)重復(fù)的問題

    解決python字典對值(值為列表)賦值出現(xiàn)重復(fù)的問題

    今天小編就為大家分享一篇解決python字典對值(值為列表)賦值出現(xiàn)重復(fù)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評論

陆良县| 益阳市| 永和县| 乐安县| 慈溪市| 靖安县| 泗水县| 望江县| 连平县| 湖北省| 武平县| 温州市| 鸡西市| 许昌市| 车致| 汶上县| 鹿邑县| 丽水市| 怀集县| 萨迦县| 贡山| 桦甸市| 衢州市| 兴和县| 阿拉善盟| 黄石市| 化德县| 毕节市| 叙永县| 麻城市| 河东区| 玉屏| 延边| 运城市| 略阳县| 通辽市| 阳信县| 海盐县| 米泉市| 邯郸县| 阳泉市|