stefafafan の fa は3つです

すてにゃんのブログです

SoundCloudのTLの曲を逆順に再生していく超雑UserScript

実現されたいこと

  • SoundCloudのTLはTwitterと同じように、新しい曲が上で、古い曲が下に来る
  • ただし、Twitter、及びTweetDeckのようなクライアントと違う点は、一度曲を再生すると自動再生で新しい曲→古い曲の順に連続再生されていく
  • 俺がほしいのは、ひたすら新曲を再生していくモード(TweetDeckは、画面を放置していても勝手に新しいツイートが流れてきて助かってる)

やったこと

  • 雑にJavaScript書いて、Chromeに久しぶりにTampermonkey入れて導入してみた
    • 単にDOM要素を選択してクリックしていったり、setIntervalやsetTimeout使ってるだけ

おもしろ?ポイント

  • SoundCloud公式に自動再生をオフにする機能はないので、HTMLから現在再生している曲の再生位置と曲の長さを取得して、定期的にチェックして終了したっぽいとわかったら再度再生ボタンを押して曲を停止させている
  • 現在再生している曲のURLや「現在曲再生中かどうか」をlocalStorageに保存しつつ動いているため、リロードすると前回再生した曲以降から再開する
    • ただし全部遡るわけには行かないので、上位5曲のうちにあれば、ということにしていてなければ5曲目から上方向に連続再生
    • 全部再生しきったら自動でリロードして、Tampermonkeyとかで有効にしてたら新曲あれば勝手にまた再生がはじまる

コード

雑なgistですが、こういう雰囲気で書いたら一応動きました。

gist.github.com

改善できそうポイント

  • DOM要素変われば動かなくなる、普通にAPI叩いてちゃんと作ったほうが良さそう
  • StreamにPlaylistが出現することがあっても1曲目しか再生されない
  • あちこちsetIntervalやsetTimeoutだけでやってて素朴すぎてすぐバグりそう
  • /stream 開いて突然これが有効になっても困りそうなのでトグルとかあると良さそう

一方で

  • こんな雑なコードでもすぐイメージしてた挙動になったのでとりあえず雑だけど書いてみるのは良さそう、別にかっこいいライブラリを公開したいわけではないので一旦これで使うとかでも良さそう