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

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

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

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

YouTube API

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

Python

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

Q&A

2回答

1280閲覧

KIVYでYoutubeコメントを表示したい

vertfee419

総合スコア0

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

YouTube API

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

Python

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

0グッド

2クリップ

投稿2020/09/22 15:02

前提・実現したいこと

現在、Youtubeから取得したコメントをkivy上に出力したいと考えています
kivyを使うのが初めてで、いろいろ調べてLabelかRecycleViewでできるのかと思い挑戦しているのですがうまくいきません。アドバイス頂きたいです

該当のソースコード

python

1from kivy.app import App 2from kivy.uix.label import Label 3import requests 4import json 5 6URL = 'https://www.googleapis.com/youtube/v3/' 7API_KEY = 'APIキー' 8video_id = '動画ID' 9 10class MyApp(App): 11 def build(self): 12 def print_video_comment(video_id, n=10): 13 params = { 14 'key': API_KEY, 15 'part': 'snippet', 16 'videoId': video_id, 17 'order': 'relevance', 18 'textFormat': 'plaintext', 19 'maxResults': n, 20 } 21 response = requests.get(URL + 'commentThreads', params=params) 22 resource = response.json() 23 24 for comment_info in resource['items']: 25 # コメント 26 text = comment_info['snippet']['topLevelComment']['snippet']['textDisplay'] 27 return Label(text) 28MyApp().run() 29 30print_video_comment(video_id, n=5)

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

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

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

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

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

guest

回答2

0

問題点が複数あります。

コードを追加する際に、ひとつづつprint()等でコードが実行されているかどうかを
確認して見てください。

  • print_video_comment が build内のinner 関数 → 外部から参照できません。
  • 呼び出しが MyApp().run() の後ろ → ウィンドウが閉じられた後に実行されます。
  • for text in ... text 変数を上書きしてるため、最後の要素のみが取り出されます
  • return が無効な位置にある ... 対応するインデントを確認してください

まずは、youtubeコメントに関するデータ通信無しで、
プログラム内で仮のコメントデータを作って 適当なウィジェットに表示して見ましょう。

次にコメント所得のタイミングについて、
起動時に表示したいのであれば on_start メソッド内にコードを書きます。

  • コメントを所得する関数 → コメントのリストを返す (テスト時は仮で適当なデータのリストを返す)
  • コメントを表示する関数 → コメントのリストを引数に取る

といった感じに関数を作り、関数自体が適切なタイミングで呼び出されているかどうかを確認
呼び出されているのを確認してから、目的の機能を実装していきましょう。


他の問題点として、request モジュールはブロッキングが発生する為、
GUIの表示中に呼び出すと、通信に時間が掛かったりするとGUIが応答なしになってしまいます。
対策方法は

  • kivy の提供する UrlRequest を使う
  • スレッドでrequestを使う

 通信部分は既存のコードでコメントのデータは得られますが、
受信したデータをGUIに反映される為には何らかのスレッド間通信が必要です。

投稿2020/09/23 10:37

teamikl

総合スコア8664

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

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

vertfee419

2020/09/23 14:04

```python import requests import json URL = 'https://www.googleapis.com/youtube/v3/' API_KEY = 'APIキー' video_id = 'videoid' def print_video_comment(video_id, n=78): params = { 'key': API_KEY, 'part': 'snippet', 'videoId': video_id, 'order': 'relevance', 'textFormat': 'plaintext', 'maxResults': n, } response = requests.get(URL + 'commentThreads', params=params) resource = json.loads(response.text) for comment_info in resource['items']: # コメント text = comment_info['snippet']['topLevelComment']['snippet']['textDisplay'] if ':' in text: print(text) else: pass print_video_comment(video_id, n=78) ``` これでpythonでは出力できました 参考にしてkivyへの出力やってみます
guest

0

まずしたい事は

URL

1https://www.googleapis.com/youtube/v3/commentThreads?type=video&part=snippet&videoId=DrvdlqLzfEc&order=relevance&textFormat=plaintext&maxResults=10&key=APIKey

という事だよね
そうすると応答は

JSON

