에어소닉을 사용해본 사람이라면 알겠지만
에어소닉에는 플레이리스트를 정렬할 수 있는 방법이 하나밖에 없다.
바로 손으로 일일히 하나하나 정리하는 것이다.

 

그냥 앨범별, 폴더별, 아티스트별 이렇게 간단하게 정리해줬으면 좋겠는데 기능도 없고
그렇다고 하나하나 정리하기에는 내 플레이리스트에 있는 노래가 너무 많아졌다...
그래서 플레이리스트와 별표된 노래를 정렬할 수 있는 방법을 만들려고 한다.

SERVER='http://localhost/airsonic'
CLIENT='CLI'
USERNAME='admin'
PASSWORD='admin'
SALT="$(openssl rand -hex 20)"
TOKEN="$(echo -n "${PASSWORD}${SALT}" | md5sum | awk '{ print $1 }')"
echo ${SALT}
echo ${TOKEN}
curl "${SERVER}/rest/getPlaylists?u=${USERNAME}&t=${TOKEN}&s=${SALT}&v=1.15.0&c=${CLIENT}"

위의 명령어를 사용하면 간단하게 API를 날리 수 있따.

우선 플레이리스트의 목록을 가져왔다.

플레이리스트의 id를 알아야 플레이리스트의 노래목록을 가져올 수 있기 때문이다.

<?xml version="1.0" encoding="UTF-8"?>
<subsonic-response xmlns="http://subsonic.org/restapi" status="ok" version="1.15.0">
   <playlists>
      <playlist id="4" name="aa" comment="" owner="admin" public="false" songCount="148" duration="38279" created="2021-04-24T16:32:28.549Z" changed="2021-07-08T23:39:25.343Z" coverArt="pl-4"/>
      <playlist id="7" name="aaa" owner="admin" public="false" songCount="20" duration="5462" created="2021-06-21T08:10:09.487Z" changed="2021-07-08T23:39:30.937Z" coverArt="pl-7"/>
      <playlist id="6" name="아이카츠" owner="admin" public="false" songCount="113" duration="29959" created="2021-05-20T01:30:47.781Z" changed="2021-05-20T01:31:05.752Z" coverArt="pl-6"/>
      <playlist id="5" name="프리파라" owner="admin" public="false" songCount="133" duration="29424" created="2021-05-12T00:12:54.650Z" changed="2021-07-02T04:50:00.105Z" coverArt="pl-5"/>
   </playlists>
</subsonic-response>

 

그렇게 가져온 플레이리스트 ID로 플레이리스트를 가져오면 이런 결과가 나온다.

 

curl "${SERVER}/rest/getPlaylist?u=${USERNAME}&t=${TOKEN}&s=${SALT}&v=1.0.0&c=${CLIENT}&id=7"

<?xml version="1.0" encoding="UTF-8"?>
<subsonic-response xmlns="http://subsonic.org/restapi" status="ok" version="1.15.0">
   <playlist id="7" name="aaa" owner="admin" public="false" songCount="20" duration="5462" created="2021-06-21T08:10:09.487Z" changed="2021-07-08T23:39:30.937Z" coverArt="pl-7">
      <entry id="211" parent="198" isDir="false" title="HAPPY면 LUCKY (솔라미♡스마일)" album="한국어" artist="프리파라" coverArt="198" size="4746327" contentType="audio/mpeg" suffix="mp3" duration="286" bitRate="64" path="프리파라/한국어/HAPPY면 LUCKY (솔라미♡스마일).mp3" isVideo="false" playCount="60" created="2021-02-02T15:36:38.077Z" starred="2021-04-28T23:45:30.352Z" albumId="2731" artistId="913" type="music"/>
      <entry id="11658" parent="11612" isDir="false" title="Lu La La☆Lumière" album="キラキラ☆プリキュアアラモード ボーカルアルバム 2 苺坂物語" artist="駒形友梨" track="1" year="2017" genre="Anime" coverArt="11612" size="11564299" contentType="audio/mpeg" suffix="mp3" duration="285" bitRate="320" path="프리큐어/[프리큐어] 키라키라 프리큐어 아라모드/キラキラ☆プリキュアアラモード ボーカルアルバム 2 苺坂物語/Lu La La☆Lumière.mp3" isVideo="false" playCount="59" created="2018-05-26T08:03:40.000Z" starred="2021-05-12T23:20:30.094Z" albumId="2622" type="music"/>
      <entry id="11278" parent="11254" isDir="false" title="La♪La♪La♪ Suite Precure♪ ~∞UNLIMITED∞ ver.~" album="Suite Precure♪ 2nd OP&amp;ED Theme Single" artist="Mayu Kudo" track="1" year="2011" genre="Soundtrack" coverArt="11254" size="8303807" contentType="audio/mpeg" suffix="mp3" duration="206" bitRate="320" path="프리큐어/[프리큐어] 스위트 프리큐어/Suite Precure♪ 2nd OP&amp;ED Theme Single/La♪La♪La♪ Suite Precure♪ ~∞UNLIMITED∞ ver.~.mp3" isVideo="false" playCount="44" created="2018-05-26T10:15:02.000Z" starred="2021-05-12T23:27:39.529Z" albumId="2574" artistId="900" type="music"/>
   </playlist>
</subsonic-response>

 

계획은 간단한데

우선 설정값으로 이런 값을 받는다.

1. 유저 ID

2. 유저 패스워드

3. 플레이리스트 이름

4. 새로 만들 플레이리스트 이름

5. 정렬 기준(최대 3개정도)

 

정렬기준은 아래와 같다.

 

id
album
artist
year
genre
size
path
created
starred

getPlaylist에 들어있는 값들을 이용해서 정렬할것이다

 

 

그 후에 그냥 플레이리스트를 만든 후

정렬된 리스트를 순서대로 플레이리스트에 넣어주면 끝이다.

 

아니 이런 간단한 기능을 지금까지 아무도 안만들어 주다니

진짜 너무한것 같다.

 

그래서 한번 간단하게 만들어봤는데 일단 동작 자체는 잘 되는걸 확인했다.

 

https://github.com/AhatLi/SonicClassifier

 

AhatLi/SonicClassifier

Sort playlist for Airsonic, subsonic . Contribute to AhatLi/SonicClassifier development by creating an account on GitHub.

github.com

 

근데 막상 써보니 star 목록에 대해서도 정렬을 해야될것 같다.

이것도 플레이리스트 정렬 방법이랑 똑같이 하면 되긴 하지만

사용하는 API가 달라서 결국 기능 추가는 해야한다...

어렵지는 않지만 귀찮은 작업인데 나중에 시간날때 추가해야겠다.

 

그리고 또 써보니까 GUI로 되어있으면 상당히 편하지 않을까 하는 생각도 들었다.

go언어용 GUI 라이브러리가 몇가지 있던데 사용방법을 확인해서

나중에는 GUI로 돌아가도록 수정해야겠다.

+ Recent posts