- 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
การรันในเครื่องและการตั้งค่า 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ยังมีไซต์ที่น่าประทับใจกว่านี้ ซึ่งช่วยย้าย เพลย์ลิสต์จากแพลตฟอร์มกว่า 20 แห่ง รวมถึง Spotify หรือไฟล์ข้อความ ไปยังแพลตฟอร์มอื่นกว่า 20 แห่งหรือไฟล์ข้อความได้ด้วย
ขออย่าให้ทุกคนแห่กันไปจนเว็บล่มนะ :)
https://app.tunemymusic.com/transfer
แทนที่จะให้บุคคลที่สามต้องแก้ปัญหาการเชื่อมต่อทุกคู่ ถ้ามี รูปแบบนำเข้า/ส่งออกที่เป็นกลางต่อผู้ให้บริการ ก็คงดี
ย้ายศิลปินที่กดติดดาวไว้ แต่มันพยายามจับคู่จากชื่ออย่างเดียว พอมีชื่อเดียวกันมากกว่าหนึ่งรายก็พังยับ และเหมือนแทบจะสุ่มเลือกเอา อยากรู้ว่าบริการนี้จะเป็นยังไง
ผมมีเพลย์ลิสต์มากกว่า 10 รายการที่เต็มไปด้วยเพลงซึ่งถูกลบเพราะการแจ้งละเมิดลิขสิทธิ์ที่ไม่เหมาะสม แต่ไม่รู้ชื่อเพลง/ศิลปินของแทร็กที่ถูกลบ เลยสร้างเพลย์ลิสต์ขึ้นมาใหม่ไม่ได้
ผมทำ Chrome extension ง่าย ๆ ที่เมื่อเปิดลิงก์จากบริการเพลงอื่น จะ redirect ไปยังบริการที่ผมชอบโดยอัตโนมัติ
กรณีของผมตั้งไว้เป็น YouTube Music ดังนั้นถ้าคลิกลิงก์อย่าง Spotify ใน Slack ก็จะพาไป YouTube Music
https://chromewebstore.google.com/detail/music-link/gnhphofp...
อยากซื้อเพลงจริง ๆ แล้วเก็บไว้เอง เพราะเห็นเพลงที่เคยอยู่บน Spotify ค่อย ๆ หายไปบ่อยขึ้นเรื่อย ๆ
แต่สมัยนี้การซื้อเพลงยากมาก ส่วนใหญ่ออกมาเป็นซิงเกิล และเท่าที่รู้เหมือนจะลงแค่บน แพลตฟอร์มสตรีมมิง ยังมีวิธีซื้อเพลงประเภทเดียวกับที่อยู่บนแพลตฟอร์มสตรีมมิงเป็นไฟล์เสียงจริง ๆ อยู่ไหม?
หรือถ้าเป็นไปได้ก็ซื้อจาก Bandcamp
ผลคือเพลงจำนวนมากที่ผม “ติดดาว”/“เพิ่ม”/“กดไลก์” ไว้กลายเป็นสีเทาและเล่นไม่ได้ อย่างไรก็ดี ถ้าเป็นเรื่องการได้สำเนาเพลงที่ฟังมาเก็บไว้จริง ๆ ผมคิดว่าก็ละเมิดลิขสิทธิ์ไปเต็ม ๆ ได้เลยโดยไม่ต้องรู้สึกอายอะไร
อัลบั้มใหม่ ๆ ซื้อได้ไม่มีปัญหา แต่ซิงเกิลใหม่ ๆ ไม่แน่ใจ ในสหรัฐฯ ดูเหมือน Amazon จะอนุญาตให้ซื้อ MP3 ได้ แต่ไม่มั่นใจ
ค่าสมัคร Spotify โดยทั่วไปก็พอซื้ออัลบั้มใหม่ได้เดือนละหนึ่งอัลบั้ม ซึ่งก็ดี และชอบที่คอลเลกชันอัลบั้มค่อย ๆ เพิ่มขึ้น
อีกไม่นานก็จะครบ 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 ซึ่งเป็นตัวหารร่วม
ผมได้รับลิงก์ Spotify บ่อยมาก อันนี้เลยดี ลิงก์ที่ดีกว่าน่าจะเป็นหน้าบริการจริง ไม่ใช่ repository บน GitHub
https://idonthavespotify.donado.co/
ถ้ามีเป็น ส่วนขยาย สำหรับผู้ใช้ Firefox ด้วยคงดีมาก หวังว่าสักวันจะมีคนทำให้
idในหน้าผลลัพธ์มาจากไหน ก็น่าจะทำเป็น bookmarklet ได้เหมือนกันเดาว่าน่าจะเป็นอะไรประมาณแฮชแบบง่ายของลิงก์
เวลาทำหน้าที่มีลิงก์ผู้ให้บริการเพลงหลายเจ้า ผมใช้หน้านี้: https://odesli.co
ใช้ได้ทั้งระดับศิลปิน อัลบั้ม และเพลง
ถ้าเข้าสู่ระบบจะปรับแต่ง URL ได้
ผมเป็นแค่ผู้ใช้ ไม่มีส่วนได้เสีย
น่าเสียดายที่ไม่ค่อยมีคนใช้ และตอนนี้ไม่ได้ดูแลต่อแล้ว
/songlink {url}หนึ่งในฟีเจอร์ที่ดีที่สุดที่ได้จาก NAS คือการเก็บเพลงไว้ในนั้น แล้วสตรีมไปยังมือถือได้
ผมชอบซื้อเพลงบางส่วนมา เก็บไว้เอง มากกว่าพึ่งพาบริการสมัครสมาชิก
สมัยก่อนตอนดูแล บอตเพลง Discord ผมสตรีมจาก YouTube
ถ้าจะให้ URL ของ Spotify ใช้งานได้ การค้นหา YouTube ต้องจับคู่ได้อย่างเสถียร เทคนิคหนึ่งที่ใช้ได้ดีคือใส่ URL ของ Spotify ลงไปในคำค้น YouTube ด้วย พร้อมกับชื่อเพลง ชื่อศิลปิน ฯลฯ
คำอธิบายของวิดีโอ YouTube อย่างเป็นทางการมักมีลิงก์ Spotify อยู่ และเพราะ YouTube search จับคู่ถึงคำอธิบายด้วย จึงช่วยคัดวิดีโอ “ทางการ” ออกมาได้ค่อนข้างดี
บริการนี้เชื่อมกับบริการได้เพิ่มอีกหลายเจ้า แต่ไม่สามารถวาง URL เดิมลงไปตรง ๆ ได้: https://odesli.co/
มันใกล้เคียงกับบริการแบบลิงก์ทรีมากกว่า แต่ค้นหาเพลงและอัลบั้มได้ จึงหาเจอง่าย
ตัวอย่าง: https://song.link/i/1051394215
placeholder ในช่องค้นหาก็เขียนว่า “Search or paste URL”