1{ 2 "kind": "youtube#commentThreadListResponse", 3 "etag": "YISswPtzBoZi60NytCo1QBAHnGM", 4 "nextPageToken": "QURTSl9pMnN6X3Axd0s5WTNwNjE2aVhlQWYtbUV1ZTZRdUxNM3lXZmE2MTBvVkhSTHlONm5oRUV2NXdGTWpNUHI0UW1SSVNwVlBEWTFvU3BZN0hzN2MxREZZRVMwVjF4TXZaTkw2alNKb1FDMHVGQXEwVDNNT2JlQ3RBdnI1VjNrUEhKbXQ4d0hmdFJma0pDNklIRi05ZHVsWjF0MGU5M1FpMWpYallJNkthLUVsLWVEekp5V0wwdnZDZjlnQXhBOGNmag==", 5 "pageInfo": { 6 "totalResults": 10, 7 "resultsPerPage": 10 8 }, 9 "items": [ 10 { 11 "kind": "youtube#commentThread", 12 "etag": "BkeAmnM3X1BKecuuy8qVF1p8ZmE", 13 "id": "UgxDbsi5X3D6TT_OgwF4AaABAg", 14 "snippet": { 15 "videoId": "DrvdlqLzfEc", 16 "topLevelComment": { 17 "kind": "youtube#comment", 18 "etag": "ebTb2t2ANIEVtuKOf7UQjmewczU", 19 "id": "UgxDbsi5X3D6TT_OgwF4AaABAg", 20 "snippet": { 21 "videoId": "DrvdlqLzfEc", 22 "textDisplay": "トトさん、本当に優しい????\nこんなに面倒見のいい、わんこさんがいれば、ママさんも安心できますね?\nジジさんも、娘ちゃんが怖がらないから、本気でうなってはいないんですね!\n娘ちゃんも、本当に本当に可愛い٩(♡ε♡ )۶", 23 "textOriginal": "トトさん、本当に優しい????\nこんなに面倒見のいい、わんこさんがいれば、ママさんも安心できますね?\nジジさんも、娘ちゃんが怖がらないから、本気でうなってはいないんですね!\n娘ちゃんも、本当に本当に可愛い٩(♡ε♡ )۶", 24 "authorDisplayName": "manyu manyu", 25 "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJzyg4P8Rq_aSV0ASpw9gNFpapL_iWk-515yRZ-y=s48-c-k-c0xffffffff-no-rj-mo", 26 "authorChannelUrl": "http://www.youtube.com/channel/UC2zGVGqtrqcmS6avyrAyXgQ", 27 "authorChannelId": { 28 "value": "UC2zGVGqtrqcmS6avyrAyXgQ" 29 }, 30 "canRate": true, 31 "viewerRating": "none", 32 "likeCount": 6, 33 "publishedAt": "2020-09-22T10:40:29Z", 34 "updatedAt": "2020-09-22T10:40:29Z" 35 } 36 }, 37 "canReply": true, 38 "totalReplyCount": 0, 39 "isPublic": true 40 } 41 }, 42 { 43 "kind": "youtube#commentThread", 44 "etag": "EEmJOXDXUDXCJXz8ytKxzckvI5A", 45 "id": "UgxY97CsB7_xm1oDeQF4AaABAg", 46 "snippet": { 47 "videoId": "DrvdlqLzfEc", 48 "topLevelComment": { 49 "kind": "youtube#comment", 50 "etag": "tLU6CtiDxya-TgFlKRCNwHCCluc", 51 "id": "UgxY97CsB7_xm1oDeQF4AaABAg", 52 "snippet": { 53 "videoId": "DrvdlqLzfEc", 54 "textDisplay": "ぬいぐるみをもっていってあげる姿がなんとも言えない????❤️愛ですね✨", 55 "textOriginal": "ぬいぐるみをもっていってあげる姿がなんとも言えない????❤️愛ですね✨", 56 "authorDisplayName": "ALIPAY", 57 "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJzZI3jLASydi9WIkEoEI3dw7eRvm8qZeAD7pg=s48-c-k-c0xffffffff-no-rj-mo", 58 "authorChannelUrl": "http://www.youtube.com/channel/UCfxvMNhBjdjP-TXCYE70YsQ", 59 "authorChannelId": { 60 "value": "UCfxvMNhBjdjP-TXCYE70YsQ" 61 }, 62 "canRate": true, 63 "viewerRating": "none", 64 "likeCount": 5, 65 "publishedAt": "2020-09-22T10:30:50Z", 66 "updatedAt": "2020-09-22T10:30:50Z" 67 } 68 }, 69 "canReply": true, 70 "totalReplyCount": 0, 71 "isPublic": true 72 } 73 }, 74 { 75 "kind": "youtube#commentThread", 76 "etag": "JXwJeNm8u6sWXInOOSIGEtcu3ho", 77 "id": "Ugy2r1QDWKSi-io74Jh4AaABAg", 78 "snippet": { 79 "videoId": "DrvdlqLzfEc", 80 "topLevelComment": { 81 "kind": "youtube#comment", 82 "etag": "iR0nDAR_hGuJ5QzH4MdNtD9myJo", 83 "id": "Ugy2r1QDWKSi-io74Jh4AaABAg", 84 "snippet": { 85 "videoId": "DrvdlqLzfEc", 86 "textDisplay": "こんばんは\nいつも楽しく拝見しています\nトトさんととジジさんが娘さんに優しく触れあっているところを見ていると幸せな気持ちになります。\n\n娘さんも可愛く僕の息子の幼い頃を思い出します\n今は立派な高校1年生ですが????", 87 "textOriginal": "こんばんは\nいつも楽しく拝見しています\nトトさんととジジさんが娘さんに優しく触れあっているところを見ていると幸せな気持ちになります。\n\n娘さんも可愛く僕の息子の幼い頃を思い出します\n今は立派な高校1年生ですが????", 88 "authorDisplayName": "パパゆうとの", 89 "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJxlHxFjfbz6TSlF0povFlLO4cDvqy6hQXP0Fg=s48-c-k-c0xffffffff-no-rj-mo", 90 "authorChannelUrl": "http://www.youtube.com/channel/UCDDnM9QA42pYNqn7PIzzq9w", 91 "authorChannelId": { 92 "value": "UCDDnM9QA42pYNqn7PIzzq9w" 93 }, 94 "canRate": true, 95 "viewerRating": "none", 96 "likeCount": 5, 97 "publishedAt": "2020-09-22T10:46:03Z", 98 "updatedAt": "2020-09-22T10:46:03Z" 99 } 100 }, 101 "canReply": true, 102 "totalReplyCount": 0, 103 "isPublic": true 104 } 105 }, 106 { 107 "kind": "youtube#commentThread", 108 "etag": "erS5SNyfiHOZkc8cxDlmCxUs4WU", 109 "id": "UgyPj3ereiqbMNCzONh4AaABAg", 110 "snippet": { 111 "videoId": "DrvdlqLzfEc", 112 "topLevelComment": { 113 "kind": "youtube#comment", 114 "etag": "hdgPlpqo7D6Iy0wQ4FCz2xYx1Fs", 115 "id": "UgyPj3ereiqbMNCzONh4AaABAg", 116 "snippet": { 117 "videoId": "DrvdlqLzfEc", 118 "textDisplay": "娘ちゃんの成長と????ジジちゃんとトトちゃんの娘ちゃんの関わって行く成長も????楽しみですね ????ママとパパの優しさが伝わります???? いつも、癒しをありがとう????????✨", 119 "textOriginal": "娘ちゃんの成長と????ジジちゃんとトトちゃんの娘ちゃんの関わって行く成長も????楽しみですね ????ママとパパの優しさが伝わります???? いつも、癒しをありがとう????????✨", 120 "authorDisplayName": "野口栄子", 121 "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJwtSndHVwLU5Zv9YndQAjbUqCO0Y3OiW14zvQ=s48-c-k-c0xffffffff-no-rj-mo", 122 "authorChannelUrl": "http://www.youtube.com/channel/UCwL1oNd2fdtlZmHYsep52lw", 123 "authorChannelId": { 124 "value": "UCwL1oNd2fdtlZmHYsep52lw" 125 }, 126 "canRate": true, 127 "viewerRating": "none", 128 "likeCount": 6, 129 "publishedAt": "2020-09-22T10:13:32Z", 130 "updatedAt": "2020-09-22T10:13:32Z" 131 } 132 }, 133 "canReply": true, 134 "totalReplyCount": 0, 135 "isPublic": true 136 } 137 }, 138 { 139 "kind": "youtube#commentThread", 140 "etag": "vVqGnTOtYu66H-kvsq-1lhUHths", 141 "id": "UgyPA-kElzmMrBxbwId4AaABAg", 142 "snippet": { 143 "videoId": "DrvdlqLzfEc", 144 "topLevelComment": { 145 "kind": "youtube#comment", 146 "etag": "vowkYDi66RxkOeahnH96H36d1rw", 147 "id": "UgyPA-kElzmMrBxbwId4AaABAg", 148 "snippet": { 149 "videoId": "DrvdlqLzfEc", 150 "textDisplay": "この先のもずーっと楽しみに娘ちゃんと、ジジトトの成長見守って行きますよ〜ばあちゃんになった気分なのでとっても見ていて幸せです!ありがとうございます????\n今日も変わらず皆んな可愛い????", 151 "textOriginal": "この先のもずーっと楽しみに娘ちゃんと、ジジトトの成長見守って行きますよ〜ばあちゃんになった気分なのでとっても見ていて幸せです!ありがとうございます????\n今日も変わらず皆んな可愛い????", 152 "authorDisplayName": "りんじゅうめいず", 153 "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJw540d7K07nRt4MhLxZ5AbNrP47aDyb7gAO5w=s48-c-k-c0xffffffff-no-rj-mo", 154 "authorChannelUrl": "http://www.youtube.com/channel/UCDKYqwK7p3bLzud9C6KP9dw", 155 "authorChannelId": { 156 "value": "UCDKYqwK7p3bLzud9C6KP9dw" 157 }, 158 "canRate": true, 159 "viewerRating": "none", 160 "likeCount": 1, 161 "publishedAt": "2020-09-22T11:56:36Z", 162 "updatedAt": "2020-09-22T11:56:36Z" 163 } 164 }, 165 "canReply": true, 166 "totalReplyCount": 0, 167 "isPublic": true 168 } 169 }, 170 { 171 "kind": "youtube#commentThread", 172 "etag": "ZTZEX3-bLfyzxaPeQbu8zcCwMa4", 173 "id": "UgwJN9l1gUcvRRPcrq14AaABAg", 174 "snippet": { 175 "videoId": "DrvdlqLzfEc", 176 "topLevelComment": { 177 "kind": "youtube#comment", 178 "etag": "EKACJJEFMMB7xOMnbxBNdtwg9ys", 179 "id": "UgwJN9l1gUcvRRPcrq14AaABAg", 180 "snippet": { 181 "videoId": "DrvdlqLzfEc", 182 "textDisplay": "トトさんは娘さんが本当に大好きなんですね!!見ていて癒されます✨", 183 "textOriginal": "トトさんは娘さんが本当に大好きなんですね!!見ていて癒されます✨", 184 "authorDisplayName": "Bracky", 185 "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJzCxlSR-gvO3I9ZzV6Qw9X_XrrCPuVojDgaln38sg=s48-c-k-c0xffffffff-no-rj-mo", 186 "authorChannelUrl": "http://www.youtube.com/channel/UCFY5yebZxY0FfkkcmY5Fy8g", 187 "authorChannelId": { 188 "value": "UCFY5yebZxY0FfkkcmY5Fy8g" 189 }, 190 "canRate": true, 191 "viewerRating": "none", 192 "likeCount": 2, 193 "publishedAt": "2020-09-22T12:22:06Z", 194 "updatedAt": "2020-09-22T12:22:06Z" 195 } 196 }, 197 "canReply": true, 198 "totalReplyCount": 0, 199 "isPublic": true 200 } 201 } 202 ] 203}

で取得したJSON文字列を変換するの

Python

1response = requests.get(URL + 'commentThreads', params=params) 2resource = response.json()

でも良いそうですが(追加情報ありがとうございます。)

Python

1response = requests.get(URL + 'commentThreads', params=params) 2resource = json.loads(response.text)

にしてresponse.text確認してみては?

投稿2020/09/22 16:12

編集2020/09/22 16:48
kuma_kuma_

総合スコア2506

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

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

kuma_kuma_

2020/09/22 16:46

> attakeiさん 了解しました。その事も追記しておきます。
vertfee419

2020/09/23 01:01

response = requests.get(URL + 'commentThreads', params=params) resource = response.json() でもpython上では、Youtubeのコメントを取得できていて、それをkivy上で表示できるようにしたいんですがうまく表示できません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問