250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

IOS - ManiaDB를 연결해 노래찾기/음원검색 본문

Swift 실습

IOS - ManiaDB를 연결해 노래찾기/음원검색

스윞남 2024. 2. 3. 16:34
728x90
반응형
SMALL

안녕하세요!

음원검색 서비스를 만들어 보았습니다!

 

그래서 오늘 포스팅은 ManiaDB를 연결해 노래를 찾는 서비스를 개발해 본 기록입니다.

 

 

최근에 졸업 작품으로 개발하고 있는 서비스가 있는데, 인공지능을 이용해 사람의 심리를 분석하고 노래를 추천해 주는 어플을 개발 중입니다!

 

그 과정에서 저는 어떤 데이터를 써야 할지 많이 찾아보고 시도해 보았는데요! 

일단 저에게 많은 도움이 되었던 포스팅은


https://hanyeop.tistory.com/417

 

[Android] 음악 검색 API 알아보기 (Spotify, iTunes, ManiaDB)

음악 정보를 활용한 앱을 제작하려고 여러 음악 검색 API를 찾아보던 중, 우리나라의 대표적인 음원 사이트인 멜론에서는 언젠가부터 API를 지원해주지 않는다는 것을 알게 되었다. 그래서 주로

hanyeop.tistory.com


위에 분의 포스팅이었습니다!!

 

사실 저도 ManiaDB 뿐만 아니라, Spotify로도 연결해 서비스를 구현해보려고 했는데 저는 ManiaDB가 가장 편하고 효율적으로 할 수 있었던 거 같습니다!

 

그럼 실습을 바로 진행해 볼게요!

 

1. ManiaDB 접속

https://www.maniadb.com/api/


 

maniadb.com api

maniadb.com api

www.maniadb.com


먼저 ManiaDB api 홈페이지에 접속합니다.

아무래도 ManiaDB api 홈페이지는 한국어로 잘 나와있어서 사용하기 편했던 거 같습니다!

 

2. ManiaDB api 이용

홈페이지에서 사용하려는 기능에 따라 Request와 Response에 대해 잘 나와있어요!

 

위와 같이

https://www.maniadb.com/api/search/metallica/?sr=artist&display=10&key=example&v=0.5

예시도 잘 나와있어서 쉽게 연결해서 사용할 수 있었던 거 같습니다 ㅎㅎ

 

저기에서 저는 음원 검색 서비스를 만들기 위해 SEARCH v0.5를 이용했구요! 나와있는 형식에 맞게 사용해주시면 됩니다! 아무래도 ManiaDB는 DB에 접속해 사용하기 위한 토큰이나 앱키가 필요없어서 편하고 빠르게 이용할 수 있었던 거 같습니다.

 

728x90

3. 본인의 코드에서 연결

static func searchTracks(query: String) -> Observable<[MusicItem]> {
        let url = "https://www.maniadb.com/api/search/\(query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "")/?sr=song&display=1&key=example&v=0.5"
        return Observable.create { observer in
            AF.request(url, method: .get)
                .validate()
                .response { response in
                    switch response.result {
                    case .success(let data):
                        if let responseString = String(data: data!, encoding: .utf8) {
                            do {
                                let items = extractItems(from: responseString)
                                observer.onNext(items)
                                observer.onCompleted()
                            } catch {
                                print("에러: \(error)")
                            }
                        }
                    case .failure(let error):
                        observer.onError(error)
                    }
                }

            return Disposables.create()
        }
    }

 

이런식으로 MusicService를 이용하기 위한 메서드를 따로 만들었고, Alamofire 라이브러리를 이용해서 통신을 진행했습니다.  하지만! 여기서 ManiaDB의 단점(?)이라면 단점인데, 모든 파일의 형식을 xml 형태로 보내줘서 변환해서 사용하셔야 합니다!

 

 

저는 처음에는 String 형태를 그대로 추출해서 사용했는데 SwiftyXMLParser 라이브러리를 사용하시면 될거 같아요!

 

저렇게 받아온 값들을 통해서 저는 서버로부터 노래 제목을 받아오면, ManiaDB에 검색을 하고 그 결과 최상단에 나오는 노래 앨범의 이미지, 제목, 가수를 띄우는 방법으로 UI 및 로직을 구성했습니다.

 

4. 최종 결과

아래와 같이 디오의 "별 떨어진다"의 음악을 검색했고 그 결과 아래처럼 구현했습니다!

로딩 애니메이션은 LottieFiles에서 무료 애니메이션을 이용했습니다 ㅎㅎ

 

이렇게 구현한 음원 검색 서비스를 이용해서 개발한 졸업작품으로! 다음에는 프로젝트 기록으로 돌아오겠습니다!

 

728x90
반응형
LIST