亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現B站UP主小助手

發布時間:2022-02-18 12:18:17 來源:億速云 閱讀:141 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Python如何實現B站UP主小助手的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

前言

先上效果

Python如何實現B站UP主小助手

有彈幕的時候是這樣的

Python如何實現B站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框架

Python如何實現B站UP主小助手

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加載字體顯示文字

Python如何實現B站UP主小助手

# 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獲取日期時間

Python如何實現B站UP主小助手

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/SocialSisterYi/bilibili-API-collect

這些B站的API中有一些是需要身份認證的,這就需要我們自己去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是同步執行的,會阻塞主線程的執行。比如在本例中,如果我直接使用requests發起請求,那么在請求時pygame的主邏輯循環就被卡住,這肯定不是我所希望的。網上有很多改異步的教程,我就不贅述了,這里我改用了另一個支持異步的庫叫 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()

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

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

import pyttsx3
 
pyttsx3.speak("你好")

是的,這個pyttsx3用來做TTS很簡單,但它是利用系統自帶的服務來完成的。

  • Windows系統:SAPI5

  • MacOS:NSSpeechSynthesizer

  • Linux:eSpeak

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

解決方案:使用Thread開啟子線程執行

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

感謝各位的閱讀!關于“Python如何實現B站UP主小助手”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉隆县| 青海省| 平凉市| 玉田县| 临漳县| 无极县| 宝鸡市| 兴仁县| 纳雍县| 永川市| 鲁山县| 山阳县| 三门县| 八宿县| 女性| 漳浦县| 翁牛特旗| 府谷县| 甘谷县| 房山区| 梨树县| 抚远县| 高台县| 四川省| 共和县| 甘谷县| 曲靖市| 临湘市| 铜山县| 梅河口市| 石棉县| 东明县| 怀远县| 定襄县| 噶尔县| 什邡市| 垦利县| 得荣县| 即墨市| 临汾市| 南宁市|