通过py脚本将腾讯视频命名为对应的0day名

运行环境

Windows 10 、python 3.5.1

需要到pypinyin模块,请通过下面的命令安装:

pip install pypinyin 

代码如下:

#-*_coding:utf-8-*-
#视频资源0day名的命名方式一般是:
#视频名+年份+季/集数+来源+分辨率+视频编码格式+音频编码格式+小组名
#对形如以下形式的链接有效:
#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
#待解决:对单集视频只会输出拼音的形式
#适用于腾讯的电视剧(包括网剧),动漫,电影,不适于个人用户上传的视频
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:#换个方式匹配下
            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,无用,故删除之。至于为什么前面要匹配它又删,是为了避免被后续函数把vid认为是英文名...
        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")#从网页中匹配视频信息
        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):#将一串名字的最后的一个点替换为 -
    tmplist=list(str0day)
    tmplist[str0day.rfind(".")]="-"
    str0day=''.join(tmplist)
    return(str0day)

def EXorSX(originname):#根据不同类型名称返回是某一季或者某一集
    if "_" in originname:
        EorS="E"+originname.split("_")[1].zfill(2);#季或集一般都是两位数,这里对其补全填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]):#单集的视频从网页中得到的值可能是XXX第X季_XX的形式,再一次用EXorSX()函数得到是哪一季
    Season=EorS
    originname[0],EorS = EXorSX(originname[0])
    EorS=EorS+Season
nametail=["2017",EorS,"WEB-DL","1080P","H264","AAC","WeiMo"]#列表中能够的元素可以加入读取视频信息的函数进行替换

if originname[1]=="":#没有英文名,那么以拼音命名
    namehead=lazy_pinyin(originname[0].replace(" ","").replace(":",""))
    for i in range(len(namehead)):
        namehead[i]=namehead[i].capitalize()#大写每个拼音的首字母
else:
    namehead=originname[1].replace(":","").split(" ")#网页上的名字可能有冒号,去掉
    for i in range(len(namehead)):
        namehead[i]=namehead[i].capitalize()
print(namehead)

for i in range(len(nametail)):#将名字部分后0day格式后面的部分放在一个列表中
    namehead.append(nametail[i])

full0dayname=".".join(namehead);#把列表中的元素用点连接起来
full0dayname=enddottoline(full0dayname)
print(full0dayname)

运行效果图:

《通过py脚本将腾讯视频命名为对应的0day名》 name0day.png
《通过py脚本将腾讯视频命名为对应的0day名》 showitem.png

其他:

  • 命名中的年份请无视,可手动修改
  • 音视频编码信息可在下载好视频后读取获得,也可以在下载中处理成指定格式
  • 小组名随便写的
    原文作者:未末星空
    原文地址: https://www.jianshu.com/p/8f576a762884
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