Foo-x / youtube-timestamp-comments

https://chrome.google.com/webstore/detail/youtube-timestamp-comment/khngjoedfeicfbjlcfmiigbokbnlibei
MIT License
9 stars 2 forks source link

YouTubeの仕様変更対応 #14

Open Foo-x opened 3 years ago

Foo-x commented 3 years ago

YouTubeの仕様が定期的に変わり、コメントが取得できなくなることがある。 コメントが取得できなくなったとき、および対応が完了したときにこちらに記述していく。

Foo-x commented 3 years ago

2020/11/22 1:22現在、仕様変更を確認。 すでに対応して審査待ち。

icesou commented 3 years ago

不具合報告です 2021-07-15現在、コメントが取得できないようです

Foo-x commented 3 years ago

ご報告ありがとうございます。 確認したところ、仕様が大幅に変わっていました。 申し訳ありませんが、対応に時間がかかりそうです。

以下調査メモ

  1. JSONの構造が今までとまったく異なるものになった
    • 新しい構造ではコメント内のタイムスタンプと普通のテキストを区別した上で改行ごとに分けている様子

https://www.youtube.com/watch?v=bpOnqpc7xxM

タイムスタンプ
2:46 開始
3:48 休みの理由や体調は本編終了後に話す
...

のコメントに対して、今までは単に1つのテキストだった。 新しい構造では以下のようになっている。

...
                      {
                        "text": "タイムスタンプ"
                      },
                      {
                        "text": "\n"
                      },
                      {
                        "text": "2:46",
                        "navigationEndpoint": {
                          "clickTrackingParams": "CHkQtnUiEwiK-Pm65OTxAhUKIFgKHWqyDZg=",
                          "commandMetadata": {
                            "webCommandMetadata": {
                              "url": "/watch?v=bpOnqpc7xxM&t=166s",
                              "webPageType": "WEB_PAGE_TYPE_WATCH",
                              "rootVe": 3832
                            }
                          },
                          "watchEndpoint": {
                            "videoId": "bpOnqpc7xxM",
                            "startTimeSeconds": 166
                          }
                        }
                      },
                      {
                        "text": " 開始\r"
                      },
                      {
                        "text": "\n"
                      },
                      {
                        "text": "3:48",
                        "navigationEndpoint": {
                          "clickTrackingParams": "CHkQtnUiEwiK-Pm65OTxAhUKIFgKHWqyDZg=",
                          "commandMetadata": {
                            "webCommandMetadata": {
                              "url": "/watch?v=bpOnqpc7xxM&t=228s",
                              "webPageType": "WEB_PAGE_TYPE_WATCH",
                              "rootVe": 3832
                            }
                          },
                          "watchEndpoint": {
                            "videoId": "bpOnqpc7xxM",
                            "startTimeSeconds": 228
                          }
                        }
                      },
                      {
                        "text": " 休みの理由や体調は本編終了後に話す\r"
                      },
                      {
                        "text": "\n"
                      },
...

途中の階層も変わっているので、パース処理を一から作り直す必要がありそう。

  1. コメントを取得するURLが変わった
    • 今まではhttps://www.youtube.com/comment_service_ajaxだったが、新しいURLはhttps://www.youtube.com/youtubei/v1/next
  2. コメントを取得するトークンが変わった?
    • 上記URLに渡しているパラメータが変わっている
    • 何が不要になって何が必要になったかはまだ追えていない

所感 一時期、スマホ版YouTubeアプリでタイムスタンプによるソート機能が提供されていたので、そろそろ実装されるのかも。(今は使えなくなっている?ので断念した可能性もあり)

icesou commented 3 years ago

調査ありがとうございます!

タイムスタンプ禁断症状が出たので拡張機能を探していたのですが(どんだけだよ) YouTube Timestamps https://chrome.google.com/webstore/detail/youtube-timestamps/fjchmkcdmgeimkholkgodkejnikeklmh https://github.com/ris58h/youtube-timestamps/issues という 拡張を発見しました。この拡張機能は今も使えるのですが、不思議なことに最終更新が6/26なんですよね 一体どういう処理をしているのかわからないのですが、報告まで (ちなみに使用感としてはvtuberみたいに網羅的なタイムスタンプが貼られるアーカイブには相性が良くないです。かわいいタイムスタンプを連打する人がいるので)

Foo-x commented 3 years ago

情報ありがとうございます! 幸いコードが公開されていたので調べてみたところ、開発者が取得しているYouTube Data APIのAPIキーを拡張機能に埋め込んでいるようです。 この方法であれば公式のAPIを使用しているので、仕様変更で使えなくなることは基本的にないですね。 ただ、APIキーは1日のリクエスト回数に制限があるので、拡張機能のユーザが増えたり、ユーザのうちの誰かが頻繁に使用すると次の日まで使えなくなります。(すでにその内容のIssueも作られている様子) そのまま採用するのは難しいですが、今の実装だと仕様変更のたびに修正が必要になるので、たしかに別の方法を検討したほうがいいかもしれないですね...

icesou commented 3 years ago

私が使っている拡張機能に https://chrome.google.com/webstore/detail/thumbnail-rating-bar-for/cmlddjbnoehmihdmfhaacemlpgfbpoeb というのがありまして、これもYouTube Data APIを利用しています。ただし、YouTube Timestampsと違うのは、開発者のAPI KEYではなく、各ユーザーが各自にAPI KEYを取得してセットする方式な点です。 この方式一考の余地ありかと

Foo-x commented 3 years ago

1日考えましたが、ユーザのAPIキーを設定してもらう方法にしようと思います。 拡張機能を使うために作業を強制するのはなるべく避けていたのですが、定期的に動作しなくなるよりは良いという判断です。 設計からやり直すことになるので時間はかかりますが、一度動くようになれば安定するかと思います。 提案していただきありがとうございます。

Foo-x commented 3 years ago

バージョン0.6.4がストアに公開され、現時点でコメントが取得できていることを確認しています。

icesou commented 3 years ago

正常に動作してます!対応ありがとう