運(yùn)行環(huán)境
Windows 10 、python 3.5.1
需要到pypinyin模塊九孩,請(qǐng)通過下面的命令安裝:
pip install pypinyin
代碼如下:
#-*_coding:utf-8-*-
#視頻資源0day名的命名方式一般是:
#視頻名+年份+季/集數(shù)+來源+分辨率+視頻編碼格式+音頻編碼格式+小組名
#對(duì)形如以下形式的鏈接有效:
#http://v.qq.com/x/cover/1velzvrkiyetht3/t0019clqihf.html
#http://v.qq.com/detail/1/1velzvrkiyetht3.html
#http://v.qq.com/x/page/q0017kuphxo.html
#待解決:對(duì)單集視頻只會(huì)輸出拼音的形式
#適用于騰訊的電視劇(包括網(wǎng)勗薇纭)棺榔,動(dòng)漫岸夯,電影麻献,不適于個(gè)人用戶上傳的視頻
import re,requests
from sys import argv
from pypinyin import lazy_pinyin
def getoriginname(pageurl):#獲取中文名和英文名
if "detail" not in pageurl:
pagecid=pageurl
info=pageurl.replace("http://","").replace(".","/").split("/")
vid=info[-2]
pageurl="http://vv.video.qq.com/getinfo?vid="+vid
pagecontent=requests.get(pageurl).content.decode("UTF-8");#從接口匹配視頻信息
if "vid is wrong" in pagecontent:#換個(gè)方式匹配下
pageurl="http://vv.video.qq.com/getinfo?cid="+vid
pagecontent=requests.get(pageurl).content.decode("UTF-8");
namearray=list(re.findall("<ti>([\s\S]*?)</ti>[\s\S]*<vid>([\s\S]*)</vid>",pagecontent)[0])
namearray[1]=""#此處是vid,無用猜扮,故刪除之勉吻。至于為什么前面要匹配它又刪,是為了避免被后續(xù)函數(shù)把vid認(rèn)為是英文名...
getcid=requests.get(pagecid).content.decode("UTF-8");
detailid=re.findall("/cover/([\s\S]*?).html",getcid)[0];
#detailid這里用于判斷有沒有英文名旅赢,有的話就把英文名一并返回
pageurl="http://v.qq.com/detail/"+detailid[0]+"/"+detailid+".html";
namearray[1]=getoriginname(pageurl)[1];
else:
pagecontent=requests.get(pageurl).content.decode("UTF-8")#從網(wǎng)頁中匹配視頻信息
namearray=list(re.findall("info:title\">([\s\S]*?)</a>[\s\S]*itemprop=\"alternateName\">([\s\S]*?)</span>",pagecontent)[0])
for i in range(len(namearray)):
namearray[i]=namearray[i].replace('\xa0', ' ').replace(':', ' ')
return (namearray)
def enddottoline(str0day):#將一串名字的最后的一個(gè)點(diǎn)替換為 -
tmplist=list(str0day)
tmplist[str0day.rfind(".")]="-"
str0day=''.join(tmplist)
return(str0day)
def EXorSX(originname):#根據(jù)不同類型名稱返回是某一季或者某一集
if "_" in originname:
EorS="E"+originname.split("_")[1].zfill(2);#季或集一般都是兩位數(shù)餐曼,這里對(duì)其補(bǔ)全填0
originname=originname.split("_")[0];
else:
chnum1=['零','一','二','三','四','五','六','七','八','九']
chnum2=['0','1','2','3','4','5','6','7','8','9']
ES=re.findall("第([\s\S]*?)季",originname);
if ES==[]:
EorS="Complete"
else:
originname=originname[:originname.find("第")]
for i in range(len(chnum1)):#判斷是第幾集或者第幾季
if ES[0]==chnum1[i]:
j=i;break
for i in range(len(chnum2)):
if ES[0]==chnum2[i]:
j=i;break
EorS="S"+repr(j).zfill(2)
return(originname,EorS)
key1,key2= argv
key2=key2.replace("https","http")
originname=getoriginname(key2)
print(originname)
originname[0],EorS = EXorSX(originname[0])
if "第" and "季" in list(originname[0]):#單集的視頻從網(wǎng)頁中得到的值可能是XXX第X季_XX的形式,再一次用EXorSX()函數(shù)得到是哪一季
Season=EorS
originname[0],EorS = EXorSX(originname[0])
EorS=EorS+Season
nametail=["2017",EorS,"WEB-DL","1080P","H264","AAC","WeiMo"]#列表中能夠的元素可以加入讀取視頻信息的函數(shù)進(jìn)行替換
if originname[1]=="":#沒有英文名鲜漩,那么以拼音命名
namehead=lazy_pinyin(originname[0].replace(" ","").replace(":",""))
for i in range(len(namehead)):
namehead[i]=namehead[i].capitalize()#大寫每個(gè)拼音的首字母
else:
namehead=originname[1].replace(":","").split(" ")#網(wǎng)頁上的名字可能有冒號(hào)源譬,去掉
for i in range(len(namehead)):
namehead[i]=namehead[i].capitalize()
print(namehead)
for i in range(len(nametail)):#將名字部分后0day格式后面的部分放在一個(gè)列表中
namehead.append(nametail[i])
full0dayname=".".join(namehead);#把列表中的元素用點(diǎn)連接起來
full0dayname=enddottoline(full0dayname)
print(full0dayname)
運(yùn)行效果圖:
name0day.png
showitem.png
其他:
- 命名中的年份請(qǐng)無視,可手動(dòng)修改
- 音視頻編碼信息可在下載好視頻后讀取獲得孕似,也可以在下載中處理成指定格式
- 小組名隨便寫的