回答編集履歴

13

 

2023/03/05 14:09

投稿

退会済みユーザー
test CHANGED
@@ -37,6 +37,6 @@
37
37
  > ライブ配信とプレミアム公開の動画が同じ判定をされる
38
38
  その通りです。
39
39
  そしてライブ配信とプレミアム公開を、 YouTube API を用いて区別する方法は、現状存在しません。
40
- (配信中のライブ配信と、チャット欄が閉じたプレミアム公開は区別できる可能性はあります)
40
+ ただし配信中のライブ配信と、チャット欄が閉じたプレミアム公開は区別できる可能性はあります)
41
41
  スクレイピングすれば不可能ではないかもしれませんが、YouTubeのスクレイピングは利用規約上禁止されています。
42
42
  (APIが商用レベルでは使い物にならない&コストが高いため、ランキングサイトなどの多くは裏では黙ってスクレイピングしていると推測します(スクレイピングを推奨する意図は全くありません))

12

 

2023/03/05 14:07

投稿

退会済みユーザー
test CHANGED
@@ -25,10 +25,10 @@
25
25
 
26
26
  items = youtube.videos().list(id=video_id, part='id,snippet,liveStreamingDetails').execute() で情報を取得したとき:
27
27
  ・ items[0]['snippet']['publishedAt'] が 半年以上、1年以上前などかなり古い(ただしチャンネルによっては直近に待機所を立て直したりしている場合もあるため一概には言えません)
28
- かつ、
28
+
29
29
  ・ items[0]['snippet']['liveBroadcastContent'] が 'upcoming' である。
30
30
  (配信予定やプレミア公開の公開予定の場合にも liveBroadcastContent はupcoming になるので上記publishdAt と組み合わせて判定する)
31
-
31
+ (actualStartTimeが存在する場合は upcoming ではないのでこれだけで判断できない)
32
32
  上記によっても、配信予約を入れたまま放置している動画もたまにあるので、100%うまくいくとは限りません。
33
33
  ```
34
34
  ただし、上記のように、「order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない」バグが発生している場合、待機所が最新の動画として取得される場合があるため、うまく動作しません。

11

 

2023/03/05 14:05

投稿

退会済みユーザー
test CHANGED
@@ -20,7 +20,7 @@
20
20
  > 配信者特有のいわゆる「待機所」という形の特殊な枠(動画の判定でAPIが取得しているかは謎ですが)が何か悪さをしている気がしてきました。
21
21
  待機所は、「actualStartTime だけがあって actualEndTime が存在しない」、または 「actualStartTime も actualEndTime も存在しない」のパターンであるため、質問者さんのコード(actualEndTimeの有無だけで区別)では配信中の動画と区別できません。
22
22
 
23
- 待機所であるかどうかは下記のように判定します。
23
+ 待機所であるかどうかは actualEndTime の不存在に加えて下記のように判定します。
24
24
  ```
25
25
 
26
26
  items = youtube.videos().list(id=video_id, part='id,snippet,liveStreamingDetails').execute() で情報を取得したとき:

10

 

2023/03/05 14:05

投稿

退会済みユーザー
test CHANGED
@@ -18,11 +18,11 @@
18
18
   
19
19
   
20
20
  > 配信者特有のいわゆる「待機所」という形の特殊な枠(動画の判定でAPIが取得しているかは謎ですが)が何か悪さをしている気がしてきました。
21
- 待機所は、actualStartTime も actualEndTime も存在しないため、質問者さんのコード(actualEndTimeの有無だけで区別)では配信中の動画と区別できません。
21
+ 待機所は、actualStartTime だけがあって actualEndTime が存在しない」、または 「actualStartTime も actualEndTime も存在しない」のパターンであるため、質問者さんのコード(actualEndTimeの有無だけで区別)では配信中の動画と区別できません。
22
-
23
22
 
24
23
  待機所であるかどうかは下記のように判定します。
