| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | # Youtube (Videos)## @website     https://www.youtube.com/# @provide-api yes (https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.search.list)## @using-api   yes# @results     JSON# @stable      yes# @parse       url, title, content, publishedDate, thumbnail, embeddedfrom json import loadsfrom urllib import urlencodefrom dateutil import parser# engine dependent configcategories = ['videos', 'music']paging = Falselanguage_support = Trueapi_key = None# search-urlbase_url = 'https://www.googleapis.com/youtube/v3/search'search_url = base_url + '?part=snippet&{query}&maxResults=20&key={api_key}'embedded_url = '<iframe width="540" height="304" ' +\    'data-src="//www.youtube-nocookie.com/embed/{videoid}" ' +\    'frameborder="0" allowfullscreen></iframe>'base_youtube_url = 'https://www.youtube.com/watch?v='# do search-requestdef request(query, params):    params['url'] = search_url.format(query=urlencode({'q': query}),                                      api_key=api_key)    # add language tag if specified    if params['language'] != 'all':        params['url'] += '&relevanceLanguage=' + params['language'].split('-')[0]    return params# get response from search-requestdef response(resp):    results = []    search_results = loads(resp.text)    # return empty array if there are no results    if 'items' not in search_results:        return []    # parse results    for result in search_results['items']:        videoid = result['id']['videoId']        title = result['snippet']['title']        content = ''        thumbnail = ''        pubdate = result['snippet']['publishedAt']        publishedDate = parser.parse(pubdate)        thumbnail = result['snippet']['thumbnails']['high']['url']        content = result['snippet']['description']        url = base_youtube_url + videoid        embedded = embedded_url.format(videoid=videoid)        # append result        results.append({'url': url,                        'title': title,                        'content': content,                        'template': 'videos.html',                        'publishedDate': publishedDate,                        'embedded': embedded,                        'thumbnail': thumbnail})    # return results    return results
 |