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自体の更新で直るかもしれません。

 

一応これで解決。プレイリスト消えないかもうちょっと様子見てみます。

Share this:

rexent_gx

インターネットクソオタク

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください