From e4f10358bc89d24fb93ad063cde103b03d6ab53d Mon Sep 17 00:00:00 2001 From: gongqijian Date: Tue, 26 Mar 2013 13:51:37 +0800 Subject: [PATCH] add support for Baidu Music (with lyrics), fix #1 --- README.md | 3 ++ README.txt | 1 + src/you_get/__main__.py | 1 + src/you_get/downloader/__init__.py | 1 + src/you_get/downloader/baidu.py | 78 ++++++++++++++++++++++++++++++ 5 files changed, 84 insertions(+) create mode 100755 src/you_get/downloader/baidu.py diff --git a/README.md b/README.md index 18c67c23..c87afafc 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Fork me on GitHub: * Sohu (搜狐视频) * 56 (56网) * Xiami (虾米) +* Baidu (百度音乐) ## Dependencies @@ -255,6 +256,8 @@ You-Get基于优酷下载脚本[iambus/youku-lixian](https://github.com/iambus/y * 搜狐视频 * 56网 * 虾米 +* 百度音乐 + ## 依赖 diff --git a/README.txt b/README.txt index d32fcdc9..ddcb5bc3 100644 --- a/README.txt +++ b/README.txt @@ -47,6 +47,7 @@ Supported Sites (As of Now) * Sohu (搜狐视频) http://tv.sohu.com * 56 (56网) http://www.56.com * Xiami (虾米) http://www.xiami.com +* Baidu (百度音乐) Dependencies ------------ diff --git a/src/you_get/__main__.py b/src/you_get/__main__.py index 5821d190..2a3bb53d 100644 --- a/src/you_get/__main__.py +++ b/src/you_get/__main__.py @@ -50,6 +50,7 @@ def url_to_module(url): 'vimeo': vimeo, 'vine': vine, 'xiami': xiami, + 'baidu': baidu, 'yinyuetai': yinyuetai, 'youku': youku, 'youtu': youtube, diff --git a/src/you_get/downloader/__init__.py b/src/you_get/downloader/__init__.py index 3db355bc..a515ae46 100644 --- a/src/you_get/downloader/__init__.py +++ b/src/you_get/downloader/__init__.py @@ -29,6 +29,7 @@ from .vimeo import * from .vine import * from .w56 import * from .xiami import * +from .baidu import * from .yinyuetai import * from .youku import * from .youtube import * diff --git a/src/you_get/downloader/baidu.py b/src/you_get/downloader/baidu.py new file mode 100755 index 00000000..958631e4 --- /dev/null +++ b/src/you_get/downloader/baidu.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +__all__ = ['baidu_download'] + +from ..common import * + +from urllib import parse + +def baidu_get_song_html(sid): + return get_html('http://music.baidu.com/song/%s/download?__o=%%2Fsong%%2F%s' % (sid, sid), faker = True) + +def baidu_get_song_url(html): + return r1(r'', html) + if href: + lrc = get_html('http://music.baidu.com' + href) + if len(lrc) > 0: + with open(output_dir + "/" + file_name.replace('/', '-') + '.lrc', 'w') as x: + x.write(lrc) + +def baidu_download_song(sid, output_dir = '.', merge = True, info_only = False): + html = baidu_get_song_html(sid) + url = baidu_get_song_url(html) + title = baidu_get_song_title(html) + artist = baidu_get_song_artist(html) + album = baidu_get_song_album(html) + type, ext, size = url_info(url, faker = True) + print_info(site_info, title, type, size) + if not info_only: + file_name = "%s - %s - %s" % (title, album, artist) + download_urls([url], file_name, ext, size, output_dir, merge = merge, faker = True) + baidu_download_lyric(sid, file_name, output_dir) + +def baidu_download_album(aid, output_dir = '.', merge = True, info_only = False): + html = get_html('http://music.baidu.com/album/%s' % aid, faker = True) + album_name = r1(r'

(.*)<\/h2>', html) + artist = r1(r'', html) + output_dir = '%s/%s - %s' % (output_dir, artist, album_name) + ids = json.loads(r1(r'', html).replace('"', '').replace(';', '"'))['ids'] + track_nr = 1 + for id in ids: + song_html = baidu_get_song_html(id) + song_url = baidu_get_song_url(song_html) + song_title = baidu_get_song_title(song_html) + file_name = '%02d.%s' % (track_nr, song_title) + type, ext, size = url_info(song_url, faker = True) + print_info(site_info, song_title, type, size) + if not info_only: + download_urls([song_url], file_name, ext, size, output_dir, merge = merge, faker = True) + baidu_download_lyric(id, file_name, output_dir) + track_nr += 1 + +def baidu_download(url, output_dir = '.', stream_type = None, merge = True, info_only = False): + + if re.match(r'http://music.baidu.com/album/\d+', url): + id = r1(r'http://music.baidu.com/album/(\d+)', url) + baidu_download_album(id, output_dir, merge, info_only) + + if re.match('http://music.baidu.com/song/\d+', url): + id = r1(r'http://music.baidu.com/song/(\d+)', url) + baidu_download_song(id, output_dir, merge, info_only) + +site_info = "Baidu.com" +download = baidu_download +download_playlist = playlist_not_supported("baidu")