|
@@ -34,6 +34,22 @@ title_xpath = './/div[@class="yt-lockup-content"]/h3/a'
|
34
|
34
|
content_xpath = './/div[@class="yt-lockup-content"]/div[@class="yt-lockup-description yt-ui-ellipsis yt-ui-ellipsis-2"]'
|
35
|
35
|
|
36
|
36
|
|
|
37
|
+# get element in list or default value
|
|
38
|
+def list_get(a_list, index, default=None):
|
|
39
|
+ if len(a_list) > index:
|
|
40
|
+ return a_list[index]
|
|
41
|
+ else:
|
|
42
|
+ return default
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+# returns extract_text on the first result selected by the xpath or None
|
|
46
|
+def extract_text_from_dom(result, xpath):
|
|
47
|
+ r = result.xpath(xpath)
|
|
48
|
+ if len(r) > 0:
|
|
49
|
+ return extract_text(r[0])
|
|
50
|
+ return None
|
|
51
|
+
|
|
52
|
+
|
37
|
53
|
# do search-request
|
38
|
54
|
def request(query, params):
|
39
|
55
|
params['url'] = search_url.format(query=quote_plus(query),
|
|
@@ -50,23 +66,23 @@ def response(resp):
|
50
|
66
|
|
51
|
67
|
# parse results
|
52
|
68
|
for result in dom.xpath(results_xpath):
|
53
|
|
- videoid = result.xpath('@data-context-item-id')[0]
|
54
|
|
-
|
55
|
|
- url = base_youtube_url + videoid
|
56
|
|
- thumbnail = 'https://i.ytimg.com/vi/' + videoid + '/hqdefault.jpg'
|
57
|
|
-
|
58
|
|
- title = extract_text(result.xpath(title_xpath)[0])
|
59
|
|
- content = extract_text(result.xpath(content_xpath)[0])
|
60
|
|
-
|
61
|
|
- embedded = embedded_url.format(videoid=videoid)
|
62
|
|
-
|
63
|
|
- # append result
|
64
|
|
- results.append({'url': url,
|
65
|
|
- 'title': title,
|
66
|
|
- 'content': content,
|
67
|
|
- 'template': 'videos.html',
|
68
|
|
- 'embedded': embedded,
|
69
|
|
- 'thumbnail': thumbnail})
|
|
69
|
+ videoid = list_get(result.xpath('@data-context-item-id'), 0)
|
|
70
|
+ if videoid is not None:
|
|
71
|
+ url = base_youtube_url + videoid
|
|
72
|
+ thumbnail = 'https://i.ytimg.com/vi/' + videoid + '/hqdefault.jpg'
|
|
73
|
+
|
|
74
|
+ title = extract_text_from_dom(result, title_xpath) or videoid
|
|
75
|
+ content = extract_text_from_dom(result, content_xpath)
|
|
76
|
+
|
|
77
|
+ embedded = embedded_url.format(videoid=videoid)
|
|
78
|
+
|
|
79
|
+ # append result
|
|
80
|
+ results.append({'url': url,
|
|
81
|
+ 'title': title,
|
|
82
|
+ 'content': content,
|
|
83
|
+ 'template': 'videos.html',
|
|
84
|
+ 'embedded': embedded,
|
|
85
|
+ 'thumbnail': thumbnail})
|
70
|
86
|
|
71
|
87
|
# return results
|
72
|
88
|
return results
|