python3自动下载优酷视频小程序
我们一般都在优酷里看一些好玩的视频,有时候看到精彩的就想下载到本地保存起来留作纪念,在win下可以用维棠等软件下载,但苦了用linux的孩子们。尽管chrome和firefox的一些插件可以下载,但有时候下载下来是分段的视频,还要手动用ffmpeg合成一个视频太繁琐,而且用插件下载要点击好多次鼠标,太不符合linuxer的性格了哈~于是我用python3写了一个youkuDown.py,代码如下:
- import re
- import urllib.request
- import json
- import time
- import random
- import sys
- def getVideoInfo(url):
- ruleTitle=re.compile('<title>(.*)</title>')
- ruleId=re.compile('http://v.youku.com/v_show/id_(.*).html')
- videoTitle=ruleTitle.findall(urllib.request.urlopen(url).read().decode('utf8'))
- videoId=ruleId.findall(url)
- return videoTitle[0],videoId[0]
- def getTrueLink(videoid):
- data=urllib.request.urlopen('http://v.youku.com/player/getPlayList/VideoIDS/'+videoid)
- info=json.loads(data.read().decode('utf8'))
- segs=info['data'][0]['segs']
- types=segs.keys()
- seed=info['data'][0]['seed']
- source=list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890")
- mixed=''
- while source:
- seed=(seed*211+30031)&0xFFFF
- index=seed*len(source)>>16
- c=source.pop(index)
- mixed+=c
- ids=info['data'][0]['streamfileids']['flv'].split('*')[:-1]
- vid=''.join(mixed[int(i)] for i in ids)
- sid='%s%s%s'%(int(time.time()*1000),random.randint(1000,1999),random.randint(1000,9999))
- urls=[]
- for s in segs['flv']:
- no='%02x'%int(s['no'])
- url='http://f.youku.com/player/getFlvPath/sid/%s_%s/st/flv/fileid/%s%s%s?K=%s&ts=%s'%(sid,no,vid[:8],no.upper(),vid[10:],s['k'],s['seconds'])
- urls.append(url)
- return urls
- def down2file(urls,filename):
- f=open(filename,'wb')
- fileNum=len(urls)
- count=0
- for url in urls:
- count+=1
- print('downloading file %d/%d'%(count,fileNum))
- req=urllib.request.Request(url,headers={'Referer':'http://www.youku.com'})
- data=urllib.request.urlopen(req).read()
- f.write(data)
- f.close()
- print('download '+filename+' OK!')
- def youkuDown(link):
- videotitle,videoid=getVideoInfo(link)
- urls=getTrueLink(videoid)
- down2file(urls,videotitle+'.flv')
- if __name__=='__main__':
- if len(sys.argv)<2:
- print('Example Usage: python3 youkuDown.py http://v.youku.com/v_show/id_XNjUzNDQwMzIw.html')
- print('')
- exit()
- youkuDown(sys.argv[1])
简单说明一下,因为优酷视频的真实链接是动态变化的,而每个视频的ID是不变的,比如在链接http://v.youku.com/v_show/id_XNjUzNDQwMzIw.html中,“XNjUzNDQwMzIw”就是视频的唯一ID标识,通过这个ID可以通过GET方式请求“http://v.youku.com/player/getPlayList/VideoIDS/”+ID产生的新链接,得到json格式的视频信息,然后组装成视频的真实链接,这个真实链接也是有时效性的,而且向这个真实链接发起请求的时候必须把头的Referer设为www.youku.com骗过服务器才能下载,所以我没有像以前一样用os.system('wget '+url)这样搞起。还有,优酷对大的视频是分段的,所以得到的真实url我存在一个List里面,下载的时候会显示出共有几段以及实时下载了多少段。下面是我的使用举例:
保存到本地的视频播放情况:
在linux下想下载优酷视频的盆友们enjoy it~~同时祝大家新年愉快~~哈哈哈
python3自动下载优酷视频小程序的更多相关文章
- 视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频
视频下载四大神器—如何下载优酷/爱奇艺/腾讯/B站超清无水印视频 2018-07-11 | 标签»下载, 下载工具, 视频 又是视频下载,老生常谈的话题.阿刚同学已在乐软博客多次与大家分享推荐 ...
- 鹅厂优文|打通小程序音视频和webRTC
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯视频云终端技术总监常青, 2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ.手机QQ.QQ物联 等产品 ...
- 网页中引用优酷视频去广告自动播放代码[xyytit]
很多时候需要在网站中加入视频,可视频太大放自己服务器上太占空间,可以把视频上传到优酷网上,这样节省了空间,打开速度方面也会有不少提升.下面教大家如何引用自动播放的优酷视频.把下面的代码加在你网页适当位 ...
- JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
开发之前需要考虑系统的差异性,比如ios手机没有回退键,所以在开发时一定要考虑二级界面需要有回退键,否则ios的手机就会陷入到这个页面出不去了.安卓系统有回退键,针对这个情况需要要求用户在3秒钟之内连 ...
- php 获取优酷视频的真实地址(2014.6月新算法)
上个礼拜发现优酷改版了,各种过滤优酷广告的插件都失效了,于是我百度了一下(谷歌也不能用了)发现优酷改算法了,在ckplayer论坛发现有人在6月25号发了个php 的优酷代理文件,下载下来发现,能用但 ...
- 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇)
系列文章 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇) 手牵手,使用uni-app从零开发一款视频小程序 (系列下 开发实战篇) 前言 好久不见,很久没更新博客了,前段时间 ...
- 【API】获取优酷视频信息接口
序: 自己的网站中需要接入一个视频模块,虚拟主机的空间小所以只能引用第三方的链接.感觉国内优酷好不错,所以查了一下优酷的接口. 0x00: 先去优酷API开放中心申请一个开 ...
- 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http ...
- 关于ubuntu14.04LTS 64位 播放优酷视频
起因:chrome无法播放优酷视频,然后换firefox发现居然没有装flash 插件. 解释:关于chrome在网上看到了不少说法,说chrome新版本的不支持adobe flash之类的,但是这些 ...
随机推荐
- C++中运行外部程序
关于三个SDK函数: WinExec, ShellExecute,CreateProcess 的其他注意事项: [1]定义头文件 必须定义以下两个头文件: #include <shlobj.h& ...
- 关于tomcat配置MyEclipse项目的配置代码
例如:<Context path="/shis" docBase="E:\Genuitec\Workspaces\MyEclipse 8.6\zwfw_platfo ...
- MyEclipse9,MyEclipse10 安装ADT
Eclipse安装ADT 时步骤是开 Eclipse IDE,进入菜单中的 "Help" -> "Install New Software" ,点击Add ...
- 2016青岛网络赛 Barricade
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Proble ...
- 使用VNC远程管理VPS(Centos系统)
首先安装桌面环境,我选择的是xfce,轻量级桌面,小巧实用不占太多内存,(占用内存方面,xfce<kde,kde<gnome). centos默认源里面没有xfce,首先安装epel源,然 ...
- 发布时去掉 debug 和 提醒日志,简单无侵入
在 proguard 文件中加入下面代码,让发布时去掉 debug 和 提醒日志,简单无侵入! -assumenosideeffects class android.util.Log { public ...
- manecher
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> us ...
- stdarg.h头
stdarg.h 头文件,主要目的是让函数可以接受可变参数. va_list :用来保存宏va_arg与宏va_end所需信息. va_start :使va_list指向起始的参数 va_arg :检 ...
- window下查看端口命令
原文:http://blog.csdn.net/ldl22847/article/details/7181210 http://blog.csdn.net/xinxin19881112/article ...
- PAT (Advanced Level) 1017. Queueing at Bank (25)
简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm&g ...