質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1122閲覧

[Python×YoutubeAPI] クレデンシャルを用い全て動画のコメントを取得したい

endiv

総合スコア161

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/23 16:54

前提・実現したいこと

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

参考にしたサイト

Auth機能・権限のリクエスト
youtubeコメントについて
コメント全取得メソッド

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

他の解決策を見つけたためこちらの質問を閉じます

投稿2021/04/25 11:31

endiv

総合スコア161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問