2 votes

Obtenir des commentaires sur les vidéos sur Youtube

J'utilise l'API de Google, plus précisément l'API de données de Youtube, pour obtenir les commentaires au-dessus d'une vidéo, en utilisant l'ID de la vidéo. J'utilise l'exemple python de la documentation Google. aquí mais j'ai l'erreur suivante :

Missing property "redirect_uris" in a client type of "web"

Donc, c'est mon fichier client_secrets_....json :

{
    "installed": {
        "client_id":"xxxxxxxxxxxx-xxxxje3a7fk4jbs63g6m1a2mand4sa3h.apps.googleusercontent.com",
        "project_id":"progettotesicuozzo",
        "auth_uri":"https://accounts.google.com/o/oauth2/auth",
        "token_uri":"https://accounts.google.com/o/oauth2/token",
        "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
        "client_secret":"XXXXXXXXXXX",
        "redirect_uris":[
            "urn:ietf:wg:oauth:2.0:oob",
            "http://localhost"
        ]
    }
}

Voici le code :

# Usage example:
# python test.py --videoid='<video_id>' --text='<text>'

import httplib2
import os
import sys
import json

from apiclient.discovery import build_from_document
from apiclient.errors import HttpError
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import argparser, run_flow

CLIENT_SECRETS_FILE = "./client_secret_....json"

YOUTUBE_READ_ONLY_SCOPE = "https://www.googleapis.com/auth/youtube.readonly"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

MISSING_CLIENT_SECRETS_MESSAGE = """WARNING: Please configure OAuth 2.0
    To make this sample run you will need to populate the client_secrets.json file found at: %s with information from the APIs Console https://console.developers.google.com
    For more information about the client_secrets.json file format, please visit: https://developers.google.com /api-client-library/python/guide/aaa_client_secrets""" % os.path.abspath(os.path.join(os.path.dirname(__file__), CLIENT_SECRETS_FILE))

def get_authenticated_service(args):
    flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, scope=YOUTUBE_READ_ONLY_SCOPE, message=MISSING_CLIENT_SECRETS_MESSAGE)

    storage = Storage("%s-oauth2.json" % sys.argv[0])
    credentials = storage.get()

    if credentials is None or credentials.invalid:
        credentials = run_flow(flow, storage, args)

    with open("youtube-v3-discoverydocument.json", "r", encoding="utf8") as f:  
        doc = f.read()
        return build_from_document(doc, http=credentials.authorize(httplib2.Http()))

def get_comment_threads(youtube, video_id):
    results = youtube.commentThreads().list(
        part="snippet",
        videoId=video_id,
        textFormat="plainText"
    ).execute()

    for item in results["items"]:
        comment = item["snippet"]["topLevelComment"]
        author = comment["snippet"]["authorDisplayName"]
        text = comment["snippet"]["textDisplay"]
        print("Comment by " + author + ": " + text)

    return results["items"]

 def get_comments(youtube, parent_id):
    results = youtube.comments().list(
        part="snippet",
        parentId=parent_id,
        textFormat="plainText"
    ).execute()

    for item in results["items"]:
        author = item["snippet"]["authorDisplayName"]
        text = item["snippet"]["textDisplay"]
        print("Comment by " + author + ": " + text)

    return results["items"]

if __name__ == '__main__':
    # The "videoid" option specifies the YouTube video ID that uniquely
    # identifies the video for which the comment will be inserted.
    argparser.add_argument("--videoid", help="Required; ID for video for which the comment will be inserted.")
    # The "text" option specifies the text that will be used as comment.
    #argparser.add_argument("--text", help="Required; text that will be used as comment.")
    args = argparser.parse_args()

    if not args.videoid:
        exit("Please specify videoid using the --videoid= parameter.")

    youtube = get_authenticated_service(args)
    # All the available methods are used in sequence just for the sake of an example.
    try:
        video_comment_threads = get_comment_threads(youtube, args.videoid)
        parent_id = video_comment_threads[0]["id"]
        video_comments = get_comments(youtube, parent_id)
        except HttpError as e:
        print("An HTTP error " + str(e.resp.status) + " occurred:\n" +  json.dumps(str(e.content)))
    else:
        print("Inserted, listed, updated, moderated, marked and deleted comments.")

Comment puis-je bien configurer mon fichier json, s'il vous plaît ?

Après avoir corrigé mon fichier Json, je suis maintenant confronté à cette erreur :

An HTTP error 403 occurred:
{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "insufficientPermissions",
                "message": "Insufficient Permission"
            }
        ],
        "code": 403,
        "message": "Insufficient Permission"
    }
}

J'ai demandé une vidéo personnelle, en utilisant l'ID de l'URL web, mais j'ai obtenu l'erreur, après avoir été invité à la redirect_uri.

2voto

DaImTo Points 3712

Lorsque vous créez votre projet sur console développeur google vous serez invité à télécharger le fichier JSon. Vous ne devez pas modifier ce fichier qui semble avoir supprimé l'URI de redirection. L'URI de redirection est créé dans le cadre des informations d'identification du navigateur. Il est nécessaire pour indiquer au serveur où renvoyer la réponse.

Exemple :

{  
   "web":{  
      "client_id":"xxxxx-i6cjd1hkjntu5bkdkjj5cdnpcu4iju8p.apps.googleusercontent.com",
      "project_id":"daimto-tutorials-101",
      "auth_uri":"https://accounts.google.com/o/oauth2/auth",
      "token_uri":"https://accounts.google.com/o/oauth2/token",
      "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
      "client_secret":"xxxxx",
      "redirect_uris":[  
         "http://localhost/google-api-php-client-samples/Analytics/Oauth2.php",
         "http://localhost/google-api-php-client-samples/Calendar/Oauth2.php"
      ],
      "javascript_origins":[  
         "https://www.example.com"
      ]
   }
}

URIs de redirection autorisés A utiliser avec les demandes provenant d'un serveur web. Ce chemin d'accès de votre application vers lequel les utilisateurs sont redirigés après s'être qu'ils se sont authentifiés auprès de Google. Le chemin d'accès sera complété par le code d'autorisation d'accès. Doit avoir un protocole. Ne peut pas contenir de fragments d'URL ou de chemins relatifs. Ne peut pas être une adresse IP publique.

insufficientPermissions signifie que l'utilisateur avec lequel vous vous authentifiez n'a pas le droit de faire ce que vous essayez de faire. Vous vous êtes authentifié avec un utilisateur et un canal. Vous n'avez accès qu'aux vidéos de ce canal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X