2 ポイント 投稿者 GN⁺ 2024-11-12 | 1件のコメント | WhatsAppで共有
  • IDHSは、ストリーミングサービスのリンクを検索欄に貼り付けると、同じトラックのリンクを対応する他のプラットフォーム上で見つけて表示するWebアプリで、元リンクがSpotifyの場合は高速なオーディオプレビューも提供する
  • 対応対象は個別のトラック、アルバム、アーティスト、ポッドキャストで、プレイリストは対象外であることが明記されている
  • Spotify、Tidal、YouTube Music、Apple Music、Deezer、SoundCloud、Qobuz、Bandcamp、Pandoraのアダプターがあり、すべてのアダプターが逆方向検索と検証済みリンクをサポートする
  • システムは、入力リンクからメタデータを抽出するパーサーと、対象プラットフォームで検索してリンクを見つけるアダプターに分かれており、検索結果が正確なトラックや楽曲であることは保証されない
  • ローカル実行にはBunと一部のAPIキーが必要で、Spotify検索は2026年3月時点のWeb API制限のため、Spotify Webプレイヤーの内部GraphQL APIと自動更新トークンを使用する

IDHSがすること

  • IDHS(I Don't Have Spotify) は、ユーザーがお気に入りのストリーミングサービスのリンクをコピーして検索欄に貼り付けると、対応する他のプラットフォーム上の該当項目リンクを表示する
  • 元リンクがSpotifyの場合は、ユーザーが正しいトラックかどうか確認できるよう、高速なオーディオプレビューを提供する
  • 対応範囲は個別のトラック、アルバム、アーティスト、ポッドキャストである
    • プレイリストは対応範囲外である

対応ストリーミングサービス

  • Web AppとRaycast Extensionは、アダプターを通じてストリーミングサービス間のリンク変換を処理する
  • 対応アダプターは次のとおり
    • Spotify
    • Tidal
    • YouTube Music
    • Apple Music
    • Deezer
    • SoundCloud
    • Qobuz
    • Bandcamp
    • Pandora
  • すべてのアダプターはInverted SearchVerified Linksをサポートする
  • 公式APIの利用有無はプラットフォームごとに異なる
    • 公式APIを使用: Tidal, Deezer
    • 公式APIを使用しない: Spotify, YouTube Music, Apple Music, SoundCloud, Qobuz, Bandcamp, Pandora

パーサーとアダプター構造

  • IDHSは、提供されたリンクからメタデータを抽出し、その情報をもとに公開検索エンジンやApple Music、YouTube、SoundCloudなどの公式APIで使う新しい検索語を作成する
  • 検索結果の中から最も関連性が高そうな項目を選ぶが、返されたリンクがユーザーの望む正確なトラックや楽曲である保証はない
  • 検索語生成ワークフローの改善提案は歓迎されるが、リクエストを高速に保ち速度制限を避けるため、総当たりの再試行は除外するという制約がある
  • Parsers src/parsers

    • パーサーは受け取ったリンクのプラットフォームを識別し、正規化されたメタデータを抽出する
    • タイトル
    • 説明
    • タイプ
    • 画像
    • 任意のオーディオ
    • 一貫した検索語
    • たとえばSpotifyリンクはOpen Graphメタデータを収集し、トラック・アルバム・アーティスト・ショー・エピソードを表す検索文字列を生成する
    • この検索語はその後、他のプラットフォームを検索するために使用される
  • Adapters src/adapters

    • アダプターは正規化された検索語を対象プラットフォームの外部リンクへ変換する
    • 各アダプターは次を担当する
    • 正規化された検索語でプラットフォーム別の検索を実行する
    • 検索方式はAPIベースまたはHTMLベースであり得る
    • type, url, isVerified, notAvailable などの値を含む結果を返す
    • プラットフォームが信頼できるマッチングシグナルを提供する場合は、verifiedリンクを優先する
    • この分離により、パーサーは元リンクの理解に集中し、アダプターは対象リンクの探索に集中できるようシステムをモジュール化している

Web AppとRaycast Extension

  • READMEにはWeb Appの画面例が含まれている
  • Raycast Extensionのインストールリンクが提供されている
  • Raycast Extensionのソースコードはraycast/extensionsの idonthavespotifyにある

ローカル実行とAPI設定

  • 環境変数の一覧は .env.test で確認できる
  • 次の値は別途設定が必要
  • アプリ実行コマンドは次のとおり
bun install
bun dev
  • URL短縮機もあわせて実行するには、docker-compose.yml で使う値で URL_SHORTENER_API_KEY を設定したうえで、次のコマンドを使用する
docker compose up -d
bun install
bun dev

Spotify検索の処理方式

  • Spotify検索はSpotify Web APIを使わず、open.spotify.com のSpotify Webプレイヤーから抽出した匿名アクセストークンを使用する
  • 認証フローはTOTPベースで、Spotify Webプレイヤーが使用する内部GraphQL APIを利用する
  • READMEでは、2026年3月時点でSpotifyがWeb APIを制限し、Development ModeでPremiumアカウントを要求し、利用可能なエンドポイントを制限したと説明している
  • このプロジェクトはPremiumアカウントを持たないため、Spotify Webプレイヤーと同じ内部APIを使用する
  • トークンは約1時間の期限で自動更新され、開発者アカウントは不要

貢献

  • 貢献はPRを開く形で受け付けている

1件のコメント

 
GN⁺ 2024-11-12
Hacker News のコメント
  • Spotify を含む20以上のプラットフォームやテキストファイルのプレイリストを、別の20以上のプラットフォームまたはテキストファイルへ移せる、もっと印象的なサイトもある
    みんなが押し寄せて落とさないでね :)
    https://app.tunemymusic.com/transfer

    • 使ってみたけど、ちゃんと動いた。ただ、こういうものが必要だというのは残念
      サードパーティがあらゆる連携の組み合わせを解決しなければならないのではなく、ベンダーニュートラルなインポート/エクスポート形式があればいいのに
    • 最近 Spotify から Tidal に移ったが、勧められた移行サービスはかなり雑だった
      お気に入り登録したアーティストを移したところ、名前だけで照合しようとするので、同名が2人以上いると悲惨なほど失敗し、ほとんどランダムに選んでいるようだった。このサービスはどうなのか気になる
    • YouTube プレイリストから削除された動画のタイトル一覧を復元する技術的な方法を知っている人はいる?
      不当な著作権申請で削除された音楽だらけのプレイリストが10個以上あるが、削除されたトラックのタイトル/アーティストが分からないので、プレイリストを再構築することもできない
    • これもある: https://playlists.cloud/
    • TuneMyMusic が気に入っている。Spotify を離れるときにエクスポートして Deezer に全部取り込み、今は定期的に Deezer から全部エクスポートして Excel であれこれ分析している
  • 他の音楽サービスのリンクを開くと、自分の好みのサービスへ自動リダイレクトする、とてもシンプルな Chrome 拡張を作った
    自分の場合は YouTube Music に設定しているので、Slack で Spotify などのリンクをクリックすると YouTube Music に飛ぶ
    https://chromewebstore.google.com/detail/music-link/gnhphofp...

    • Firefox 版もある?
    • こういう種類の作業が、Chrome 拡張の開発を楽しくしてくれる
    • 良さそうだけど、URL のマッピングは手作業でやったの?
  • 音楽を実際に買って自分で保管したい。Spotify にあった曲がだんだん消えていくのを、以前よりよく目にするようになったから
    ところが最近の音楽は買うのがとても難しい。ほとんどがシングルとして出ていて、知る限りではストリーミングプラットフォームにしか上がっていないようだ。ストリーミングプラットフォームにある同種の音楽を、実際のオーディオファイルとして買う方法はまだある?

    • 音楽を「購入」する最も持続可能な方法は、個人的には違法コピーで入手してから、アーティストのグッズを買って支援することだと思う
      あるいは、可能なら Bandcamp で買えばいい
    • 別の国へ引っ越したあと、Spotify のクレジットカードを新しい国のカードに変えたら、Spotify が自分の地域設定まで変えてしまった
      その結果、自分が「スター」/「追加」/「いいね」していた大量の曲がグレーアウトして再生できなくなった。いずれにせよ、自分が聴く音楽のコピーを実際に手に入れるという話なら、まったく恥じることなく完全に違法コピーしていいと思う
    • 自分もそうしているが、カナダでは https://ca.7digital.com/ が普通の MP3 を購入できる事実上唯一の選択肢で、強くおすすめする
      最新アルバムは問題なく買えたが、最新シングルはよく分からない。米国では Amazon が MP3 購入を許可しているようだが、確かではない
      Spotify の購読料くらいで、たいてい毎月新しいアルバムを1枚買えるのは良いし、アルバムコレクションが少しずつ増えていくのが気に入っている
    • Bandcamp、7Digital、そして本当にしぶしぶ Amazon。レーベルが大きいほどデジタル音楽を買うのが難しくなる
    • Qobuz を見るといい。まず、ここではロスレス音源だけを扱っていて MP3 はない
      21世紀に入ってもうすぐ25年なのだから、MP3 をストリーミングしなければならなかった Napster の時代は過ぎた
      Qobuz には 44.1 kHz / 16-bit ステレオより高音質のアルバムもよくある。違いを聴き分けられるわけではないが、より高いサンプリング周波数やビット深度を提供するほど気を配るアーティスト/音響エンジニアなら、たいてい良い音の音楽にも気を配っている、という意味はある
      Qobuz は求めていることをそのまましてくれる。個別トラックやアルバム全体を購入してダウンロードでき、DRM もない
      自分で買った CD から 100% ビットパーフェクト/ロスレス方式でリッピングしたオーディオファイルのコレクションもあり、Qobuz のサブスクリプションも併用している。リッピング結果は、同じ CD をリッピングした人たちのオンライン DB で検証した
      Qobuz の欠点は、音楽発見機能が最高ではないことと、UI もかなりいまいちなこと。それでも、品質を重視し、自分の音楽を所有したい人には良い
      最近のネットワークストリーミング機器の多くは Qobuz に対応している。たとえば自分はネットワークストリーマー内蔵の Yamaha アンプ(Yamaha R-N1000A)を使っており、Yamaha の音楽ストリーミングアプリ MusicCast も Qobuz、Tidal、Spotify に対応している
      足元から消えてしまうかもしれない、あるいは聴いていた曲を削除されるかもしれないオンラインサービスの一時的なアクセス権を借りるのではなく、個別トラックを実際に買って所有できる
      料金プランを確認するといい。購入する曲数によって、より良いプランは変わるかもしれない
      自分の理解では、Spotify も Tidal と Qobuz からの圧力を受けてロスレスストリーミングへ移行すると発表していた。2024年になってようやく
  • 最初に試した2曲で YouTube Music のマッチングに失敗した
    Kanye West の Two Words: https://open.spotify.com/track/62wtttQzoIA9HnNmGVd9Yq?si=b1b...
    Milabel Ranque の Two Words に飛ばされた: https://music.youtube.com/watch?v=Y64cFG9dfYo
    Kanye West の Never Let Me Down: https://open.spotify.com/track/34j4OxJxKznBs88cjSL2j9?si=7ec...
    Depeche Mode の Never Let me Down に飛ばされた: https://music.youtube.com/watch?v=snILjFUkk_A
    サイトには正しいアルバムアートが表示されていたのにそうなった。実際に入れてみた曲は、どれもまともに動かなかった。もともとこういうものなのか? 似たタイトルの曲を探す方式なのか?

  • Spotify リンクをよく受け取るので、これは良い。より良いリンクは GitHub リポジトリではなく実際のサービスページだろう
    https://idonthavespotify.donado.co/
    Firefox ユーザー向けの 拡張機能としてもあると本当に良い。いつか誰かが作ってくれることを願う

    • 結果ページの id パラメータがどこから来るのか簡単にわかれば、おそらく ブックマークレットにもできそうだ
      リンクの単純なハッシュのようなものだと推測している
    • Spotify リンクをなぜそんなに頻繁に受け取るのか?
  • 複数の音楽プロバイダへのリンクがあるページを作るときは、このページを使っている: https://odesli.co
    アーティスト、アルバム、曲単位で動作する
    ログインすると URL をカスタマイズできる
    ただのユーザーで、利害関係はない

    • 自分も Songlink/Odesli が本当に好きだ。検索も Spotify や Apple Music の検索より速く動く
    • 5年前に songlinks API を使う Discord ボットを作った
      残念ながらあまり使われず、今はもうメンテナンスしていない
    • Slack 連携もある: /songlink {url}
  • NAS から得られる最高の機能の一つは、音楽をそこに保存してスマホにストリーミングできることだ
    サブスクリプションサービスに依存するより、一部の音楽を買って 自分で保管するほうを好む

    • NAS とスマホ向けストリーミング用ソフトウェアの両方について、どんな構成を使っているか、あるいはおすすめを共有してもらえる?
  • 以前 Discord 音楽ボットをメンテナンスしていたとき、YouTube からストリーミングしていた
    Spotify URL を動作させるには YouTube 検索が安定して当たる必要があったが、うまくいったコツの一つは、曲名やアーティスト名などと一緒に Spotify URL も YouTube の検索語に入れることだった
    公式 YouTube 動画の説明に Spotify リンクが含まれていることが多く、YouTube 検索は説明文までマッチするため、「公式」動画を選び出すのにかなり役立つ

  • このサービスはいくつかのサービスをさらに結び付けてくれるが、既存の URL をそのまま貼り付けることはできない: https://odesli.co/
    リンクツリー系のサービスに近いが、曲やアルバムを検索できるので見つけやすい
    例: https://song.link/i/1051394215