def add_video_to_queue(self, vid_data): youtube = client.YoutubeClientHandler() body = { 'snippet': { 'playlistId': self.queue_id, 'resourceId': { 'kind': "youtube#video", 'videoId': vid_data['id'] } } } try: logger.write("Adding to queue: %s - %s" % (vid_data['snippet']['channelTitle'], vid_data['snippet']['title'])) request = youtube.client.playlistItems().insert(part='snippet', body=body) response = youtube.execute(request) self.records.add_record(vid_data=vid_data) except googleapiclient.errors.HttpError as e: print(e.content) print(e.error_details) print(e.resp) raise return response
def main(): handler = client.YoutubeClientHandler() request = handler.client.channels().list( part="snippet,contentDetails,statistics", id="UC_x5XG1OV2P6uZZ5FSM9Ttw") response = request.execute() print(response) return None
def get_latest(self, all=False): logger.write("Getting latest videos: %s" % self.name) youtube = client.YoutubeClientHandler() request = youtube.client.playlistItems().list( part="contentDetails", maxResults=50, playlistId=self.playlist_id) response = youtube.execute(request) items = response['items'] pages = 1 if all: while 'nextPageToken' in response: request = youtube.client.playlistItems().list( part="contentDetails", maxResults=50, playlistId=self.playlist_id, pageToken=response['nextPageToken']) response = youtube.execute(request) items = items + response['items'] pages += 1 logger.write("Pages of videos for %s: %i" % (self.name, pages)) logger.write("Videos fetched for %s: %i" % (self.name, len(items))) request_list = [[]] counter = 0 total = 0 page = 0 results = [] for item in items: vid_id = item['contentDetails']['videoId'] published_date = str(item['contentDetails']['videoPublishedAt'] ).split('.')[0].replace("Z", "") + ".0" record = { 'videoId': vid_id, 'publishedAt': datetime.strptime(published_date, self.date_format), 'channelId': self.channel_id } if self.vid_is_valid(record): request_list[page].append(vid_id) counter += 1 total += 1 if counter == 50: counter = 0 request_list.append([]) page += 1 logger.write("Videos requiring additional details for %s: %i" % (self.name, total)) page_num = 0 threads = [] for page_list in request_list: id_list = ",".join(page_list) kwargs = {"part": "snippet", "id": id_list} page_id = "%s Page %i" % (self.name, page_num) page_num += 1 request = RequestThreader(page_id=page_id, request_kwargs=kwargs) threads.append(request) for thread in threads: thread.start() for thread in threads: thread.join() for thread in threads: # response = thread.response # request = youtube.client.videos().list(**kwargs) # response = youtube.execute(request) results += thread.response['items'] for vid_details in results: vid_details['snippet']['publishedAt'] = self.correct_date_format( vid_details['snippet']['publishedAt']) results = sorted(results, reverse=True, key=lambda x: x['snippet']['publishedAt']) self.newest = results
def run(self): logger.write("Starting RequestThreader thread: %s" % self.name) youtube = client.YoutubeClientHandler() request = youtube.client.videos().list(**self.kwargs) self.response = youtube.execute(request)
def __init__(self, **kwargs): self.tier = kwargs['tier'] self.id = kwargs['id'] self.videos = [] self.client = client.YoutubeClientHandler().get_client()