테스트 사이트 - 개발 중인 베타 버전입니다

노래리스트를 가져올수있는 질문 채택완료

티비엔 11개월 전 조회 1,278

https://program.kbs.co.kr/2radio/radio/trot/pc/index.html

 

방송국의 하단에 그날마다 방송되는 노래를 리스트 목록으로 보여주는데

 

혹시 이걸 가져올수있는 방법이 있을까요

 

매번 홈페이지 방문해서 복사해서 게시판에 등록하기 힘들더라구요

 

해당 노래 리스트만 가져오는 방법을 찾아야하는데 혹시 아시는분 계실까요

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
11개월 전

API 로 호출되네요

 

https://kong2017.kbs.co.kr/api/mobile/select_song_list?program_code=R2024-0030,R2024-0247&rtype=jsonp&request_date=20241203&page=1&page_size=7&&callback=angular.callbacks._7

 

아래는 위 코드 기반으로 데이터 출력방법입니다.

 

</p>

<p><?php</p>

<p>// KBS 노래 리스트를 가져오기 위한 URL 생성</p>

<p>$url = '<a href="https://kong2017.kbs.co.kr/api/mobile/select_song_list?'" target="_blank" rel="noopener noreferrer">https://kong2017.kbs.co.kr/api/mobile/select_song_list?'</a> . http_build_query([</p>

<p>    'program_code' => 'R2024-0030,R2024-0247',</p>

<p>    'rtype' => 'jsonp',</p>

<p>    'request_date' => '20241203',</p>

<p>    'page' => 1,</p>

<p>    'page_size' => 7,</p>

<p>    'callback' => 'angular.callbacks._7'</p>

<p>]);</p>

<p> </p>

<p>// cURL 세션 초기화</p>

<p>$ch = curl_init($url);</p>

<p> </p>

<p>// cURL 옵션 설정</p>

<p>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);</p>

<p>curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 운영환경에서는 주의 필요</p>

<p>curl_setopt($ch, CURLOPT_HTTPHEADER, [</p>

<p>    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'</p>

<p>]);</p>

<p> </p>

<p>// cURL 실행 및 응답 받기</p>

<p>$response = curl_exec($ch);</p>

<p> </p>

<p>// cURL 오류 확인</p>

<p>if (curl_errno($ch)) {</p>

<p>    echo 'cURL 오류: ' . curl_error($ch);</p>

<p>    exit;</p>

<p>}</p>

<p> </p>

<p>// cURL 세션 종료</p>

<p>curl_close($ch);</p>

<p> </p>

<p>// Angular 콜백 래퍼 제거</p>

<p>$json_str = preg_replace('/^angular\.callbacks\._7\((.*)\)$/', '$1', $response);</p>

<p> </p>

<p>// JSON 디코딩</p>

<p>$data = json_decode($json_str, true);</p>

<p> </p>

<p>// JSON 파싱 오류 확인</p>

<p>if ($data === null) {</p>

<p>    echo 'JSON 파싱 오류: ' . json_last_error_msg();</p>

<p>    exit;</p>

<p>}</p>

<p> </p>

<p>// HTML 시작</p>

<p>echo "<!DOCTYPE html></p>

<p><html lang='ko'></p>

<p><head></p>

<p>    <meta charset='UTF-8'></p>

<p>    <title>KBS 노래 리스트</title></p>

<p>    <style></p>

<p>        body { font-family: Arial, sans-serif; }</p>

<p>        table {</p>

<p>            width: 100%;</p>

<p>            border-collapse: collapse;</p>

<p>            margin-top: 20px;</p>

<p>        }</p>

<p>        th, td {</p>

<p>            border: 1px solid #ddd;</p>

<p>            padding: 8px;</p>

<p>            text-align: left;</p>

<p>        }</p>

<p>        th {</p>

<p>            background-color: #f2f2f2;</p>

<p>        }</p>

<p>    </style></p>

<p></head></p>

<p><body></p>

<p>    <h1>KBS 노래 리스트</h1></p>

<p>    <table></p>

<p>        <thead></p>

<p>            <tr></p>

<p>                <th>제목</th></p>

<p>                <th>아티스트</th></p>

<p>                <th>앨범</th></p>

<p>                <th>재생 시간</th></p>

<p>            </tr></p>

<p>        </thead></p>

<p>        <tbody>";</p>

<p> </p>

<p>// 노래 정보 테이블에 추가</p>

<p>if (isset($data['items']) && is_array($data['items'])) {</p>

<p>    foreach ($data['items'] as $song) {</p>

<p>        // 분:초 형식으로 시간 변환</p>

<p>        $minutes = floor($song['duration'] / 60);</p>

<p>        $seconds = $song['duration'] % 60;</p>

<p>        $duration = sprintf("%02d:%02d", $minutes, $seconds);</p>

<p> </p>

<p>        echo "<tr></p>

<p>                <td>" . htmlspecialchars($song['song_title']) . "</td></p>

<p>                <td>" . htmlspecialchars($song['artist']) . "</td></p>

<p>                <td>" . htmlspecialchars($song['album_name']) . "</td></p>

<p>                <td>" . $duration . "</td></p>

<p>              </tr>";</p>

<p>    }</p>

<p>} else {</p>

<p>    echo "<tr><td colspan='4'>노래를 찾을 수 없거나 데이터 구조가 유효하지 않습니다.</td></tr>";</p>

<p>}</p>

<p> </p>

<p>// HTML 닫기</p>

<p>echo "</tbody></p>

<p>    </table></p>

<p></body></p>

<p></html>";</p>

<p>?></p>

<p>

 

http://sir.kr/data/editor/2412/978180634_1733367343.3798.png" width="100%" />

 

 

 

만약 응용해서, 날짜 데이터를 받아서 출력하려면

 

</p>

<p> </p>

<p>// 기본 날짜 설정 (오늘 날짜)</p>

<p>$request_date = date('Ymd');</p>

<p> </p>

<p>// GET 파라미터로 날짜 받기</p>

<p>if (isset($_GET['date']) && preg_match('/^\d{8}$/', $_GET['date'])) {</p>

<p>    $request_date = $_GET['date'];</p>

<p>}</p>

<p> </p>

<p>// KBS 노래 리스트를 가져오기 위한 URL 생성</p>

<p>$url = '<a href="https://kong2017.kbs.co.kr/api/mobile/select_song_list?'" target="_blank" rel="noopener noreferrer">https://kong2017.kbs.co.kr/api/mobile/select_song_list?'</a> . http_build_query([</p>

<p>    'program_code' => 'R2024-0030,R2024-0247',</p>

<p>    'rtype' => 'jsonp',</p>

<p>    'request_date' => $request_date,</p>

<p>    'page' => 1,</p>

<p>    'page_size' => 30,  // 더 많은 노래 가져오기</p>

<p>    'callback' => 'angular.callbacks._7'</p>

<p>]);</p>

<p> </p>

<p>

 

해당 부분 수정하시면 되며

 

파일명?date=20241204  로바꾸시면 12월 4일 데이터가 나옵니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

티비엔
11개월 전
이렇게 섬세하고 꼼꼼한 설명 감사합니다. 드디어 불필요하게 매번 복사해올 필요없고
수고가 덜었네요

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인