TJ미디어 공식 사이트(tjmedia.com)에서 제공하는 topAndHot100 API를 매달 1일 배치로 크롤링하여 Supabase에 저장하고, popular 페이지에서 장르별/월별로 조회할 수 있도록 개편한다.
API: https://www.tjmedia.com/legacy/api/topAndHot100?chartType=TOP&searchStartDate=YYYY-MM-01&searchEndDate=YYYY-MM-DD&strType=N
CORS 제약 없음 (APIDOG 테스트로 확인됨)
strType 값에 따라 장르가 달라짐 (참고: https://www.tjmedia.com/chart/top100)
기존 popular 페이지는 포인트 기반 자체 추천(엄지척) 시스템으로 동작 중 — 이번 작업으로 TJ 공식 차트 데이터 기반으로 대체
확정된 결정 사항
HOT100(chartType=HOT)은 이번 범위에서 제외, TOP100만 수집
기존 thumb_logs//api/songs/thumb-up/ThumbUpModal은 코드 그대로 유지, popular 페이지 노출 데이터만 TJ 차트로 교체
str_type은 별도 공유 패키지 없이 크롤링/웹 양쪽에 각각 enum으로 중복 정의 (의도적)
num_tj 매칭 실패 곡은 저장하지 않고 로그 파일에만 기록 (자동 생성 안 함)
작업 체크리스트
남은 작업 (다음 세션에서 이어서 할 것)
Supabase 대시보드 SQL 에디터에서 tj_chart_rankings 테이블 실제 생성 (사용자 수동 실행 필요)
create table tj_chart_rankings (
id uuid primary key default gen_random_uuid(),
chart_month date not null ,
str_type text not null default ' ' ,
rank smallint not null ,
song_id uuid not null references songs(id),
created_at timestamptz not null default now(),
unique (chart_month, str_type, rank)
);
테이블 생성 후 packages/crawling에서 pnpm tj-chart 최초 1회 수동 실행해 데이터 채우기 + 결과 확인 (매칭/미매칭 건수, src/assets/tjChartUnmatched.txt)
/popular 페이지 브라우저에서 직접 확인 (월/장르 필터 동작, 빈 데이터 상태 UI 등)
/refactor (선택)
/verify — build, lint, format 전체 검증 (필수, 아직 미실행)
/commit
/pr
현재 상태
브랜치: feat/295-tjChartApi
코드 구현 완료 (/green 완료), 커밋은 아직 안 함
tsc/eslint/prettier로 정적 검증만 완료, pnpm build/pnpm dev 실제 구동 확인은 안 함
TJ미디어 공식 사이트(tjmedia.com)에서 제공하는 topAndHot100 API를 매달 1일 배치로 크롤링하여 Supabase에 저장하고, popular 페이지에서 장르별/월별로 조회할 수 있도록 개편한다.
https://www.tjmedia.com/legacy/api/topAndHot100?chartType=TOP&searchStartDate=YYYY-MM-01&searchEndDate=YYYY-MM-DD&strType=NstrType값에 따라 장르가 달라짐 (참고:https://www.tjmedia.com/chart/top100)확정된 결정 사항
chartType=HOT)은 이번 범위에서 제외, TOP100만 수집thumb_logs//api/songs/thumb-up/ThumbUpModal은 코드 그대로 유지, popular 페이지 노출 데이터만 TJ 차트로 교체str_type은 별도 공유 패키지 없이 크롤링/웹 양쪽에 각각 enum으로 중복 정의 (의도적)num_tj매칭 실패 곡은 저장하지 않고 로그 파일에만 기록 (자동 생성 안 함)작업 체크리스트
packages/crawling에 TJ topAndHot100 API 호출 스크립트 추가 —src/cron/crawlTjChart.tsStrTypeenum (crawling:src/types.ts, web:src/types/tjChart.ts)tj_chart_rankings: chart_month, str_type, rank, song_id) — SQL 작성 완료, 실제 테이블 생성은 아직 안 함 (아래 "남은 작업" 참고)crawl_tj_chart.ymlGitHub Actions 워크플로우 추가 (매달 1일 KST + 수동 실행)/api/tj-chart(month, genre 파라미터)TjChartRankingList.tsx남은 작업 (다음 세션에서 이어서 할 것)
tj_chart_rankings테이블 실제 생성 (사용자 수동 실행 필요)packages/crawling에서pnpm tj-chart최초 1회 수동 실행해 데이터 채우기 + 결과 확인 (매칭/미매칭 건수,src/assets/tjChartUnmatched.txt)/popular페이지 브라우저에서 직접 확인 (월/장르 필터 동작, 빈 데이터 상태 UI 등)/refactor(선택)/verify— build, lint, format 전체 검증 (필수, 아직 미실행)/commit/pr현재 상태
feat/295-tjChartApi/green완료), 커밋은 아직 안 함pnpm build/pnpm dev실제 구동 확인은 안 함