# MusicQ 기본 컨셉
[스토리보드 목업 보기](https://thebrigade.invisionapp.com/share/WK9U7CSP7#/screens/213036112)
# Spotify API research
MusicQ에서 Spotify Playlist를 재생할 수 있습니다.
아래는 개발자 가이드입니다.
[iOS SDK Quick Start](https://developer.spotify.com/documentation/ios/quick-start/) - Create a simple iOS application that uses the Spotify iOS SDK to play a track and respond to changes in playback state.
[Android SDK Quick Start (BETA)](https://developer.spotify.com/documentation/android/quick-start/) - Create a simple app that uses the Android SDK to play a playlist and subscribe to PlayerState.
Introduction
...This tutorial leads you step-by-step through the creation of a simple app that uses the Spotify **App Remote SDK** to play a playlist. We show you how to:
Play a playlist from a URI
Subscribe to PlayerState of the Spotify app and read its data...
개발준비사항
- [ ] Register a Developer App
- [ ] **Install the Spotify App**
- [ ] Download the iOS SDK
> iOS / Andoid 모두 Spotify앱이 사용자 휴대폰에 설치되어 있어야 합니다.
# Apple Music API research
애플 뮤직에서 제공하는 MusicKit을 이용하면 MusicQ의 필요 기능을 구현할 수 있어보입니다.
[MusicKit 설명 보기(영문)](https://developer.apple.com/musickit/ )
### iOS Apps
> Get details on **how to build iOS apps that integrate Apple Music** using the Apple Music API, as well as the StoreKit and MediaPlayer frameworks.
* **Authorize Apple Music with StoreKit** - . Check if a user has an Apple Music membership to automatically play music, or let them start a trial membership directly within your app.
* **Control Playback with MediaPlayer** - Play any song from Apple Music and access a user’s music library, with their permission.
### Android Apps
> MusicKit for Android lets you build native Apple Music features **into your Android app.** Libraries are available to let users sign in to their Apple Music account and play music directly from your app.
* **Authentication for Apple Music** - ... get access tokens to play music...
* **Media Playback for Apple Music** - The Media Playback library can be used to **play** songs, albums, and playlists **on Apple Music without leaving your app**....
iOS와 Android 설명과 용어에 차이가 있긴 하지만, MusicQ를 개발하는데 문제가 있어 보이지는 않습니다.
- [ ] Spotify와 다르게 Apple Music 앱이 설치될 필요가 없어 보이긴 하지만... 확인이 필요합니다.
# 한국 - (Not Available)
멜론 API는 과거에 있었으나, 현재 이용 불가능한 것으로 보입니다.
- [SK플래닛, 오픈 API 서비스 중단 발표…중소 개발사 "앱 서비스 중단해야 하나"](http://it.chosun.com/site/data/html_dir/2018/01/18/2018011885037.html)
카카오 api 리스트에 멜론이 없습니다.
- [카카오 API 소개](https://developers.kakao.com/features/kakao)
벅스 / FLO / 지니도 API를 공개하지는 않았습니다. 하지만 다른 기업과 협업한 사례가 보이네요. 사용해보신 분이 계시다면 경험담 공유 부탁드립니다.
- [구글 어시스턴트, 멜론·지니·벅스 연동된다](https://www.asiae.co.kr/article/2017092814321889981)
# 중국 - (QQ / xiaomi / NetEase)
아마도 공식 문서?
https://wiki.open.qq.com/index.php?title=iOS_API%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E&oldid=46716
https://wiki.open.qq.com/wiki/API%E5%88%97%E8%A1%A8#.E4.B8.B0.E5.AF.8C.E8.83.BD.E5.8A.9B.E7.B1.BBAPI
https://wiki.open.qq.com/wiki/v3/music/get_list
(구글 번역)
* 기능 설명
* 이 인터페이스는 Tencent에서 제공하는 음악 클립을 얻기 위해 일부 음악 PK 지원 응용 프로그램의 요구 사항을 지원하기 위해 특별히 제공됩니다. 응용 프로그램은 이 인터페이스를 호출하여 Tencent 음악 데이터베이스에서 **노래 목록 및 노래 정보를 가져올 수 있습니다** (예 : 총 노래 수, 노래 목록, 노래 ID, 아티스트 이름, 노래 조각 수 등).
* 이 인터페이스를 호출하여 노래 정보를 얻은 후에 v3 / music / get_clip 인터페이스를 호출 하여 지정된 **노래 단편 URL을 가져 와서 지정된 노래 단편을 사용자에게 재생하는 기능을 구현할 수 있습니다.**
https://wiki.open.qq.com/wiki/v3/music/get_clip
(구글 번역)
* 기능 설명
* 이 인터페이스는 Tencent에서 제공하는 음악 클립을 얻기 위해 일부 음악 PK 지원 응용 프로그램의 요구 사항을 지원하기 위해 특별히 제공됩니다. 응용 프로그램에서 v3 / music / get_list 인터페이스를 호출 하여 노래의 관련 정보를 얻은 후, 이 인터페이스를 호출 하여 지정된 노래 단편의 URL을 가져올 수 있습니다. 이 인터페이스는 배치 수집을 지원하며 한 번에 최대 20 개의 노래 조각 URL을 가져올 수 있습니다.
* 사용자가 음악을 재생하기 위해 애플리케이션을 입력하면, 인터페이스에 의해 획득 된 URL을 이용하여 노래 세그먼트를 **사용자에게 재생할 수있다.**
> 메뉴얼 읽기 힘들지만 된다는 것 같기도 하고요...
github에 많은 프로젝트들이 등록된 것을 보면 API로 구현이 되는 모양입니다.
https://github.com/topics/qqmusic
https://github.com/BeanWei/MusicSpider
# 이 프로젝트를 어떻게 구현하지?
> 스트리밍서비스는 유튜브와는 다릅니다. 철저히 개인화된 서비스이며, 로그인을 하지 않으면 서비스 이용이 거의 불가능합니다.
| 서비스 | 무료사용가능 | API(SDK) 제공 | 해외 이용 가능 | 인증시스템 | ISRC 검색 | 재생범위 |
| ---- | --- | ---- | --- | --- | --- | -- |
| Spotify | O | SDK | 허용된 국가만(한국X) | OAuth2 | OK | 미리듣기,전곡재생 |
| Apple Music | X | SDK | O | JWT 사용(아마도 가능) | OK | 미리듣기,전곡재생 |
| QQ Music | ? | API | 중국만 | OAuth2 | ? | |
| Napster | O | API, SDK | 허용된 국가만(한국X) | OAuth2 | O | 미리듣기,전곡재생 |
| Deezer | O | API, SDK | 허용된 국가만(한국X) | OAuth2 | O | 미리듣기,전곡재생 |
| Pandora | X | 협력사에게만 제공 | 미국만 | ? | ? | |
| Tidal | X | 협력사에게만 제공 | 허용된 국가만(한국X) | ? | ? | |
| Soundgrabber | X | . | 허용된 국가만(한국X) | ? | ? | |
| Soundcloud | O | API | 일부 곡 국가별 제한 | OAuth | X | 전곡재생 |
| last.fm | O | API | Youtube연결 | OAuth | X | |
| 멜론 | . | . | O | ? | ? | |
| 엠넷 | . | . | O | ? | ? | |
| 벅스 | . | . | O | ? | ? | |
| 지니 | . | 협력사에게만 제공 | O | ? | ? | |
[Spotify ISRC 매뉴얼](https://developer.spotify.com/documentation/web-api/reference/search/search/)
예제 - https://api.spotify.com/v1/search?type=track&q=isrc:USWB11802164+OR+isrc:DEMA61301103
Track Metadata - https://developer.spotify.com/documentation/web-api/reference/tracks/get-track/
[Apple Music 매뉴얼 ](https://developer.apple.com/documentation/applemusicapi/get_multiple_catalog_songs_by_isrc)
예제 - https://api.music.apple.com/v1/catalog/us/songs?filter[isrc]=DEMA61301103
```
API key 없이 검색 예시: https://itunes.apple.com/search?term=jack+johnson
```
Deezer ISRC Usage
```
https://api.deezer.com/2.0/track/isrc:USWB11200587
```
[Napster ISRC 매뉴얼](https://developer.napster.com/api/v2.2#tracks)
SDK - https://github.com/Napster/napster.js
* Spotify의 경우 **로그인 하는 시점에 해외여야합니다.**
* QQ Music은 스트리밍도 중국에서만 제공합니다.
#### 비즈니스 파트너쉽 없이 서비스를 구현하는 경우
시나리오
(로그인) 동오는 Spotify 계정으로 MusicQ에 로그인한다.
(list 공유) 동오가 듣는 음악을 playlist로 공유한다
> 이 때, playlist의 ISRC 정보를 내부적으로 관리한다.
>
(play) 종혁이는 Apple Music 계정으로 MusicQ에 가입했다. 동오가 공유한 list를 보고 플레이 버튼을 누른다.
> Apple Music에 해당 음악이 존재하는 경우 (ISRC 비교), Apple Music에서 음악을 재생한다.
>
> 해당 음악이 존재하지 않으면 적절한 안내 메시지를 보여준다.
> (해당 음악은 Spotify에서만 재생할 수 있습니다. --> 가입 유도)
ISRC 검색 가능?
##### 아래 내용은 헛다리 짚은 내용입니다 (ㅠㅠ)
헛다리 시작
```
1. MusicQ 가입자가 모든 스트리밍 서비스에 가입
> 개인이 모든 음원 사이트에 유료 구독 가입. 그리고 MusicQ를 이용해서 모든 플레이리스트를 검색하고 음악을 듣는다. (이런 서비스를 의도하는 것은 아닌 것 같습니다.)
* 기술적으로는 MusicQ 사용자가 각 음원제공 서비스에 한 번씩 로그인하는 절차가 필요
* 물론, 각 음원 서비스에 유료 구독 모델에 가입되어 있어야지 음원 재생이 가능(Spotify / QQ Music 제외)
2. MusicQ에서 각 스트리밍 서비스를 일정 수 이상 구독한다 (예를 들어, 서비스당 계정 100개씩 Pooling)
> 동오는 Spotify를 이용한다. MusicQ에서 Spotify 계정으로 로그인하고 사용중이다. Top Track에 Apple Music Top100 Playlist를 확인하고 음악을 재생한다. 하지만 동오는 Apple Music에 가입한 적도 없고 유료 모델도 구독하고 있지 않다. 어떻게?
* MusicQ가 보유한 Apple Music 유료 구독 계정 pool에서 하나를 동오에게 할당하고, 음악을 재생할 수 있도록 서비스하기. 이런 시나리오는 인증방식에 따라 서버에서 미리 인증 정보(token)을 보유하고, 요청이 있을 때 하나씩 사용하는 방법을 생각해볼 수 있습니다. 하지만 이러한 방법은 보안상 문제가 심각하고, 허용하는 정책이 아니고 해킹에 가까운 방법으로, 앱스토어 심사시 거절당할 가능성이 존재합니다.
#### 검토 결과
spotify https://developer.spotify.com/documentation/ios/quick-start/
- login 페이지를 제공, 사용자가 자신의 ID PW 입력
- MusicQ의 Pooling ID를 입력할 수 없음
#### 비즈니스 파트너쉽으로 문제를 해결한다면?
* **예를 들어, 멜론 사용자라는 것이 확인된다면, QQ Music에서 음악을 재생할 수 있도록 사용권한을 준다.** 라는 비즈니스 파트너쉽이 맺어진다면 MusicQ에서 원하는 모든 것을 구현할 수 있습니다. 다만 QQ Music, Spotify는 국가별 스트리밍 제한을 두고 있는데, 이게 국가 Regulation과 연관이 있는게 아닌가 싶습니다. 만약 그렇다면 국가별 정책에 따라 서비스가 제한될 수 있습니다.
```
# ETC
한국 Appstore/Playstore에서는 Spotify를 정식으로 사용할 수 없습니다. VPN을 통해 미국 계정을 생성하고, 미국 마켓에서 다운로드 받고, 미국에서 사용하는 척(?) 로그인을 하면 그제서야 한국에서 Spotify를 사용할 수 있습니다.
| 설명 | 링크 |
| ---- | ----- |
| 애플 미국 계정 만들기 | https://sincerechloe.tistory.com/15 |
| 구글 미국 계정 만들기 | https://mudnji.tistory.com/563 |
| 휴대폰 VPN 도구(무료) 소개 - 터널 베어 | https://mudnji.tistory.com/561 |
| 한국에서 스포티파이 이용하기 | https://min7zz.tistory.com/834 |
미국구글 계정을 하나 만들어두었습니다. 터널 베어라는 앱으로 VPN만 설정하시면 스포티파이를 사용해보실 수 있습니다.
| 미국 Google 계정 | 비밀번호 |
| ---- | ----- |
| spotifytester9000@gmail.com | xptmxj1234 |
| |↑ (테스터1234) 입니다 |
**무료 계정은 중복 로그인이 안 돼요. 다른 사람이 사용중일 때는 사용할 수 없습니다.**