88def response(resp):
89 """Get response from google's search request"""
90 results = []
91
92 detect_google_sorry(resp)
93 data_image_map = parse_data_images(resp.text)
94
95
96 dom = html.fromstring(resp.text)
97
98 result_divs = eval_xpath_list(dom, '//div[contains(@class, "MjjYud")]')
99
100
101 for result in result_divs:
102 title = extract_text(
103 eval_xpath_getindex(result, './/h3[contains(@class, "LC20lb")]', 0, default=None), allow_none=True
104 )
105 url = eval_xpath_getindex(result, './/a[@jsname="UWckNb"]/@href', 0, default=None)
106 content = extract_text(
107 eval_xpath_getindex(result, './/div[contains(@class, "ITZIwc")]', 0, default=None), allow_none=True
108 )
109 pub_info = extract_text(
110 eval_xpath_getindex(result, './/div[contains(@class, "gqF9jc")]', 0, default=None), allow_none=True
111 )
112
113 thumbnail = eval_xpath_getindex(result, './/img/@src', 0, default=None)
114 duration = extract_text(
115 eval_xpath_getindex(result, './/span[contains(@class, "k1U36b")]', 0, default=None), allow_none=True
116 )
117 video_id = eval_xpath_getindex(result, './/div[@jscontroller="rTuANe"]/@data-vid', 0, default=None)
118
119
120 if not video_id and url and 'youtube.com' in url:
121 parsed_url = urlparse(url)
122 video_id = parse_qs(parsed_url.query).get('v', [None])[0]
123
124
125 if thumbnail and thumbnail.startswith('data:image'):
126 img_id = eval_xpath_getindex(result, './/img/@id', 0, default=None)
127 if img_id and img_id in data_image_map:
128 thumbnail = data_image_map[img_id]
129 else:
130 thumbnail = None
131 if not thumbnail and video_id:
132 thumbnail = f"https://img.youtube.com/vi/{video_id}/hqdefault.jpg"
133
134
135 embed_url = None
136 if video_id:
137 embed_url = get_embeded_stream_url(f"https://www.youtube.com/watch?v={video_id}")
138 elif url:
139 embed_url = get_embeded_stream_url(url)
140
141
142 if title and url:
143 results.append(
144 {
145 'url': url,
146 'title': title,
147 'content': content or '',
148 'author': pub_info,
149 'thumbnail': thumbnail,
150 'length': duration,
151 'iframe_src': embed_url,
152 'template': 'videos.html',
153 }
154 )
155
156
157 for suggestion in eval_xpath_list(dom, suggestion_xpath):
158 results.append({'suggestion': extract_text(suggestion)})
159
160 return results