프로그래밍/회고

[Python] 국내 주요 음원차트 API

Lou Park 2023. 4. 10. 22:00

Flutter 강의를 막 떼서 음원차트 트래킹 앱을 만들어볼까싶었다. Front는 목록이랑 알림정도라서 난이도가 높지않아 보였지만, Backend는 국내 음원사이트 긁어오는 프로그램부터 만들어야하는데...생각에 현재 배포된 국내음원차트 API들을 살펴보았는데 대부분 웹 크롤링 방식이었다. 봇이라고 거르지도 않고, 음원사이트들이 그래도 몇년에 한번씩 단장하기때문에 꽤 괜찮은 방법이긴하지만 개인적으로는 진짜 API를 따오고 싶었다.

 

다행히도 내가 안드로이드 개발자이기 때문에 당장 떠오르는 방법이 있었다. 바로, 앱에서 오가는 HTTP traffic을 가로채는 것...! emulator를 rooting하고, proxy 설정을 통해 오가는 네트워크 요청들을 볼 수 있었다. 차후 이 점이 문제가 되지않을까 싶지만... 해당 음원사이트에서 필요한정보만 요청해가니까 크롤링 보다 경제적일 수 있지 않을까했다. Instagram private api 같은 것도 이러한 과정을 통해 만들어진 거기도 하고... 흠흠 open-source에 몸을 맡겨보기로했다. 일단은 멜론, 벅스, 바이브, 플로, 지니뮤직 5개 차트에서 얻을 수 있는 아주 일반화된 ChartEntry를 구성했다. (Billboard chart 파이썬 라이브러리를 참조했다.)

class ChartEntry:
    """Represents an entry on a chart.
    Attributes:
        title: The title of the track
        artist: The name of the artist.
        image: The URL of the cover image for the track
        lastPos: The track's last position on the previous period.
        rank: The track's current rank position on the chart.
        isNew: Whether the track is new to the chart.
    """

    def __init__(self, title: str, artist: str, image: str, lastPos: int, rank: int, isNew: bool):
        self.title = title
        self.artist = artist
        self.image = image
        self.lastPos = lastPos
        self.rank = rank
        self.isNew = isNew

어딘가 내가 라이브러리를 만들어 배포해보기는 처음이었는데 주석, 스타일, 추상화 등 평소에는 그냥 넘어갈법한 것도 괜히 신경쓰면서 개발해보았다. 영어 README.md도 ChatGPT 돌려가며 완성했다. 아직 한번도 라이브러리를 배포해보지 않은 분이라면 한 번쯤 경험해볼 것을 추천한다.

 

이번을 계기로 Android 라이브러리도 배포해보고싶다. 매일쓰는건 Kotlin인데 재미로 만든 프로그램만 Public Repository에 올리다보니 Github Profile보는데 Kotlin이 없고 TypescriptPython뿐이더라...

 

P.S NPM과는 다르게 PyPI는 다운로드 수를 보여주지 않아서 아쉽다. 나같은 관종에게 좋은 동기부여가 되었을텐데... ㅋㅋㅋ