[bilibili] Catch API call failures
authorYen Chi Hsuan <yan12125@gmail.com>
Tue, 26 May 2015 20:23:21 +0000 (04:23 +0800)
committerYen Chi Hsuan <yan12125@gmail.com>
Tue, 26 May 2015 20:23:21 +0000 (04:23 +0800)
JSON are returned in a failed API call

youtube_dl/extractor/bilibili.py

index a8bea2c10f36c264a168a33aaae59634e6b930eb..2103ed73aad860738bba5108ee27a86fd921d29c 100644 (file)
@@ -3,6 +3,8 @@ from __future__ import unicode_literals
 
 import re
 import itertools
+import json
+import xml.etree.ElementTree as ET
 
 from .common import InfoExtractor
 from ..utils import (
@@ -67,11 +69,19 @@ class BiliBiliIE(InfoExtractor):
 
         entries = []
 
-        lq_doc = self._download_xml(
+        lq_page = self._download_webpage(
             'http://interface.bilibili.com/v_cdn_play?appkey=1&cid=%s' % cid,
             video_id,
             note='Downloading LQ video info'
         )
+        try:
+            err_info = json.loads(lq_page)
+            raise ExtractorError(
+                'BiliBili said: ' + err_info['error_text'], expected=True)
+        except ValueError:
+            pass
+
+        lq_doc = ET.fromstring(lq_page)
         lq_durls = lq_doc.findall('./durl')
 
         hq_doc = self._download_xml(