25
24
  ```
25
+
26
26
  items = youtube.videos().list(id=video_id, part='id,snippet,liveStreamingDetails').execute() で情報を取得したとき:
27
27
  ・ items[0]['snippet']['publishedAt'] が 半年以上、1年以上前などかなり古い(ただしチャンネルによっては直近に待機所を立て直したりしている場合もあるため一概には言えません)
28
28
  かつ、

9

 

2023/03/05 14:03

投稿

退会済みユーザー
test CHANGED
@@ -12,7 +12,7 @@
12
12
  また、時間帯やAPIを利用するユーザー、検索対象のチャンネルによっても状況は変わります。
13
13
  自分が試した限りでは、複数のチャンネルで正しく取得できています。
14
14
 
15
- **これに限らず、YouTube API はずっと前から環境依存・ユーザー依存のバグが数多く存在しており、しかもドキュメントされていません。**
15
+ **これに限らず、YouTube API はずっと前から環境依存・ユーザー依存・時間依存のバグが数多く存在しており、しかもまともにドキュメントされていません。**
16
16
  **たまに試すと直っている場合も多いです。**
17
17
  **ユーザー依存・時間依存なのでうまくいく人もいればうまくいかない人もいます。(なのでバグ情報も出回りにくいです)**
18
18
   

8

 

2023/03/05 14:00

投稿

退会済みユーザー
test CHANGED
@@ -39,4 +39,4 @@
39
39
  そしてライブ配信とプレミアム公開を、 YouTube API を用いて区別する方法は、現状存在しません。
40
40
  (配信中のライブ配信と、チャット欄が閉じたプレミアム公開は区別できる可能性はあります)
41
41
  スクレイピングすれば不可能ではないかもしれませんが、YouTubeのスクレイピングは利用規約上禁止されています。
42
- (APIが商用レベルでは使い物にならない&コストが高いため、ランキングサイトなどの多くは裏では黙ってスクレイピングしていると推測します)
42
+ (APIが商用レベルでは使い物にならない&コストが高いため、ランキングサイトなどの多くは裏では黙ってスクレイピングしていると推測します(スクレイピングを推奨する意図は全くありません

7

 

2023/03/05 13:59

投稿

退会済みユーザー
test CHANGED
@@ -39,4 +39,4 @@
39
39
  そしてライブ配信とプレミアム公開を、 YouTube API を用いて区別する方法は、現状存在しません。
40
40
  (配信中のライブ配信と、チャット欄が閉じたプレミアム公開は区別できる可能性はあります)
41
41
  スクレイピングすれば不可能ではないかもしれませんが、YouTubeのスクレイピングは利用規約上禁止されています。
42
- (APIが使い物にならない&コストが高いため、商用のランキングサイトなど多くは黙ってスクレイピングしていると推測します)
42
+ (APIが商用レベルでは使い物にならない&コストが高いため、ランキングサイトなど多くは裏では黙ってスクレイピングしていると推測します)

6

 

2023/03/05 13:58

投稿

退会済みユーザー
test CHANGED
@@ -24,10 +24,12 @@
24
24
  待機所であるかどうかは下記のように判定します。
25
25
  ```
26
26
  items = youtube.videos().list(id=video_id, part='id,snippet,liveStreamingDetails').execute() で情報を取得したとき:
27
- ・ items[0]['snippet']['publishedAt'] が 1年以上前、かなり古い(ただしチャンネルによっては直近に多岐書を立て直したりしている場合もあるため一概には言えません)
27
+ ・ items[0]['snippet']['publishedAt'] が 半年以上、1年以上前などかなり古い(ただしチャンネルによっては直近に待機所を立て直したりしている場合もあるため一概には言えません)
28
28
  かつ、
29
29
  ・ items[0]['snippet']['liveBroadcastContent'] が 'upcoming' である。
30
30
  (配信予定やプレミア公開の公開予定の場合にも liveBroadcastContent はupcoming になるので上記publishdAt と組み合わせて判定する)
