노래리스트를 가져올수있는 질문 채택완료
티비엔
11개월 전
조회 1,278
https://program.kbs.co.kr/2radio/radio/trot/pc/index.html
방송국의 하단에 그날마다 방송되는 노래를 리스트 목록으로 보여주는데
혹시 이걸 가져올수있는 방법이 있을까요
매번 홈페이지 방문해서 복사해서 게시판에 등록하기 힘들더라구요
해당 노래 리스트만 가져오는 방법을 찾아야하는데 혹시 아시는분 계실까요
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
채택된 답변
+20 포인트
미니님a
Expert
11개월 전
API 로 호출되네요
아래는 위 코드 기반으로 데이터 출력방법입니다.
</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개월 전
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
수고가 덜었네요