Browse Source

[facebook] Fix invalid video being extracted (Closes #9851)

totalwebcasting
Sergey M․ 9 years ago
parent
commit
cedc70b292
No known key found for this signature in database GPG Key ID: 2C393E0F18A9236D
1 changed files with 15 additions and 4 deletions
  1. +15
    -4
      youtube_dl/extractor/facebook.py

+ 15
- 4
youtube_dl/extractor/facebook.py View File

@ -219,12 +219,23 @@ class FacebookIE(InfoExtractor):
BEFORE = '{swf.addParam(param[0], param[1]);});' BEFORE = '{swf.addParam(param[0], param[1]);});'
AFTER = '.forEach(function(variable) {swf.addVariable(variable[0], variable[1]);});' AFTER = '.forEach(function(variable) {swf.addVariable(variable[0], variable[1]);});'
m = re.search(re.escape(BEFORE) + '(?:\n|\\\\n)(.*?)' + re.escape(AFTER), webpage)
if m:
swf_params = m.group(1).replace('\\\\', '\\').replace('\\"', '"')
PATTERN = re.escape(BEFORE) + '(?:\n|\\\\n)(.*?)' + re.escape(AFTER)
for m in re.findall(PATTERN, webpage):
swf_params = m.replace('\\\\', '\\').replace('\\"', '"')
data = dict(json.loads(swf_params)) data = dict(json.loads(swf_params))
params_raw = compat_urllib_parse_unquote(data['params']) params_raw = compat_urllib_parse_unquote(data['params'])
video_data = json.loads(params_raw)['video_data']
video_data_candidate = json.loads(params_raw)['video_data']
for _, f in video_data_candidate.items():
if not f:
continue
if isinstance(f, dict):
f = [f]
if isinstance(f, list):
continue
if f[0].get('video_id') == video_id:
video_data = video_data_candidate
break
def video_data_list2dict(video_data): def video_data_list2dict(video_data):
ret = {} ret = {}


Loading…
Cancel
Save