11#!/usr/bin/env python
22
3- __all__ = ['miaopai_download' ]
3+ import re
4+ import json
5+
6+ from lulu import config
7+ from lulu .common import (
8+ match1 ,
9+ url_info ,
10+ url_size ,
11+ print_info ,
12+ get_content ,
13+ download_urls ,
14+ playlist_not_supported ,
15+ )
416
5- from ..common import *
6- import urllib .error
7- import urllib .parse
17+ __all__ = ['miaopai_download' ]
18+ site_info = 'miaopai'
819
9- fake_headers_mobile = {
10- 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' ,
11- 'Accept-Charset' : 'UTF-8,*;q=0.5' ,
12- 'Accept-Encoding' : 'gzip,deflate,sdch' ,
13- 'Accept-Language' : 'en-US,en;q=0.8' ,
14- 'User-Agent' : 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36'
15- }
1620
17- def miaopai_download_by_fid (fid , output_dir = '.' , merge = False , info_only = False , ** kwargs ):
18- '''Source: Android mobile'''
21+ def miaopai_download_by_fid (
22+ fid , output_dir = '.' , merge = False , info_only = False , ** kwargs
23+ ):
1924 page_url = 'http://video.weibo.com/show?fid=' + fid + '&type=mp4'
2025
21- mobile_page = get_content (page_url , headers = fake_headers_mobile )
26+ mobile_page = get_content (page_url , headers = config . FAKE_HEADERS_MOBILE )
2227 url = match1 (mobile_page , r'<video id=.*?src=[\'"](.*?)[\'"]\W' )
2328 title = match1 (mobile_page , r'<title>((.|\n)+?)</title>' )
2429 if not title :
@@ -27,25 +32,43 @@ def miaopai_download_by_fid(fid, output_dir = '.', merge = False, info_only = Fa
2732 ext , size = 'mp4' , url_info (url )[2 ]
2833 print_info (site_info , title , ext , size )
2934 if not info_only :
30- download_urls ([url ], title , ext , total_size = None , output_dir = output_dir , merge = merge )
35+ download_urls (
36+ [url ], title , ext , total_size = None , output_dir = output_dir ,
37+ merge = merge
38+ )
3139
32- #----------------------------------------------------------------------
33- def miaopai_download (url , output_dir = '.' , merge = False , info_only = False , ** kwargs ):
40+
41+ def miaopai_download (
42+ url , output_dir = '.' , merge = False , info_only = False , ** kwargs
43+ ):
3444 fid = match1 (url , r'\?fid=(\d{4}:\w{32})' )
35- if fid is not None :
45+ if fid :
3646 miaopai_download_by_fid (fid , output_dir , merge , info_only )
3747 elif '/p/230444' in url :
3848 fid = match1 (url , r'/p/230444(\w+)' )
3949 miaopai_download_by_fid ('1034:' + fid , output_dir , merge , info_only )
4050 else :
41- mobile_page = get_content (url , headers = fake_headers_mobile )
42- hit = re .search (r'"page_url"\s*:\s*"([^"]+)"' , mobile_page )
43- if not hit :
44- raise Exception ('Unknown pattern' )
45- else :
46- escaped_url = hit .group (1 )
47- miaopai_download (urllib .parse .unquote (escaped_url ), output_dir = output_dir , merge = merge , info_only = info_only , ** kwargs )
48-
49- site_info = "miaopai"
51+ mobile_page = get_content (url , headers = config .FAKE_HEADERS_MOBILE )
52+ match_rule = re .compile (
53+ r'var \$render_data = \[(.*?)\]\[0\]' ,
54+ re .DOTALL
55+ )
56+ video_info = json .loads (match_rule .findall (mobile_page )[0 ])
57+ video_url = video_info ['status' ]['page_info' ]['media_info' ][
58+ 'stream_url'
59+ ]
60+ title = video_info ['status' ]['page_info' ]['content2' ]
61+ video_format = 'mp4'
62+ size = url_size (video_url )
63+ print_info (
64+ site_info = site_info , title = title , type = video_format , size = size
65+ )
66+ if not info_only :
67+ download_urls (
68+ urls = [video_url ], title = title , ext = video_format ,
69+ total_size = size , ** kwargs
70+ )
71+
72+
5073download = miaopai_download
51- download_playlist = playlist_not_supported ('miaopai' )
74+ download_playlist = playlist_not_supported (site_info )
0 commit comments