TL;DR

  • Spotify 브라우저 API는 타입스크립트로 만든 로컬 단일 계정 서버이며, 브라우저 자동화 방식으로 Spotify 웹 플레이어를 조작함
  • Puppeteer가 크로미움 또는 파이어폭스에서 Spotify 웹 플레이어를 구동하고, 렌더링된 HTML을 읽으며 플레이어 버튼을 클릭함
  • Spotify의 웹 API 호출, 접근 토큰 추출, 비공개 네트워크 요청 재생을 수행하지 않음
  • 검색과 항목 스냅샷, 내 보관함과 좋아요 표시 곡, 아이디 기반 비공개 재생 목록 스냅샷, 재생 제어, 제한된 메모리 캐시를 포함함
  • 계정 관련 경로는 실험 단계이며, 헤드리스 오디오 재생은 보장되지 않음

Spotify 브라우저 API

  • Spotify 브라우저 API는 타입스크립트로 만든 로컬 단일 계정 API 서버임
  • Puppeteer가 크로미움 또는 파이어폭스에서 Spotify 웹 플레이어를 구동함
  • 서버가 렌더링된 HTML을 읽고 플레이어 버튼을 클릭하는 방식으로 동작함
  • Spotify 웹 API를 호출하지 않으며, 접근 토큰을 추출하거나 비공개 네트워크 요청을 다시 재생하지 않음

포함 기능

  • 검색 및 항목 스냅샷
  • 내 보관함과 좋아요 표시 곡
  • 아이디로 조회하는 비공개 재생 목록 스냅샷
  • 플레이어 제어
  • 범위가 제한된 메모리 내 캐시

시작 방법

  • 설정과 브라우저 로그인을 먼저 진행함
  • 같은 API_TOKEN을 사용해 bun run tui를 실행하면 터미널 플레이어를 열 수 있으며, API 참고 문서의 경로를 사용할 수도 있음
  • 결과를 신뢰하기 전에 제한 사항과 검증 내용을 확인함
  • 서버 실행에는 Node.js 22 이상이 필요함
  • Bun으로 의존성을 설치하고 패키지 스크립트를 실행할 수 있음

계정 기능과 재생 제한

  • 계정 관련 경로는 실험 기능임
  • 오프라인 브라우저 테스트는 Spotify의 현재 로그인 화면이 아니라 고정 자료를 대상으로 동작을 검증함
  • 헤드리스 환경에서 오디오 재생은 보장되지 않음

점검 명령

  • bun install --frozen-lockfile로 잠금 파일에 맞춰 의존성을 설치함
  • bun run check로 점검을 실행함
  • BROWSER_EXECUTABLE_PATH=/usr/sbin/firefox bun run test로 파이어폭스 실행 파일을 지정해 테스트함
  • BROWSER_EXECUTABLE_PATH에는 설치된 파이어폭스, 크로미움 또는 크롬 실행 파일 경로를 지정함
  • 해당 변수를 지정하지 않으면 서버가 표준 Google Chrome 설치 위치를 찾음
  • 브라우저는 자동으로 내려받지 않음