From 5b4e2b08b3793273585313335046006bc7f44ebb Mon Sep 17 00:00:00 2001 From: Mort Yao Date: Fri, 29 Mar 2013 17:10:02 +0100 Subject: [PATCH 1/7] update README.txt --- README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.txt b/README.txt index ddcb5bc3..7dc8350b 100644 --- a/README.txt +++ b/README.txt @@ -47,7 +47,7 @@ Supported Sites (As of Now) * Sohu (搜狐视频) http://tv.sohu.com * 56 (56网) http://www.56.com * Xiami (虾米) http://www.xiami.com -* Baidu (百度音乐) +* Baidu (百度音乐) http://music.baidu.com Dependencies ------------ From abad1049eec085112c94e79a337d4e3a4e574165 Mon Sep 17 00:00:00 2001 From: Mort Yao Date: Fri, 5 Apr 2013 03:13:14 +0200 Subject: [PATCH 2/7] add support for Coursera --- src/you_get/__main__.py | 1 + src/you_get/downloader/__init__.py | 1 + src/you_get/downloader/coursera.py | 115 +++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 src/you_get/downloader/coursera.py diff --git a/src/you_get/__main__.py b/src/you_get/__main__.py index 2a3bb53d..ad5454e1 100644 --- a/src/you_get/__main__.py +++ b/src/you_get/__main__.py @@ -24,6 +24,7 @@ def url_to_module(url): 'bilibili': bilibili, 'blip': blip, 'cntv': cntv, + 'coursera': coursera, 'dailymotion': dailymotion, 'douban': douban, 'facebook': facebook, diff --git a/src/you_get/downloader/__init__.py b/src/you_get/downloader/__init__.py index a515ae46..fdb24a70 100644 --- a/src/you_get/downloader/__init__.py +++ b/src/you_get/downloader/__init__.py @@ -4,6 +4,7 @@ from .acfun import * from .bilibili import * from .blip import * from .cntv import * +from .coursera import * from .dailymotion import * from .douban import * from .facebook import * diff --git a/src/you_get/downloader/coursera.py b/src/you_get/downloader/coursera.py new file mode 100644 index 00000000..3570c511 --- /dev/null +++ b/src/you_get/downloader/coursera.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +__all__ = ['coursera_download'] + +from ..common import * + +def coursera_login(user, password, csrf_token): + url = 'https://www.coursera.org/maestro/api/user/login' + my_headers = { + 'Cookie': ('csrftoken=%s' % csrf_token), + 'Referer': 'https://www.coursera.org', + 'X-CSRFToken': csrf_token, + } + + values = { + 'email_address': user, + 'password': password, + } + form_data = parse.urlencode(values).encode('utf-8') + + response = request.urlopen(request.Request(url, headers = my_headers, data = form_data)) + + return response.headers + +def coursera_download(url, output_dir = '.', merge = True, info_only = False): + course_code = r1(r'coursera.org/([^/]+)', url) + + request.install_opener(request.build_opener(request.HTTPCookieProcessor())) + + response = request.urlopen(request.Request(url)) + csrf_token = r1(r'csrf_token=([^;]+);', response.headers['Set-Cookie']) + + import netrc, getpass + info = netrc.netrc().authenticators('coursera.org') + if info is None: + user = input("User: ") + password = getpass.getpass("Password: ") + else: + user, password = info[0], info[2] + print("Logging in...") + + coursera_login(user, password, csrf_token) + + request.urlopen("https://class.coursera.org/%s/auth/auth_redirector?type=login&subtype=normal" % course_code) # necessary! + + html = get_html(url) + + course_name = "%s (%s)" % (r1(r'course_strings_name = "([^"]+)"', html), course_code) + output_dir = os.path.join(output_dir, course_name) + + materials = re.findall(r'