2

私はGoogle API、特にYoutubeのData APIを使用して、ビデオIDを使ってビデオの上にコメントを表示しています。私は、Googleドキュメントhereからのpythonの例を使用していますが、私は次のエラーました:これは私のclient_secretsある_.... JSONファイルYoutubeでビデオコメントを取得

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

ので:

{ 
    "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" 
     ] 
    } 
} 

これはコードです:

# 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.") 

がどのように私はよく私のJSONファイルを設定することができ、してください?私は「の後、私は、Web URLからIDを使用して、私の個人的なビデオを要求してきた

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

が、私はエラーを得た:

私のJSONファイルを修正した後、私は今、このエラーに直面していますredirect_uriにプロンプ​​トが表示されました。

答えて

2

google developer consoleにプロジェクトを作成すると、JSonファイルをダウンロードするように求められます。リダイレクトURIを削除したように見えるこのファイルは変更しないでください。リダイレクトURIは、ブラウザの資格情報の一部として作成されます。応答を返す場所をサーバーに伝える必要があります。

例:

{ 
    "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" 
     ] 
    } 
} 

Authorized redirect URIs For use with requests from a web server. This is the path in your application that users are redirected to after they have authenticated with Google. The path will be appended with the authorization code for access. Must have a protocol. Cannot contain URL fragments or relative paths. Cannot be a public IP address.

insufficientPermissionsは、あなたがで認証されたユーザは、あなたがやろうとしている何をすべきかのアクセス権を持っていないことを意味します。あなたはユーザーとチャンネルで認証されています。そのチャンネル内の動画にのみアクセスできます。

+0

投稿を更新しました:) –

+0

これは、質問内で一度に1つの質問に固執すべき別の質問です。そして、あなたは次の人を助けてくれる元の質問から物を取り除くべきではありません。私の更新を確認してください。 – DaImTo

関連する問題