🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

YouTube

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

YouTube API

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

Python

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

Q&A

解決済

2回答

1543閲覧

YouTube動画のコメントを取得するコードのエラー

sasaki-

総合スコア4

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

YouTube

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

YouTube API

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

Python

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

0グッド

0クリップ

投稿2021/02/07 11:05

編集2021/02/07 11:10

前提・実現したいこと

YouTubeのコメントを取得するシステム作成中のエラーメッセージ(参考記事あり)

発生している問題・エラーメッセージ

Traceback (most recent call last): File "/home/ubuntu/environment/youtube.py", line 30, in <module> print_video_comment(video_id, n=5) File "/home/ubuntu/environment/youtube.py", line 17, in print_video_comment resource = response.json() File "/home/ubuntu/.pyenv/versions/3.8.3/lib/python3.8/site-packages/requests/models.py", line 900, in json return complexjson.loads(self.text, **kwargs) File "/home/ubuntu/.pyenv/versions/3.8.3/lib/python3.8/json/__init__.py", line 357, in loads return _default_decoder.decode(s) File "/home/ubuntu/.pyenv/versions/3.8.3/lib/python3.8/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/home/ubuntu/.pyenv/versions/3.8.3/lib/python3.8/json/decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) Process exited with code: 0

該当のソースコード

python import requests import json URL = 'https://www.youtube.com/watch?v=OfZ58k3LvyQ' #適当な動画のURL API_KEY = '#自分のAPIキー' def print_video_comment(video_id, n=10): params = { 'key': API_KEY, 'part': 'snippet', 'videoId': video_id, 'order': 'relevance', 'textFormat': 'plaintext', 'maxResults': n, } response = requests.get(URL + 'commentThreads', params=params) resource = response.json() for comment_info in resource['items']: # コメント text = comment_info['snippet']['topLevelComment']['snippet']['textDisplay'] # グッド数 like_cnt = comment_info['snippet']['topLevelComment']['snippet']['likeCount'] # 返信数 reply_cnt = comment_info['snippet']['totalReplyCount'] print('{}\nグッド数: {} 返信数: {}\n'.format(text, like_cnt, reply_cnt)) video_id = 'hoge' print_video_comment(video_id, n=5)

試したこと

●import requestsが正常にインストールされていることを確認
●requests などのモジュールの格納先と、pythonが確認するパスの一致を確認
●レスポンスがjson形式になっていることを確認

補足情報(FW/ツールのバージョンなど)

参考にした記事のURL
https://qiita.com/Doarakko/items/191209bf14cf5d76fa6f

macOS, python3.8.5, jupyter

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

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

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

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

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

guest

回答2

0

コメント取得の際に使うURLは、「適当な動画のURL」ではないからです。

https://www.googleapis.com/youtube/v3/commentThreadsを付け、さらにパラメーターを追加します。

対象の動画はパラメーターの中で指定します。

あなたが参考にした記事のコードもそうなっていますよね。

投稿2021/02/07 11:29

Daregada

総合スコア11990

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

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

sasaki-

2021/02/07 11:32

そういうことだったのですね。完全に見落としていました。回答ありがとうございました
guest

0

ベストアンサー

・URL('https://www.googleapis.com/youtube/v3/')は、元記事から変える必要はありません。(変えると正しく取得できません)

・記事のここ
「video_idとは何か」ということがちゃんと説明してあります。

(なお#自分のAPIキーの部分は、当然自分で取得したAPIキーに変えないと正常に動きません)

import requests import json URL = 'https://www.googleapis.com/youtube/v3/' API_KEY = '#自分のAPIキー' def print_video_comment(video_id, n=10): params = { 'key': API_KEY, 'part': 'snippet', 'videoId': video_id, 'order': 'relevance', 'textFormat': 'plaintext', 'maxResults': n, } response = requests.get(URL + 'commentThreads', params=params) resource = response.json() for comment_info in resource['items']: # コメント text = comment_info['snippet']['topLevelComment']['snippet']['textDisplay'] # グッド数 like_cnt = comment_info['snippet']['topLevelComment']['snippet']['likeCount'] # 返信数 reply_cnt = comment_info['snippet']['totalReplyCount'] print('{}\nグッド数: {} 返信数: {}\n'.format(text, like_cnt, reply_cnt)) # 適当な動画のID。idは動画urlの「?v=」以降の11文字。 video_id = 'U5Cr1_jv5-E' print_video_comment(video_id, n=5)

投稿2021/02/07 11:21

編集2021/02/07 11:25
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sasaki-

2021/02/07 11:33

そういうことだったのですね。変えてはいけない部分ということを理解していませんでした。回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問