31
+
32
+ 上記によっても、配信予約を入れたまま放置している動画もたまにあるので、100%うまくいくとは限りません。
31
33
  ```
32
34
  ただし、上記のように、「order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない」バグが発生している場合、待機所が最新の動画として取得される場合があるため、うまく動作しません。
33
35
   
@@ -37,4 +39,4 @@
37
39
  そしてライブ配信とプレミアム公開を、 YouTube API を用いて区別する方法は、現状存在しません。
38
40
  (配信中のライブ配信と、チャット欄が閉じたプレミアム公開は区別できる可能性はあります)
39
41
  スクレイピングすれば不可能ではないかもしれませんが、YouTubeのスクレイピングは利用規約上禁止されています。
40
-
42
+ (APIが使い物にならない&コストが高いため、商用のランキングサイトなども多くは黙ってスクレイピングしていると推測します)

5

 

2023/03/05 13:56

投稿

退会済みユーザー
test CHANGED
@@ -3,15 +3,20 @@
3
3
  (コードのインデントは別として)
4
4
 
5
5
  > serch().lisy()で取得される情報が配信中の動画のIDではなく、一つ前の動画のIDを取得してしまう
6
+ > 待機所を用意しているチャンネルであっても、ライブ配信をしていないときは最新の配信のアーカイブの動画IDを取得しました。
7
+ > 待機所を用意しているチャンネルが配信中の時に、上記のプログラムを実行した場合は、最新の動画アーカイブでもない"比較的"新しい動画IDが出力されました。
8
+
9
+ これは YouTube API のバグです。
6
- これは YouTube API のバグです。(order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない。直近の動画が取得できない場合がある)
10
+ (order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない。直近の動画が取得できない場合がある)
11
+  
7
12
  また、時間帯やAPIを利用するユーザー、検索対象のチャンネルによっても状況は変わります。
8
13
  自分が試した限りでは、複数のチャンネルで正しく取得できています。
9
14
 
10
- これに限らず、YouTube API はずっと前から環境依存・ユーザー依存のバグが数多く存在しており、しかもドキュメントされていません。
15
+ **これに限らず、YouTube API はずっと前から環境依存・ユーザー依存のバグが数多く存在しており、しかもドキュメントされていません。**
11
- たまに試すと直っている場合も多いです。
16
+ **たまに試すと直っている場合も多いです。**
12
- ユーザー依存なのでうまくいく人もいればうまくいかない人もいます。(なのでバグ情報も出回りにくいです)
17
+ **ユーザー依存・時間依存なのでうまくいく人もいればうまくいかない人もいます。(なのでバグ情報も出回りにくいです)**
13
-
14
-
18
+  
19
+  
15
20
  > 配信者特有のいわゆる「待機所」という形の特殊な枠(動画の判定でAPIが取得しているかは謎ですが)が何か悪さをしている気がしてきました。
16
21
  待機所は、actualStartTime も actualEndTime も存在しないため、質問者さんのコード(actualEndTimeの有無だけで区別)では配信中の動画と区別できません。
17
22
 

4

 

2023/03/05 13:55

投稿

退会済みユーザー
test CHANGED
@@ -5,7 +5,7 @@
5
5
  > serch().lisy()で取得される情報が配信中の動画のIDではなく、一つ前の動画のIDを取得してしまう
6
6
  これは YouTube API のバグです。(order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない。直近の動画が取得できない場合がある)
7
7
  また、時間帯やAPIを利用するユーザー、検索対象のチャンネルによっても状況は変わります。
8
- 自分が試した限りでは複数のチャンネルで正しく取得できています。
8
+ 自分が試した限りでは複数のチャンネルで正しく取得できています。
9
9
 
10
10
  これに限らず、YouTube API はずっと前から環境依存・ユーザー依存のバグが数多く存在しており、しかもドキュメントされていません。
11
11
  たまに試すと直っている場合も多いです。
@@ -24,10 +24,12 @@
24
24
  ・ items[0]['snippet']['liveBroadcastContent'] が 'upcoming' である。
25
25
  (配信予定やプレミア公開の公開予定の場合にも liveBroadcastContent はupcoming になるので上記publishdAt と組み合わせて判定する)
26
26
  ```
27
-
27
+ ただし、上記のように、「order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない」バグが発生している場合、待機所が最新の動画として取得される場合があるため、うまく動作しません。
28
+  
29
+  
28
30
  > ライブ配信とプレミアム公開の動画が同じ判定をされる
29
31
  その通りです。
30
- そしてライブ配信とプレミアム公開を、 YouTube API を用いて区別する方法は、現状存在しません。
32
+ そしてライブ配信とプレミアム公開を、 YouTube API を用いて区別する方法は、現状存在しません。
31
33
  (配信中のライブ配信と、チャット欄が閉じたプレミアム公開は区別できる可能性はあります)
