YouTube Music에서 Poppin’Party 아티스트 페이지를 열었는데 Top songs 1위인 キズナミュージック♪(Kizuna Music♪)에 좋아요 표시가 없었다. 분명 좋아요한 곡이고 좋아요 목록에도 있다.

확인해 보니 둘은 다른 영상이었다. 내가 좋아요한 건 싱글 “Kizuna Music♪”에 실린 음원이고, Top songs에 나오는 건 앨범 “Breakthrough!”에 실린 음원이다. 둘 다 316초짜리 같은 녹음이지만 YouTube의 좋아요는 영상 하나에 붙으니까, 앨범 쪽에서 보면 좋아요가 없다.

몇 곡이나 이럴까

좋아요한 1,213곡의 아티스트 페이지 314개를 전부 읽어서 각 아티스트의 “Show all” 곡 목록과 비교해 보니, 71곡은 목록에 없고 같은 녹음이 다른 릴리스로 들어 있었다. 대부분 μ’s Best Album이나 Aqours CHRONICLE 같은 베스트 앨범으로 좋아요를 눌러 놨고, 아티스트 페이지는 원래 싱글을 보여 줬다. Kizuna Music♪처럼 반대인 곡도 있다. like-surgeon은 아티스트 페이지가 보여 주는 쪽을 기준으로 삼는다.

이번에는 제목으로 찾는다

지난 글에서 like-surgeon은 제목으로 곡을 맞추지 않았다. YouTube 좋아요 목록과 YT Music 좋아요 목록은 순서가 같아서, 둘을 맞춰 보면 곡마다 어느 좋아요가 뒤에 있는지 나온다. 이번엔 곡이 전부 제 모습 그대로 보이고, 옮겨 갈 앨범 쪽 영상은 어느 목록에도 없어서 순서로는 찾을 수 없다. 제목 때문에 엉뚱한 곡의 좋아요가 취소될 일은 없다. 원래 곡은 쓰기 전에 내 좋아요인지 확인하고, 제목은 좋아요를 어디로 옮길지만 정한다. 제목을 쓰되 범위를 좁혔다.

  • 그 곡의 아티스트 곡 목록 안에서만 찾는다.
  • 둘 다 음원(ATV)이어야 한다.
  • 정규화한 제목이 완전히 같고, 길이 차이가 1초 이내여야 한다.
  • 그런 곡이 정확히 하나일 때만 후보가 된다.

길이만으로는 안 된다. 같은 목록에 “キズナミュージック♪ (instrumental)”이 317초로 들어 있다.

좋아요한 곡의 앨범 이름에 Version, Live, Remix 같은 단어가 있으면 다른 녹음일 수 있어서 리포트에만 올린다. 걸린 곡은 대부분 “Best Live! collection”이었는데, 라이브 음원이 아니라 베스트 앨범 이름이다. 리포트를 보고 나서 --include-flagged로 옮길 대상에 넣을 수 있게 했다.

likesurgeon canonicalize                            # 리포트만
likesurgeon skip <id>                               # 아니다 싶은 건 빼고
likesurgeon canonicalize --apply --include-flagged  # 옮긴다

옮기는 순서

YouTube에서 아티스트 페이지 쪽(B)에 좋아요를 누르고 확인한 다음, 원래 좋아요(A)를 취소하고 확인한다. 마지막으로 좋아요 목록을 전부 다시 읽어서 A가 하나 빠지고 B가 하나 생긴 것 말고는 바뀐 게 없는지 본다. 다르면 A 좋아요를 되살리고 B 좋아요를 거둔 다음 멈춘다.

B에 이미 좋아요가 있으면 A만 취소한다. 71곡 중 7곡이 이랬다. 같은 곡을 다른 릴리스로 두 번 좋아요해 둬서 좋아요 목록에 두 번 나오고 있었는데, 둘 다 정상적인 좋아요라, 다른 영상으로 보이는 곡을 찾는 compare-likes에는 잡히지 않았다.

곡마다 18초쯤 걸리는데, 대부분 YouTube에 반영되길 기다리고 목록을 다시 읽는 시간이다. 그래도 목록 재확인은 빼지 않았다. A를 취소했는데 다른 곡이 목록에서 빠졌을 때 알아챌 방법이 그것뿐이다.

아티스트 페이지는 생각보다 불안정했다

ytmusicapi의 get_artist는 내 아티스트 중 68명에서 에러가 났다. 대부분은 일반 YouTube 채널이었고, 몇 명은 페이지 맨 위에 제목 없는 “새 뮤직비디오” 칸이 있어서 파싱이 실패했다. 그래서 응답을 직접 읽기로 했다.

다 옮기고 나서 다시 보니 이번에는 Top songs 칸이 응답에서 통째로 빠져 있었다. 로그인을 하든 안 하든, 여러 번 다시 요청해도 마찬가지였다. ytmusicapi 소스에도 “API sometimes does not return songs”라는 주석이 있다. 이걸 일반 채널처럼 “곡 목록 없음”으로 넘기면 그 아티스트 곡이 경고 없이 리포트에서 빠지고, 아티스트가 여럿인 곡은 다른 아티스트 목록에서 B를 골라 버릴 수도 있다. 빠진 목록에 A가 있었을 수도 있는데 말이다. 지금은 한 번 더 읽어 보고 그래도 곡 목록이 없으면 읽기 실패로 센다. 그 아티스트의 곡은 후보에서 빠지고, 리포트에 나중에 다시 돌리라는 안내가 나온다.

브라우저에서 가져온 YT Music 쿠키는 40분에서 1시간이면 만료됐다. 20곡씩 돌리던 한 묶음이 중간에 끊겼다. 이제는 좋아요 목록 읽기가 실패하면 브라우저에서 쿠키를 한 번 다시 가져오는데, 브라우저에 로그인된 계정이 처음 인증한 계정과 같을 때만 새 쿠키를 쓴다.

결과

71곡을 모두 옮겼고, 이제 아티스트 곡 목록에서도 좋아요가 보인다. 두 번 좋아요했던 7곡은 이제 좋아요가 하나씩만 남았다. like-surgeon 0.13.0에 들어 있다.