之前比較喜歡看虎牙的直播,但是由於時間比較忙沒辦法看,最近學完python的基礎課程後考慮能否用python來實現自動錄影,這樣想什麼時候看就能什麼時候看,比較方便。
僅從使用角度來看,需要安裝:
python(開玩笑怎麼能沒有這個)
python所需的模組(requests、json、re)
錄屏軟體(ffmpeg)
如果想要理解**進行修改的話建議學一些python爬蟲入門即可
博主使用的是ubuntu系統,想要在windows下執行的話只需要修改命令列執行語句,並且把ffmpeg.exe這個可執行檔案放在當前目錄即可
程式執行效果:輸入直播間位址,通過多執行緒可以實現判斷直播間當前是否正在直播,如果直播開始即開始錄屏,直播結束錄屏結束。(有乙個目前尚未解決的bug,如果直播間在進行重播,當前這個判斷會出問題,留待之後修改)
下面就是令人激動的**了
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import random
import requests
import re
import os
import threading
import time
import datetime
import random
class
huyalive()
:def
__init__
(self,url)
:# 必須的訪問位址和訪問頭
self.url = url
self.headers=
defprepare
(self)
:# 獲得頁面html字串
response = requests.get(self.url,headers=self.headers)
html = response.content.decode(
)# 載入json
json_script = re.search(
'"stream": ()\s*};'
, html)
.group(1)
print
(json_script)
data = json.loads(json_script)
room_info = data[
'data'][
0]['gameliveinfo'
] stream_info = random.choice(data[
'data'][
0]['gamestreaminfolist'])
sflvurl = stream_info[
'sflvurl'
] sstreamname = stream_info[
'sstreamname'
] sflvurlsuffix = stream_info[
'sflvurlsuffix'
] sflvanticode = stream_info[
'sflvanticode'
] flv_url =
'{}/{}.{}?{}'
.format
(sflvurl, sstreamname, sflvurlsuffix, sflvanticode)
print
("current url = "
,flv_url)
# 利用ffmpeg進行錄屏
filename = datetime.datetime.today(
) filename = filename.strftime(
'%y-%m-%d%h:%m:%s'
) filename = filename +
'.flv'
print
(filename)
# 檔名稱類似'%y-%m-%d%h:%m:%s.flv'格式
# 檔案儲存的目錄,我把檔案存在硬碟上面了
file_path =
"/media/ych/seagate\ backup\ plus\ drive/zhibo"
os.system(
.format
('"%s"'
% flv_url, os.path.join(file_path,filename)))
defrun
(self)
:# 判斷是否開播
global anchor_status # 是否開播的標記
response = requests.get(self.url, headers=self.headers)
html = response.content.decode(
) anchor_status = re.findall(
"上次開播(.*?)"
, html)
# 開播返回none,不開播返回列表
if anchor_status:
print
("尚未開播"
)else
:print
("正在直播"
)def
change_status
(self)
:# 判斷是否開播的執行緒
print
("------change------"
)while
true
:try
: self.run(
)# 隨機對直播間進行訪問,為防止爬蟲被封
time.sleep(random.randint(10,
30))except
:# 如果ip被封或報錯,休息60s後繼續訪問
time.sleep(60)
defrecording
(self)
:global flag,anchor_status
# 進行錄屏的執行緒
while
true
:print
("-------recoding-------"
)print
(len
(anchor_status)==0
)print
(flag)
time.sleep(5)
iflen
(anchor_status)==0
and flag:
print
("---get into self prepare"
)# 進行錄屏
self.prepare(
) flag =
false
elif
len(anchor_status)!=0
: flag =
true
anchor_status =
["1"
]flag =
true
if __name__ ==
'__main__'
: temp_url =
""room_name =
input
("請輸入直播間房間號,例如「920710」:"
) request_url = temp_url.
format
(room_name)
site = huyalive(request_url)
change = threading.thread(target=site.change_status)
ffm = threading.thread(target=site.recording)
# 開始執行程式
change.start(
) ffm.start(
)
github:
歡迎提出建議!
我的郵箱是[email protected]
1.2.
python實現自動登入
最近大資料感興趣實踐了一下自動登入,返回結果是登入成功import urllib import urllib2 import gzip import stringio 構建post請求的字典 postvalues postdata urllib.urlencode postvalues 構建get請...
Python實現自動寫郵件
上星期接到任務要完成乙個自動寫郵件的指令碼,基本功能是每兩小時執行一次程式跑出統計 並將統計 的summary傳送到領導的郵箱。由於公司是做數字貨幣的,每兩小時實時監測策略交易情況較為必要。下面來實現自動寫郵件的功能部分 import smtplib from email.mime.text imp...
Python實現自動關機
首先,我們了解下dos下關機的命令詳情 shutdown s f t 300 c 還有300s關機 shutdown i l s r a f m computername t xx c mment d up xx yy i 顯示 gui 介面,必須是第乙個選項 l 登出 不能與選項 m 一起使用 s...