32
34
  スクレイピングすれば不可能ではないかもしれませんが、YouTubeのスクレイピングは利用規約上禁止されています。
33
35
 

3

追記

2023/03/05 13:53

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  (コードのインデントは別として)
2
4
 
3
5
  > serch().lisy()で取得される情報が配信中の動画のIDではなく、一つ前の動画のIDを取得してしまう
@@ -9,3 +11,23 @@
9
11
  たまに試すと直っている場合も多いです。
10
12
  ユーザー依存なのでうまくいく人もいればうまくいかない人もいます。(なのでバグ情報も出回りにくいです)
11
13
 
14
+
15
+ > 配信者特有のいわゆる「待機所」という形の特殊な枠(動画の判定でAPIが取得しているかは謎ですが)が何か悪さをしている気がしてきました。
16
+ 待機所は、actualStartTime も actualEndTime も存在しないため、質問者さんのコード(actualEndTimeの有無だけで区別)では配信中の動画と区別できません。
17
+
18
+
19
+ 待機所であるかどうかは下記のように判定します。
20
+ ```
21
+ items = youtube.videos().list(id=video_id, part='id,snippet,liveStreamingDetails').execute() で情報を取得したとき:
22
+ ・ items[0]['snippet']['publishedAt'] が 1年以上前とか、かなり古い(ただしチャンネルによっては直近に多岐書を立て直したりしている場合もあるため一概には言えません)
23
+ かつ、
24
+ ・ items[0]['snippet']['liveBroadcastContent'] が 'upcoming' である。
25
+ (配信予定やプレミア公開の公開予定の場合にも liveBroadcastContent はupcoming になるので上記publishdAt と組み合わせて判定する)
26
+ ```
27
+
28
+ > ライブ配信とプレミアム公開の動画が同じ判定をされる
29
+ その通りです。
30
+ そしてライブ配信と、プレミアム公開を、 YouTube API を用いて区別する方法は、現状存在しません。
31
+ (配信中のライブ配信と、チャット欄が閉じたプレミアム公開は区別できる可能性はあります)
32
+ スクレイピングすれば不可能ではないかもしれませんが、YouTubeのスクレイピングは利用規約上禁止されています。
33
+

2

 

2023/03/05 13:11

投稿

退会済みユーザー
test CHANGED
@@ -3,7 +3,7 @@
3
3
  > serch().lisy()で取得される情報が配信中の動画のIDではなく、一つ前の動画のIDを取得してしまう
4
4
  これは YouTube API のバグです。(order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない。直近の動画が取得できない場合がある)
5
5
  また、時間帯やAPIを利用するユーザー、検索対象のチャンネルによっても状況は変わります。
6
- 自分は正しく取得できています
6
+ 自分が試した限りで複数のチャンネルで正しく取得できています
7
7
 
8
8
  これに限らず、YouTube API はずっと前から環境依存・ユーザー依存のバグが数多く存在しており、しかもドキュメントされていません。
9
9
  たまに試すと直っている場合も多いです。

1

 

2023/03/05 13:11

投稿

退会済みユーザー
test CHANGED
@@ -1,10 +1,11 @@
1
1
  (コードのインデントは別として)
2
2
 
3
3
  > serch().lisy()で取得される情報が配信中の動画のIDではなく、一つ前の動画のIDを取得してしまう
4
- これは YouTube API のバグです。(order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない。直
4
+ これは YouTube API のバグです。(order = date を指定しても、常にpublished_dateの降順に、最新の動画を含めた動画情報を返すとは限らない。直近の動画が取得できない場合がある)
5
- 近の動画が取得できない場合がある)
6
5
  また、時間帯やAPIを利用するユーザー、検索対象のチャンネルによっても状況は変わります。
7
6
  (自分は正しく取得できています)
8
7
 
9
- これに限らず、YouTube API はずっと前から環境依存・ユーザー依存のバグが数多く存在するためそういうのだと思っください。
8
+ これに限らず、YouTube API はずっと前から環境依存・ユーザー依存のバグが数多く存在しておりしかドキュメントされていません
9
+ たまに試すと直っている場合も多いです。
10
+ ユーザー依存なのでうまくいく人もいればうまくいかない人もいます。(なのでバグ情報も出回りにくいです)
10
11