Discord MusicbotがYoutube動画を再生してくれなくなった
気づいたらAutoPlaylist.txtから曲が消え去る謎の現象が起きてたので調査をしてみたところ、結構な確率でエラー吐いていた。
[0;31mERROR:[0m Signature extraction failed: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/youtube_dl/extractor/youtube.py", line 1081, in _decrypt_signature video_id, player_url, s File "/usr/lib/python3.6/site-packages/youtube_dl/extractor/youtube.py", line 969, in _extract_signature_function raise ExtractorError('Cannot identify player %r' % player_url) youtube_dl.utils.ExtractorError: Cannot identify player 'https://www.youtube.com/yts/jsbin/player-vflppxuSE/en_US/base.js' (caused by ExtractorError("Cannot identify player 'https://www.youtube.com/yts/jsbin/player-vflppxuSE/en_US/base.js'",))
うーん、bot本体のせいじゃなくて読み込んでるyoutube-dlが悪さしてるっぽい。
調べてみると、GitHubでこのIssueについてのスレが立ってました。
youtube-dlのyoutube.pyに記述されている正規表現に’lang_REGION’部分が含まれていなかったっぽいので、その部分である
(?:/[a-z]{2}_[A-Z]{2})?
を追加して修正します。
環境によって違うかもしれませんが、大体1047行目付近。
//before r'.*?-(?P<id>[a-zA-Z0-9_-]+)(?:/watch_as3|/html5player(?:-new)?|/base)?\.(?P<ext>[a-z]+)$' ↓ //after r'.*?-(?P<id>[a-zA-Z0-9_-]+)(?:/[a-z]{2}_[A-Z]{2})?(?:/watch_as3|/html5player(?:-new)?|/base)?\.(?P<ext>[a-z]+)$'
※追記
「<」「>」等はHTMLでの特殊文字表示用の書式(実体参照)なので、環境によっては
r'.*?-(?P[a-zA-Z0-9_-]+)(?:/watch_as3|/html5player(?:-new)?|/base)?\.(?P[a-z]+)$'
と変換後の状態で表記されている場合もあるみたいです。2017/05/07現在の最新版youtube-dlでは修正されてるっぽいので、めんどくさいことしなくてもyoutube-dl自体の更新で直るかもしれません。
一応これで解決。プレイリスト消えないかもうちょっと様子見てみます。
最近のコメント