2 คะแนน โดย GN⁺ 2024-11-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • IDHS เป็นเว็บแอปที่เมื่อวางลิงก์บริการสตรีมมิงลงในช่องค้นหา จะค้นหาและแสดงลิงก์ของแทร็กเดียวกันบนแพลตฟอร์มอื่นที่รองรับ และหากต้นทางเป็น Spotify ก็มีตัวอย่างเสียงให้ฟังอย่างรวดเร็วด้วย
  • รองรับรายการแบบเดี่ยว ได้แก่ แทร็ก, อัลบั้ม, ศิลปิน, พอดแคสต์ และระบุชัดว่าเพลย์ลิสต์อยู่นอกขอบเขต
  • มีอะแดปเตอร์สำหรับ Spotify, Tidal, YouTube Music, Apple Music, Deezer, SoundCloud, Qobuz, Bandcamp, Pandora และอะแดปเตอร์ทั้งหมดรองรับ การค้นหาแบบย้อนกลับ และลิงก์ที่ตรวจสอบแล้ว
  • ระบบแบ่งเป็น พาร์เซอร์ ที่ดึงเมทาดาทาจากลิงก์อินพุต และ อะแดปเตอร์ ที่ค้นหาและหาลิงก์บนแพลตฟอร์มปลายทาง โดยไม่ได้รับประกันว่าผลการค้นหาจะเป็นแทร็กหรือเพลงที่ถูกต้องตรงกันแน่นอน
  • การรันในเครื่องต้องใช้ Bun และ API key บางส่วน ส่วนการค้นหา Spotify ณ เดือนมีนาคม 2026 ใช้ GraphQL API ภายในของ Spotify Web Player และโทเคนที่ต่ออายุอัตโนมัติ เนื่องจากข้อจำกัดของ Web 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 Search และ Verified Links
  • การใช้ API อย่างเป็นทางการแตกต่างกันไปตามแพลตฟอร์ม
    • ใช้ API อย่างเป็นทางการ: Tidal, Deezer
    • ไม่ใช้ API อย่างเป็นทางการ: Spotify, YouTube Music, Apple Music, SoundCloud, Qobuz, Bandcamp, Pandora

โครงสร้างพาร์เซอร์และอะแดปเตอร์

  • IDHS ดึงเมทาดาทาจากลิงก์ที่ให้มา แล้วสร้างคำค้นหาใหม่จากข้อมูลนั้นสำหรับใช้กับเสิร์ชเอนจินสาธารณะหรือ API อย่างเป็นทางการ เช่น Apple Music, YouTube, SoundCloud
  • ระบบจะเลือกผลลัพธ์ที่ดูเกี่ยวข้องที่สุดจากผลการค้นหา แต่ไม่ได้รับประกันว่าลิงก์ที่ส่งคืนจะเป็นแทร็กหรือเพลงที่ผู้ใช้ต้องการอย่างถูกต้องแน่นอน
  • ยินดีรับข้อเสนอแนะเพื่อปรับปรุงเวิร์กโฟลว์การสร้างคำค้นหา แต่มีข้อจำกัดว่าจะไม่ใช้ การลองซ้ำแบบ brute force เพื่อให้คำขอยังคงรวดเร็วและหลีกเลี่ยงการติด rate limit
  • 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 อยู่ที่ idonthavespotify ใน raycast/extensions

การรันในเครื่องและการตั้งค่า API

  • ดูรายการตัวแปรสภาพแวดล้อมได้ใน .env.test
  • ค่าต่อไปนี้ต้องตั้งค่าแยกต่างหาก
  • คำสั่งรันแอปมีดังนี้
bun install
bun dev
  • หากต้องการรัน URL shortener ด้วย ให้ตั้งค่า URL_SHORTENER_API_KEY เป็นค่าที่ใช้ใน docker-compose.yml แล้วใช้คำสั่งต่อไปนี้
docker compose up -d
bun install
bun dev

