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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

1229閲覧

YouTube Data APIを使ってチャンネル情報を取得し、CSVファイルに書き出したい。

manafi

総合スコア1

YouTube API

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/09/27 08:54

編集2021/09/27 09:02

前提・実現したいこと

YouTube Data APIを使って、あるキーワードを含むチャンネルの情報を取得しようとしています。

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

情報を格納する配列からデータを取り出して、csvに書き込みたいのですが、空のデータになってしまいます。

エラーメッセージ

### 該当のソースコード from apiclient.discovery import build from apiclient.errors import HttpError from oauth2client.tools import argparser import pandas as pd DEVELOPER_KEY = "キーのパスをコピペしました" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" pip install --upgrade google-api-python-client def youtube_search(pagetoken): youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) search_response = youtube.search().list( part='id,snippet', q='観光協会', type='channel', maxResults=50, pageToken=pagetoken ).execute() channels = [] for search_result in search_response.get("items", []): if search_result["id"]["kind"] == "youtube#channel": channels.append([search_result["snippet"]["title"],search_result["snippet"]["description"],search_result["snippet"]["publishedAt"], search_result["id"]["channelId"]]) try: nextPagetoken = search_response["nextPageToken"] youtube_search(nextPagetoken) except: return channel_report = pd.DataFrame(data=channels, columns=['title', 'description', 'publishedAt', 'channelId'], index=False) channel_report.to_csv('/content/drive/MyDrive/research/channels_report.csv') channel_report.to_csv('/content/drive/MyDrive/research/channels_report.csv', mode='a') ```ここに言語名を入力 python ソースコード

試したこと

printを使って、channel_reportに中身があるか確認しましたが、実行しても何も返ってきませんでした。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

必要なパッケージをインストールした後、以下のコードを実行したところうまくいきました。

python

1def youtube_search(pagetoken, channels): 2 if pagetoken == 0: 3 print('a') 4 youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) 5 search_response = youtube.search().list( 6 part='id,snippet', 7 q='観光協会', 8 type='channel', 9 maxResults=50 10 ).execute() 11 else: 12 youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) 13 search_response = youtube.search().list( 14 part='id,snippet', 15 q='観光協会', 16 type='channel', 17 maxResults=50, 18 pageToken=pagetoken 19 ).execute() 20 21 for search_result in search_response.get("items", []): 22 if search_result["id"]["kind"] == "youtube#channel": 23 channels.append([search_result["snippet"]["title"],search_result["snippet"]["description"],search_result["snippet"]["publishedAt"], 24 search_result["id"]["channelId"]]) 25 print(search_result["snippet"]["title"],search_result["snippet"]["description"],search_result["snippet"]["publishedAt"],search_result["id"]["channelId"]) 26 27 try: 28 nextPagetoken = search_response["nextPageToken"] 29 youtube_search(nextPagetoken, channels) 30 except: 31 return 32 33channel = [] 34youtube_search(0, channel) 35channel_report = pd.DataFrame(data=channel, columns=['title', 'description', 'publishedAt', 'channelId'], index=None) 36channel_report.to_csv('/content/drive/MyDrive/research/channels_report.csv')

投稿2021/10/01 07:36

manafi

総合スコア1

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

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

0

ベストアンサー

ソースコードは実際に動かしたものでしょうか?

pip install --upgrade google-api-python-client

というのがコード文中にあるのでまずそこで syntax errorか何かが出るのではないかという予想です

あと、
youtube_search()を呼び出してないようですがどうでしょうか

投稿2021/09/27 09:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

manafi

2021/09/27 09:28

早速のご返信、ありがとうございます。 ソースコードは、google colaboratoryを使って実際に動かしたものです。 pip install --upgrade google-api-python-clientは、実行できました。(以下その部分の実行結果です。) --- Requirement already satisfied: google-api-python-client in /usr/local/lib/python3.7/dist-packages (2.22.0) Requirement already satisfied: httplib2<1dev,>=0.15.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client) (0.17.4) Requirement already satisfied: uritemplate<4dev,>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client) (3.0.1) Requirement already satisfied: google-api-core<3.0.0dev,>=1.21.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client) (1.26.3) Requirement already satisfied: google-auth<3.0.0dev,>=1.16.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client) (1.35.0) Requirement already satisfied: google-auth-httplib2>=0.1.0 in /usr/local/lib/python3.7/dist-packages (from google-api-python-client) (0.1.0) Requirement already satisfied: protobuf>=3.12.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (3.17.3) Requirement already satisfied: requests<3.0.0dev,>=2.18.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (2.23.0) Requirement already satisfied: googleapis-common-protos<2.0dev,>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (1.53.0) Requirement already satisfied: pytz in /usr/local/lib/python3.7/dist-packages (from google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (2018.9) Requirement already satisfied: six>=1.13.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (1.15.0) Requirement already satisfied: packaging>=14.3 in /usr/local/lib/python3.7/dist-packages (from google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (21.0) Requirement already satisfied: setuptools>=40.3.0 in /usr/local/lib/python3.7/dist-packages (from google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (57.4.0) Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.7/dist-packages (from google-auth<3.0.0dev,>=1.16.0->google-api-python-client) (4.7.2) Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from google-auth<3.0.0dev,>=1.16.0->google-api-python-client) (4.2.2) Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from google-auth<3.0.0dev,>=1.16.0->google-api-python-client) (0.2.8) Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging>=14.3->google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (2.4.7) Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3.0.0dev,>=1.16.0->google-api-python-client) (0.4.8) Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (2.10) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (2021.5.30) Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (3.0.4) Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0dev,>=2.18.0->google-api-core<3.0.0dev,>=1.21.0->google-api-python-client) (1.24.3) [38] 0 秒 --- youtube_search()についてですが、以下の部分で呼び出していると認識していたのですが、これは誤解でしょうか? --- search_response = youtube.search().list( part='id,snippet', q='観光協会', type='channel', maxResults=50, pageToken=pagetoken ).execute() ご指摘いただいた点についての解釈で誤解がありましたら申し訳ございません。 引き続きよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2021/09/27 09:49

def youtube_search(pagetoken): と定義したこの関数自体の呼び出しですね def myfunc(): print('hello') と定義した関数は myfunc() と呼び出さないと実行されませんが、同様に youtube_search() を呼び出していたかどうかという感じです。
manafi

2021/09/27 10:12

関数の呼び出しについて例を用いながら分かりやすくご説明いただきありがとうございます! 最後にyoutube_search()を加えて実行したところ、エラーもなく実行できました。 ただ、やはりscvファイルの中身は空のままです。 そのほかに考えられる原因がありましたら、ご教授いただけないでしょうか?
退会済みユーザー

退会済みユーザー

2021/09/27 10:27

一点気になるのは おそらくですが、to_csvが2行並んでるところは 1行目の処理は上書きで書き込み、2行目の処理は追記で書き込みで 結果2倍のデータが書き込まれないでしょうか この関数が再起的に自分自身を呼び続ける構造なので mode='a' のある2行目の方だけでいいのではないかということと あとは、どの段階でデータがないのかをprintでもいいので出して見てみる等でしょうか 例えば channel_report = pd.DataFrame(data=channels, 〜 の上に print(len(channels)) を出してみてCSVに吐き出す直前にその変数に値が入ってきているのか
manafi

2021/10/01 07:33

ご返信ありがとうございました。アドバイスいただいた通りprintを要所要所に差し込んでみたところ、そもそもデータが取得できていなかったので、インデントの変更等、様々なことを試して解決しました。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問