How to get comments from videos using YouTube API v3 and Python?

前端 未结 5 1964
陌清茗
陌清茗 2021-02-02 04:40

I\'ve been trying to get comments (both threads and replies) from a given video on YouTube using Python (as an exercise to learn the language).

Based on the examples giv

5条回答
  •  清酒与你
    2021-02-02 04:49

    Im using this code

    import os
    import pickle
    import google.oauth2.credentials
    from googleapiclient.discovery import build
    from googleapiclient.errors import HttpError
    from google_auth_oauthlib.flow import InstalledAppFlow
    from google.auth.transport.requests import Request
    
    CLIENT_SECRETS_FILE = "client_secret.json" # for more information  to create your credentials json please visit https://python.gotrained.com/youtube-api-extracting-comments/
    SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']
    API_SERVICE_NAME = 'youtube'
    API_VERSION = 'v3'
    
    def get_authenticated_service():
        credentials = None
        if os.path.exists('token.pickle'):
            with open('token.pickle', 'rb') as token:
                credentials = pickle.load(token)
        #  Check if the credentials are invalid or do not exist
        if not credentials or not credentials.valid:
            # Check if the credentials have expired
            if credentials and credentials.expired and credentials.refresh_token:
                credentials.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file(
                    CLIENT_SECRETS_FILE, SCOPES)
                credentials = flow.run_console()
    
            # Save the credentials for the next run
            with open('token.pickle', 'wb') as token:
                pickle.dump(credentials, token)
    
        return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)
    
    def get_video_comments(service, **kwargs):
        comments = []
        results = service.commentThreads().list(**kwargs).execute()
        while results:
            for item in results['items']:
                comment = item['snippet']['topLevelComment']['snippet']['textDisplay']
                comments.append(comment)
            # Check if another page exists
            if 'nextPageToken' in results:
                kwargs['pageToken'] = results['nextPageToken']
                results = service.commentThreads().list(**kwargs).execute()
            else:
                break
    
        return comments
    
    
    if __name__ == '__main__':
        # When running locally, disable OAuthlib's HTTPs verification. When
        # running in production *do not* leave this option enabled.
        os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
        service = get_authenticated_service()
        videoId = input('Enter Video id : ') # video id here (the video id of https://www.youtube.com/watch?v=vedLpKXzZqE -> is vedLpKXzZqE)
        comments = get_video_comments(service, part='snippet', videoId=videoId, textFormat='plainText')
    
    print(len(comments),comments)
    

    good luck

提交回复
热议问题