Skip to content
Snippets Groups Projects
client.py 1.61 KiB
Newer Older
  • Learn to ignore specific revisions
  • import threading
    
    from apiclient.discovery import build
    from apiclient.errors import HttpError
    from oauth2client.tools import argparser
    
    from django.conf import settings
    
    # Set DEVELOPER_KEY to the API key value from the APIs & auth > Registered apps
    # tab of
    #   https://cloud.google.com/console
    # Please ensure that you have enabled the YouTube Data API for your project.
    DEVELOPER_KEY = settings.FUNKWHALE_PROVIDERS['youtube']['api_key']
    YOUTUBE_API_SERVICE_NAME = "youtube"
    YOUTUBE_API_VERSION = "v3"
    VIDEO_BASE_URL = 'https://www.youtube.com/watch?v={0}'
    
    
    def _do_search(query):
        youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
        developerKey=DEVELOPER_KEY)
    
        return youtube.search().list(
            q=query,
            part="id,snippet",
            maxResults=25
        ).execute()
    
    
    class Client(object):
    
        def search(self, query):
            search_response = _do_search(query)
            videos = []
            for search_result in search_response.get("items", []):
                if search_result["id"]["kind"] == "youtube#video":
                    search_result['full_url'] = VIDEO_BASE_URL.format(search_result["id"]['videoId'])
                    videos.append(search_result)
            return videos
    
        def search_multiple(self, queries):
            results = {}
    
            def search(key, query):
                results[key] = self.search(query)
    
            threads = [
                threading.Thread(target=search, args=(key, query,))
                for key, query in queries.items()
            ]
            for thread in threads:
                thread.start()
            for thread in threads:
                thread.join()
    
            return results
    
    client = Client()