วิธีจัดการการค้นหา Spotify

  • การค้นหา Spotify ไม่ได้ใช้ Spotify Web API แต่ใช้ โทเคนเข้าถึงแบบนิรนาม ที่ดึงมาจาก Spotify Web Player บน open.spotify.com
  • โฟลว์การยืนยันตัวตนอิง TOTP และใช้ GraphQL API ภายในที่ Spotify Web Player ใช้
  • README อธิบายว่า ณ เดือนมีนาคม 2026 Spotify จำกัด Web API โดยกำหนดให้ Development Mode ต้องมีบัญชี Premium และจำกัดเอนด์พอยต์ที่ใช้งานได้
  • เนื่องจากโปรเจกต์นี้ไม่มีบัญชี Premium จึงใช้ API ภายในเดียวกับ Spotify Web Player
  • โทเคนจะต่ออายุโดยอัตโนมัติ โดยมีรอบหมดอายุประมาณ 1 ชั่วโมง และไม่ต้องใช้บัญชีนักพัฒนา

การมีส่วนร่วม

  • รับการมีส่วนร่วมผ่านการเปิด PR

1 ความคิดเห็น

 
GN⁺ 2024-11-12
ความคิดเห็นจาก Hacker News
  • ยังมีไซต์ที่น่าประทับใจกว่านี้ ซึ่งช่วยย้าย เพลย์ลิสต์จากแพลตฟอร์มกว่า 20 แห่ง รวมถึง Spotify หรือไฟล์ข้อความ ไปยังแพลตฟอร์มอื่นกว่า 20 แห่งหรือไฟล์ข้อความได้ด้วย
    ขออย่าให้ทุกคนแห่กันไปจนเว็บล่มนะ :)
    https://app.tunemymusic.com/transfer

    • เคยลองใช้แล้ว ทำงานได้ดี แต่ก็น่าเสียดายที่เรายังต้องมีของแบบนี้
      แทนที่จะให้บุคคลที่สามต้องแก้ปัญหาการเชื่อมต่อทุกคู่ ถ้ามี รูปแบบนำเข้า/ส่งออกที่เป็นกลางต่อผู้ให้บริการ ก็คงดี
    • เพิ่งย้ายจาก Spotify ไป Tidal มา บริการย้ายข้อมูลที่มีคนแนะนำค่อนข้างหยาบมาก
      ย้ายศิลปินที่กดติดดาวไว้ แต่มันพยายามจับคู่จากชื่ออย่างเดียว พอมีชื่อเดียวกันมากกว่าหนึ่งรายก็พังยับ และเหมือนแทบจะสุ่มเลือกเอา อยากรู้ว่าบริการนี้จะเป็นยังไง
    • มีใครรู้วิธีทางเทคนิคในการกู้ รายชื่อชื่อวิดีโอ ที่ถูกลบออกจากเพลย์ลิสต์ YouTube ไหม?
      ผมมีเพลย์ลิสต์มากกว่า 10 รายการที่เต็มไปด้วยเพลงซึ่งถูกลบเพราะการแจ้งละเมิดลิขสิทธิ์ที่ไม่เหมาะสม แต่ไม่รู้ชื่อเพลง/ศิลปินของแทร็กที่ถูกลบ เลยสร้างเพลย์ลิสต์ขึ้นมาใหม่ไม่ได้
    • มีอันนี้ด้วย: https://playlists.cloud/
    • ชอบ TuneMyMusic ตอนออกจาก Spotify ก็ export ออกมาแล้ว import ทั้งหมดเข้า Deezer และตอนนี้ก็ export ทุกอย่างจาก Deezer เป็นระยะ ๆ เพื่อเอาไป วิเคราะห์โน่นนี่ใน Excel
  • ผมทำ Chrome extension ง่าย ๆ ที่เมื่อเปิดลิงก์จากบริการเพลงอื่น จะ redirect ไปยังบริการที่ผมชอบโดยอัตโนมัติ
    กรณีของผมตั้งไว้เป็น YouTube Music ดังนั้นถ้าคลิกลิงก์อย่าง Spotify ใน Slack ก็จะพาไป YouTube Music
    https://chromewebstore.google.com/detail/music-link/gnhphofp...

    • มีเวอร์ชัน Firefox ไหม?
    • งานแบบนี้แหละที่ทำให้การพัฒนา Chrome extension สนุก
    • ดูเจ๋งดีนะ ทำ URL mapping เองแบบ manual หรือเปล่า?
  • อยากซื้อเพลงจริง ๆ แล้วเก็บไว้เอง เพราะเห็นเพลงที่เคยอยู่บน Spotify ค่อย ๆ หายไปบ่อยขึ้นเรื่อย ๆ
    แต่สมัยนี้การซื้อเพลงยากมาก ส่วนใหญ่ออกมาเป็นซิงเกิล และเท่าที่รู้เหมือนจะลงแค่บน แพลตฟอร์มสตรีมมิง ยังมีวิธีซื้อเพลงประเภทเดียวกับที่อยู่บนแพลตฟอร์มสตรีมมิงเป็นไฟล์เสียงจริง ๆ อยู่ไหม?

    • วิธีที่ยั่งยืนที่สุดในการ “ซื้อ” เพลง ส่วนตัวคิดว่าคือหาเพลงมาด้วย การละเมิดลิขสิทธิ์ แล้วค่อยสนับสนุนศิลปินด้วยการซื้อ merchandise
      หรือถ้าเป็นไปได้ก็ซื้อจาก Bandcamp
    • หลังจากย้ายไปอีกประเทศ แล้วเปลี่ยนบัตรเครดิตใน Spotify เป็นบัตรของประเทศใหม่ Spotify ก็เปลี่ยน การตั้งค่าภูมิภาค ของผมไปด้วย
      ผลคือเพลงจำนวนมากที่ผม “ติดดาว”/“เพิ่ม”/“กดไลก์” ไว้กลายเป็นสีเทาและเล่นไม่ได้ อย่างไรก็ดี ถ้าเป็นเรื่องการได้สำเนาเพลงที่ฟังมาเก็บไว้จริง ๆ ผมคิดว่าก็ละเมิดลิขสิทธิ์ไปเต็ม ๆ ได้เลยโดยไม่ต้องรู้สึกอายอะไร
    • ผมก็ทำแบบนั้นอยู่เหมือนกัน และในแคนาดา https://ca.7digital.com/ แทบจะเป็นตัวเลือกเดียวที่ให้ ซื้อ MP3 ทั่วไป ได้ ขอแนะนำอย่างยิ่ง
      อัลบั้มใหม่ ๆ ซื้อได้ไม่มีปัญหา แต่ซิงเกิลใหม่ ๆ ไม่แน่ใจ ในสหรัฐฯ ดูเหมือน Amazon จะอนุญาตให้ซื้อ MP3 ได้ แต่ไม่มั่นใจ
      ค่าสมัคร Spotify โดยทั่วไปก็พอซื้ออัลบั้มใหม่ได้เดือนละหนึ่งอัลบั้ม ซึ่งก็ดี และชอบที่คอลเลกชันอัลบั้มค่อย ๆ เพิ่มขึ้น
    • Bandcamp, 7Digital และแบบจำใจจริง ๆ ก็ Amazon ยิ่ง ค่ายเพลงใหญ่ เท่าไร การซื้อเพลงดิจิทัลก็ยิ่งยากขึ้น
    • ลองดู Qobuz ที่นี่เน้นเฉพาะ ไฟล์เพลงแบบ lossless และไม่มี MP3
      อีกไม่นานก็จะครบ 25 ปีของศตวรรษที่ 21 แล้ว ยุค Napster ที่ต้องสตรีม MP3 มันผ่านไปแล้ว
      ใน Qobuz มักมีอัลบั้มที่คุณภาพสูงกว่า 44.1 kHz / 16-bit stereo ด้วย ถึงจะฟังความต่างไม่ออก แต่ถ้าศิลปิน/วิศวกรเสียงใส่ใจพอจะให้ sampling rate หรือ bit depth ที่สูงขึ้น ก็มักหมายความว่าพวกเขาใส่ใจกับการทำให้เพลงเสียงดีด้วย
      Qobuz ทำสิ่งที่ต้องการได้ตรงจุด ซื้อและดาวน์โหลดแทร็กเดี่ยวหรือทั้งอัลบั้มได้ และ ไม่มี DRM
      ผมมีคอลเลกชันไฟล์เสียงที่ rip เองจาก CD ที่ซื้อมาแบบ bit-perfect/lossless 100% และใช้ subscription ของ Qobuz ควบคู่ไปด้วย ผลการ rip ตรวจสอบกับฐานข้อมูลออนไลน์ของคนที่ rip CD แผ่นเดียวกันแล้ว
      ข้อเสียของ Qobuz คือฟีเจอร์ค้นพบเพลงยังไม่ดีที่สุด และ UI ก็แย่พอสมควร แต่สำหรับคนที่ให้ความสำคัญกับคุณภาพและอยากเป็นเจ้าของเพลงของตัวเอง ก็ถือว่าดี
      อุปกรณ์ network streaming ส่วนใหญ่ทุกวันนี้รองรับ Qobuz เช่น ผมใช้แอมป์ Yamaha ที่มี network streamer ในตัว (Yamaha R-N1000A) และแอปสตรีมเพลงของ Yamaha อย่าง MusicCast ก็รองรับ Qobuz, Tidal, Spotify
      คุณสามารถซื้อแทร็กแต่ละเพลงมาเป็นเจ้าของได้จริง ๆ ไม่ใช่เช่าสิทธิ์เข้าถึงชั่วคราวจากบริการออนไลน์ที่อาจหายไปจากใต้เท้า หรืออาจลบเพลงที่เคยฟังออกไป
      ลองดูแพ็กเกจราคาได้เลย แพ็กเกจที่คุ้มกว่าจะต่างกันตามจำนวนเพลงที่ซื้อ
      เท่าที่ผมเข้าใจ Spotify ก็ประกาศว่าจะย้ายไป สตรีมมิงแบบ lossless ภายใต้แรงกดดันจาก Tidal และ Qobuz กว่าจะมาถึงปี 2024 ถึงเพิ่งจะ
  • ลองสองเพลงแรกแล้ว การจับคู่กับ YouTube Music ล้มเหลว
    Two Words ของ Kanye West: https://open.spotify.com/track/62wtttQzoIA9HnNmGVd9Yq?si=b1b...
    กลับพาไปที่ Two Words ของ Milabel Ranque: https://music.youtube.com/watch?v=Y64cFG9dfYo
    Never Let Me Down ของ Kanye West: https://open.spotify.com/track/34j4OxJxKznBs88cjSL2j9?si=7ec...
    กลับพาไปที่ Never Let me Down ของ Depeche Mode: https://music.youtube.com/watch?v=snILjFUkk_A
    ทั้งที่บนเว็บแสดงปกอัลบั้มถูกต้องแล้วก็ตาม เพลงที่ลองใส่จริง ๆ ไม่มีเพลงไหนทำงานได้ถูกต้องเลย ปกติมันเป็นแบบนี้หรือเปล่า? ใช้วิธีหาเพลงที่ชื่อคล้ายกันหรือ?

    • ของผมก็เหมือนกัน ลองค้นจากข้อความหาเพลงล่าสุดที่เพื่อนส่งมาให้
      https://open.spotify.com/track/5qFL2uwfnGU8FccwLMgPNQ?si=b-a...
      https://idonthavespotify.donado.co/?id=b3Blbi5zcG90aWZ5LmNvb...
      ที่นี่ไม่มีลิงก์ YouTube Music:
      https://music.youtube.com/watch?v=0IHBCxs7QPE&si=QYvCtGCjKav...
      แต่ถ้ามันทำงานได้เสถียร ก็น่าจะใช้บ่อยอยู่ เป็นไอเดียเครื่องมือเล็ก ๆ ที่มีประโยชน์มาก
    • ลองกับแทร็กสุ่มที่บังเอิญกำลังฟังอยู่
      https://idonthavespotify.donado.co/?id=b3Blbi5zcG90aWZ5LmNvb...
      ลิงก์ Deezer ถูกต้อง, Tidal ใช้งานไม่ได้ และที่เหลือผิดหมด
      ถึงอย่างไรก็เป็นไอเดียที่ยอดเยี่ยม เมื่อหลายปีก่อนผมก็เคยคิดว่าจะลองทำอะไรแบบนี้
      เวลาแชร์เพลงในกลุ่มที่มีคนไม่มี Spotify ปนอยู่ มักจะต้องกลับไปใช้ ลิงก์ YouTube ซึ่งเป็นตัวหารร่วม
    • ไม่รู้ว่าทำไมถึงไม่ชอบเพลงของ Kanye เข้าใจว่าเขาไม่ใช่คนน่าคบหา แต่เพลงดีจริง ๆ โดยเฉพาะเพลงที่ลองพวกนี้ :D
  • ผมได้รับลิงก์ Spotify บ่อยมาก อันนี้เลยดี ลิงก์ที่ดีกว่าน่าจะเป็นหน้าบริการจริง ไม่ใช่ repository บน GitHub
    https://idonthavespotify.donado.co/
    ถ้ามีเป็น ส่วนขยาย สำหรับผู้ใช้ Firefox ด้วยคงดีมาก หวังว่าสักวันจะมีคนทำให้

    • ถ้ารู้ได้ง่าย ๆ ว่าพารามิเตอร์ id ในหน้าผลลัพธ์มาจากไหน ก็น่าจะทำเป็น bookmarklet ได้เหมือนกัน
      เดาว่าน่าจะเป็นอะไรประมาณแฮชแบบง่ายของลิงก์
    • ทำไมถึงได้รับลิงก์ Spotify บ่อยขนาดนั้น?
  • เวลาทำหน้าที่มีลิงก์ผู้ให้บริการเพลงหลายเจ้า ผมใช้หน้านี้: https://odesli.co
    ใช้ได้ทั้งระดับศิลปิน อัลบั้ม และเพลง
    ถ้าเข้าสู่ระบบจะปรับแต่ง URL ได้
    ผมเป็นแค่ผู้ใช้ ไม่มีส่วนได้เสีย

    • ผมก็ชอบ Songlink/Odesli มากเหมือนกัน การค้นหายังทำงานเร็วกว่า search ของ Spotify หรือ Apple Music ด้วย
    • เมื่อ 5 ปีก่อนผมทำ บอต Discord ที่ใช้ songlinks API
      น่าเสียดายที่ไม่ค่อยมีคนใช้ และตอนนี้ไม่ได้ดูแลต่อแล้ว
    • มี integration กับ Slack ด้วย: /songlink {url}
  • หนึ่งในฟีเจอร์ที่ดีที่สุดที่ได้จาก NAS คือการเก็บเพลงไว้ในนั้น แล้วสตรีมไปยังมือถือได้
    ผมชอบซื้อเพลงบางส่วนมา เก็บไว้เอง มากกว่าพึ่งพาบริการสมัครสมาชิก

    • ช่วยแชร์ได้ไหมว่าใช้หรือแนะนำชุดซอฟต์แวร์อะไร ทั้งสำหรับ NAS และการสตรีมไปมือถือ?
  • สมัยก่อนตอนดูแล บอตเพลง Discord ผมสตรีมจาก YouTube
    ถ้าจะให้ URL ของ Spotify ใช้งานได้ การค้นหา YouTube ต้องจับคู่ได้อย่างเสถียร เทคนิคหนึ่งที่ใช้ได้ดีคือใส่ URL ของ Spotify ลงไปในคำค้น YouTube ด้วย พร้อมกับชื่อเพลง ชื่อศิลปิน ฯลฯ
    คำอธิบายของวิดีโอ YouTube อย่างเป็นทางการมักมีลิงก์ Spotify อยู่ และเพราะ YouTube search จับคู่ถึงคำอธิบายด้วย จึงช่วยคัดวิดีโอ “ทางการ” ออกมาได้ค่อนข้างดี

  • บริการนี้เชื่อมกับบริการได้เพิ่มอีกหลายเจ้า แต่ไม่สามารถวาง URL เดิมลงไปตรง ๆ ได้: https://odesli.co/
    มันใกล้เคียงกับบริการแบบลิงก์ทรีมากกว่า แต่ค้นหาเพลงและอัลบั้มได้ จึงหาเจอง่าย
    ตัวอย่าง: https://song.link/i/1051394215