前提・実現したいこと
pythonでyoutubeapiを使いユーザーのコメントを全て取得したいと思っています。
将来的にコメントの削除なども行いたいと考えている為、OAuthを用いた実装をしています。
とりあえず、コメント全て取得できたらいいと思ってはいるのですが
プログラミングがほぼ素人かつpython vscode共に初めてで書き方がわからず
エラーがでて手詰まりの状況です。
try APIではこのように取得できました
{ "kind": "youtube#commentThreadListResponse", "etag": "qwoiBWORVUK77dWq4-EcXl6is-U", "pageInfo": { "totalResults": 3, "resultsPerPage": 5 }, "items": [ { "kind": "youtube#commentThread", "etag": "RJJDAsUvFH8jvQ1Gk8rIk-VDqCE", "id": "UgxQnfHrQZGPpZIKpyx4AaABAg", "snippet": { "channelId": "UCI5GEMThsP34XaNub-4U-0A", "videoId": "25vyH1O8f44", "topLevelComment": { "kind": "youtube#comment", "etag": "C2cH9UBkSisYR3fD_ROYpGOP-5o", "id": "UgxQnfHrQZGPpZIKpyx4AaABAg", "snippet": { "channelId": "UCI5GEMThsP34XaNub-4U-0A", "videoId": "25vyH1O8f44", "textDisplay": "もうあかん", "textOriginal": "もうあかん", "authorDisplayName": "えんでばば", "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AAUvwng_n-hnnyaMkHi-VmnF_NfBiv4S1ATi_K8PUw=s48-c-k-c0xffffffff-no-rj-mo", "authorChannelUrl": "http://www.youtube.com/channel/UCI5GEMThsP34XaNub-4U-0A", "authorChannelId": { "value": "UCI5GEMThsP34XaNub-4U-0A" }, "canRate": true, "viewerRating": "none", "likeCount": 0, "publishedAt": "2021-04-22T15:56:09Z", "updatedAt": "2021-04-22T15:56:09Z" } }, "canReply": true, "totalReplyCount": 0, "isPublic": true } },
発生している問題・エラーメッセージ
本名はほげに変えています
Refreshing Access Token... Traceback (most recent call last): File "/Users/ほげ/Desktop/CommentFilter/main.py", line 46, in <module> response = request.execute() File "/Users/ほげ/.pyenv/versions/3.9.4/lib/python3.9/site-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper return wrapped(*args, **kwargs) File "/Users/ほげ/.pyenv/versions/3.9.4/lib/python3.9/site-packages/googleapiclient/http.py", line 935, in execute raise HttpError(resp, content, uri=self.uri) googleapiclient.errors.HttpError: <HttpError 403 when requesting https://youtube.googleapis.com/youtube/v3/commentThreads?part=snippet&allThreadsRelatedToChannelId=%3Cgoogle.oauth2.credentials.Credentials+object+at+0x1073422e0%3E&maxResults=5&alt=json returned "Request had insufficient authentication scopes.". Details: "[{'message': 'Insufficient Permission', 'domain': 'global', 'reason': 'insufficientPermissions'}]">
該当のソースコード
python
1import os 2import pickle 3from google_auth_oauthlib.flow import InstalledAppFlow 4from google.auth.transport.requests import Request 5from googleapiclient.discovery import build 6ユーザーに権限をリクエスト ↓ 7 8credentials = None 9 10if os.path.exists("token.pickle"): 11 print("Loading Credentials Form File...") 12 with open("token.pickle","rb") as token: 13 credentials = pickle.load(token) 14 15if not credentials or not credentials.valid: 16 if credentials and credentials.expired and credentials.refresh_token: 17 print("Refreshing Access Token...") 18 credentials.refresh(Request()) 19 else: 20 print("Fetching New Tokens...") 21 flow = InstalledAppFlow.from_client_secrets_file( 22 "client_secrets.json", 23 scopes = ['https://www.googleapis.com/auth/youtube.readonly'] 24 ) 25 flow.run_local_server( 26 port=8080, prompt="consent", authorization_prompt_message="" 27 ) 28 29 credentials = flow.credentials 30 31 with open("token.pickle","wb") as f: 32 print("Saveing Credentails for Future Use....") 33 pickle.dump(credentials, f) 34 35ユーザーに権限をリクエスト ↑ 36 37 38ユーザーに紐付けられている動画のコメントを全取得し、printする ↓ 39 40youtube = build('youtube', 'v3',credentials=credentials) 41 42request = youtube.commentThreads().list( 43 part="snippet", 44 allThreadsRelatedToChannelId=credentials, 45 maxResults=5 46) 47 48response = request.execute() 49print(response) 50 51ユーザーに紐付けられている動画のコメントを全取得し、printする ↑
###分からないこと
1、allThreadsRelatedToChannelIdにはcredentialsを入れているが大丈夫なのか?
普通ならyoutubeのチャンネルIDをいれる。
2、youtubeインスタンスの作成時build(...)のようにしているが、try APIでは
このようにgoogleapicilient.discoveryを前につけている事、
ちなみに前につけて実行した結果はgoogleapicilientが不明と出たのでremoveしました。
3、シンプルに書き方がわかりません。
補足情報(FW/ツールのバージョンなど)
python 3.9.4
vscode
参考にしたサイト
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。