2012-12-01 19:14:04 +04:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
__all__ = ['qq_download']
|
|
|
|
|
|
|
|
from ..common import *
|
2014-08-07 19:07:49 +04:00
|
|
|
import uuid
|
2014-07-31 20:16:34 +04:00
|
|
|
#QQMUSIC
|
|
|
|
#SINGLE
|
|
|
|
#1. http://y.qq.com/#type=song&mid=000A9lMb0iEqwN
|
|
|
|
#2. http://y.qq.com/#type=song&id=4754713
|
|
|
|
#3. http://s.plcloud.music.qq.com/fcgi-bin/fcg_yqq_song_detail_info.fcg?songmid=002NqCeX3owQIw
|
|
|
|
#4. http://s.plcloud.music.qq.com/fcgi-bin/fcg_yqq_song_detail_info.fcg?songid=4754713
|
|
|
|
#ALBUM
|
|
|
|
#1. http://y.qq.com/y/static/album/3/c/00385vBa0n3O3c.html?pgv_ref=qqmusic.y.index.music.pic1
|
|
|
|
#2. http://y.qq.com/#type=album&mid=004c62RC2uujor
|
|
|
|
#MV
|
|
|
|
#can download as video through qq_download_by_id
|
|
|
|
#1. http://y.qq.com/y/static/mv/mv_play.html?vid=i0014ufczcw
|
|
|
|
|
2014-05-29 03:54:58 +04:00
|
|
|
def qq_download_by_id(id, title=None, output_dir='.', merge=True, info_only=False):
|
2014-07-31 20:16:34 +04:00
|
|
|
xml = get_html('http://www.acfun.tv/getinfo?vids=%s' % id)
|
2014-05-29 03:54:58 +04:00
|
|
|
from xml.dom.minidom import parseString
|
|
|
|
doc = parseString(xml)
|
|
|
|
doc_root = doc.getElementsByTagName('root')[0]
|
|
|
|
doc_vl = doc_root.getElementsByTagName('vl')[0]
|
|
|
|
doc_vi = doc_vl.getElementsByTagName('vi')[0]
|
|
|
|
fn = doc_vi.getElementsByTagName('fn')[0].firstChild.data
|
2014-08-07 19:07:49 +04:00
|
|
|
# fclip = doc_vi.getElementsByTagName('fclip')[0].firstChild.data
|
|
|
|
# fc=doc_vi.getElementsByTagName('fc')[0].firstChild.data
|
2014-05-29 03:54:58 +04:00
|
|
|
fvkey = doc_vi.getElementsByTagName('fvkey')[0].firstChild.data
|
|
|
|
doc_ul = doc_vi.getElementsByTagName('ul')
|
|
|
|
|
2014-08-07 19:07:49 +04:00
|
|
|
|
|
|
|
url = doc_ul[0].getElementsByTagName('url')[1].firstChild.data
|
|
|
|
|
|
|
|
# print(i.firstChild.data)
|
|
|
|
urls=[]
|
|
|
|
ext=fn[-3:]
|
|
|
|
size=0
|
|
|
|
for i in doc.getElementsByTagName("cs"):
|
|
|
|
size+=int(i.firstChild.data)
|
|
|
|
|
|
|
|
# size=sum(map(int,doc.getElementsByTagName("cs")))
|
|
|
|
locid=str(uuid.uuid4())
|
|
|
|
for i in doc.getElementsByTagName("ci"):
|
|
|
|
urls.append(url+fn[:-4] + "." + i.getElementsByTagName("idx")[0].firstChild.data + fn[-4:] + '?vkey=' + fvkey+ '&sdtfrom=v1000&type='+ fn[-3:0] +'&locid=' + locid + "&&level=1&platform=11&br=133&fmt=hd&sp=0")
|
2014-09-02 20:45:25 +04:00
|
|
|
|
2014-08-07 19:07:49 +04:00
|
|
|
# if int(fclip) > 0:
|
|
|
|
# fn = fn[:-4] + "." + fclip + fn[-4:]
|
|
|
|
# url = url + fn + '?vkey=' + fvkey
|
|
|
|
|
|
|
|
# _, ext, size = url_info(url)
|
2014-05-29 03:54:58 +04:00
|
|
|
|
|
|
|
print_info(site_info, title, ext, size)
|
2012-12-01 19:14:04 +04:00
|
|
|
if not info_only:
|
2014-08-07 19:07:49 +04:00
|
|
|
download_urls(urls, title, ext, size, output_dir=output_dir, merge=merge)
|
2012-12-01 19:14:04 +04:00
|
|
|
|
|
|
|
def qq_download(url, output_dir = '.', merge = True, info_only = False):
|
|
|
|
if re.match(r'http://v.qq.com/([^\?]+)\?vid', url):
|
|
|
|
aid = r1(r'(.*)\.html', url)
|
|
|
|
vid = r1(r'http://v.qq.com/[^\?]+\?vid=(\w+)', url)
|
2013-12-31 17:49:20 +04:00
|
|
|
url = 'http://sns.video.qq.com/tvideo/fcgi-bin/video?vid=%s' % vid
|
|
|
|
|
2013-03-08 01:56:28 +04:00
|
|
|
if re.match(r'http://y.qq.com/([^\?]+)\?vid', url):
|
|
|
|
vid = r1(r'http://y.qq.com/[^\?]+\?vid=(\w+)', url)
|
2013-12-31 17:49:20 +04:00
|
|
|
|
2013-03-09 02:26:39 +04:00
|
|
|
url = "http://v.qq.com/page/%s.html" % vid
|
2013-12-31 17:49:20 +04:00
|
|
|
|
2013-03-09 02:26:39 +04:00
|
|
|
r_url = r1(r'<meta http-equiv="refresh" content="0;url=([^"]*)', get_html(url))
|
|
|
|
if r_url:
|
|
|
|
aid = r1(r'(.*)\.html', r_url)
|
|
|
|
url = "%s/%s.html" % (aid, vid)
|
2013-12-31 17:49:20 +04:00
|
|
|
|
2013-04-23 15:05:11 +04:00
|
|
|
if re.match(r'http://static.video.qq.com/.*vid=', url):
|
|
|
|
vid = r1(r'http://static.video.qq.com/.*vid=(\w+)', url)
|
|
|
|
url = "http://v.qq.com/page/%s.html" % vid
|
2013-12-31 17:49:20 +04:00
|
|
|
|
2014-01-05 13:24:21 +04:00
|
|
|
if re.match(r'http://v.qq.com/cover/.*\.html', url):
|
|
|
|
html = get_html(url)
|
|
|
|
vid = r1(r'vid:"([^"]+)"', html)
|
|
|
|
url = 'http://sns.video.qq.com/tvideo/fcgi-bin/video?vid=%s' % vid
|
|
|
|
|
2012-12-01 19:14:04 +04:00
|
|
|
html = get_html(url)
|
2013-12-31 17:49:20 +04:00
|
|
|
|
|
|
|
title = match1(html, r'<title>(.+?)</title>', r'title:"([^"]+)"')[0].strip()
|
2012-12-01 19:14:04 +04:00
|
|
|
assert title
|
|
|
|
title = unescape_html(title)
|
|
|
|
title = escape_file_path(title)
|
2013-12-31 17:49:20 +04:00
|
|
|
|
2014-01-05 13:24:21 +04:00
|
|
|
try:
|
|
|
|
id = vid
|
|
|
|
except:
|
|
|
|
id = r1(r'vid:"([^"]+)"', html)
|
2013-12-31 17:49:20 +04:00
|
|
|
|
2012-12-01 19:14:04 +04:00
|
|
|
qq_download_by_id(id, title, output_dir = output_dir, merge = merge, info_only = info_only)
|
|
|
|
|
2013-01-11 07:43:30 +04:00
|
|
|
site_info = "QQ.com"
|
2012-12-01 19:14:04 +04:00
|
|
|
download = qq_download
|
|
|
|
download_playlist = playlist_not_supported('qq')
|