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

 

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

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로 돌아가도록 수정해야겠다.

예전에 핸드폰에 용량이 너무 부족해서

클라우드 스토리지를 이것저것 알아본적이 있었다.

 

네이버 클라우드, 구글 클라우드, 원드라이브 다 알아보았는데 내 마음에 드는것은 없었다.

굳이 꼽자면 네이버 클라우드쪽이 가장 쓰기 좋았지만

안그래도 돈 나가는것도 많은데 매달 돈을 쓰면서까지 사용해야할 정도는 아니기도 하고...

 

그래서 무료 오픈소스 클라우드 서버프로그램인 파이디오(Pydio) 등도 설치하고 다 해보았지만

생각보다 무겁고 내 빈약한 스마트폰 환경에서는 사용하기가 어려웠다.

 

그러다가 이미지 전용 클라우드 서버같은건 없을까 싶어서 찾아보다가  그냥 내가 만들기로 했다.

내가 진짜로 원하는 기능은 정말 간단했는데

 

그냥 이미지파일을 업로드 다운로드가 가능하고 

목록의 이미지는 썸네일을 표시 해서 표시하는데 필요한 용량은 줄이고

이미지 썸네일을 누르면 원본 이미지를 표시해서 양옆 스와이프로 다음 이전 이미지로 이동할 수 있는 정도?

 

이정도만 있으면 딱 좋겠다고 생각했다.

 

일단 모바일에서 사용이 가능해야되는데 앱으로 만들기는 어려우니까

간단하게 html과 자바스크립트 그리고 golang을 사용해서 만들었다.

 

일단 제작 컨셉은 다른 오픈소스 클라우드 프로그램들을 사용하다보니

설치나 사용방법 복잡하다는 것을 느껴서

다운받고 실행파일만 눌러서 딱 실행만 하면 바로 쉽게 사용할 수 있는 프로그램이다.

 

프로그램 외형은 컨셉이 아니라 그냥 내가 디자인 센스가 없어서 저렇게 됐다.

 

github.com/AhatLi/ahat-simple-image-gallery

 

AhatLi/ahat-simple-image-gallery

A very simple image gallery server developed with go. Suitable for use on mobile. - AhatLi/ahat-simple-image-gallery

github.com

서버 프로그램을 실행시킨 후 브라우저로 서버의 주소에 접속하고

로그인을 하면 위와같은 화면이 나온다.

 

로그인 기능은 처음에는 만들 생각이 없었는데

서버 로그를 살펴보던 중에 자꾸 이상한 IP에 요청이 계속 들어와서

그냥 로그인 기능을 추가해주었다.

 

사용하면서 또 필요하다고 느낀 기능으로는 

인증서를 이용한 SSL 기능과 이미지 업로드 기능

그리고 새폴더 같은거 만드는기능?

 

버그도 좀 있는것 같은데 그것도 확인해봐야겠다.

 

 

###Ahat Simple Gallary

```
모바일에서 사용하기 적합한 간단한 이미지 갤러리 서버입니다.

Ahat Simple Gallary를 실행시키고 
모바일 웹브라우저 혹은 데스크탑 웹 브라우저로 접속하여
이미지 갤러리 기능을 사용할 수 있습니다.
현재까지 구현된 기능은 아래와 같습니다.
```

```
 - 이미지를 썸네일화 하여 갤러리 목록에 표시
 - 썸네일을 클릭할 경우 원본 이미지를 표시
 - 이미지를 좌 우로 드래그하여 이전/다음 이미지 표시
 - 이미지를 선택 후 이미지 경로 이동 기능
 - 이미지를 선택 후 이미지 삭제 기능
 - 페이지 접속 시 로그인을 하여야 접속 가능
 - 이미지의 이름/크기/날짜별 정렬 기능
```

```
컴파일 방법
 go get github.com/disintegration/imaging
 go get gopkg.in/ini.v1
 go get github.com/gorilla/securecookie
 go build .\ImageCloud.go .\Utils.go .\login.go
```

```
사용방법 1. 윈도우 환경
1) images 파일에 이용한 이미지 파일을 구성한다.
2) ImageCloud.exe 파일을 실행한다.
2-1) 로그파일을 남기고 싶을 경우 CMD 창을 열고 바이너리 위치로 이동해 
     ` ImageCloud.exe >> ImageCloud.log ` 
     형식으로 실행한다.
3) 프로그램이 실행된 후 모바일 브라우저 혹은 브라우저로 접속하여 사용한다.
ex) http://127.0.0.1:9090/
```

 

 

아직 개선할 점이 많이 있지만

내 서버컴퓨터에 이미지를 넣어두고 외부에서 접속해서 보거나 가져가는 등의 작업은 가능하다.

 

나중에 기능을 추가해야겠다.

+ Recent posts