api.php
news_list.html
그누보드5 로 만들어져 있는데에 네이버 뉴스를 속보를 첫 화면으로 키워드별 실시간 뉴스를 보이게 하고 싶은데
잘 몰라서 그런지 잘 뉴스가 안나오는데 뭔가 오류일까요?
g5 설치 한 홈에 둘다 넣어두었는데 안되는데 뭐 잘못 했을가요?
http://URL/g5/api.php
http://URL/g5/news_list.html
이렇게 들어가있습니다.
내부적인 기록이 있어서 URL을 못 보여드려요 ㅠ
Copy
<?php
// api.php
header('Content-Type: application/json; charset=UTF-8');
$client_id = "TdlhFeQamjfQvPbD_kUJ";
$client_secret = "kon3zRXCt2";
// 자바스크립트에서 보낸 키워드를 읽음 (기본값: 속보)
$keyword = isset($_GET['q']) ? $_GET['q'] : "속보";
$encText = urlencode($keyword);
$url = "https://openapi.naver.com".$encText."&display=10&sort=date";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"X-Naver-Client-Id: ".$client_id,
"X-Naver-Client-Secret: ".$client_secret
));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
news_list.html
Copy
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>네이버 뉴스 카테고리별 보기</title>
<style>
body { font-family: 'Pretendard', sans-serif; background: #f8f9fa; display: flex; justify-content: center; padding: 30px; }
.news-container { width: 100%; max-width: 550px; background: #ffffff; border-radius: 15px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); overflow: hidden; }
.news-header { background: #03cf5d; color: white; padding: 18px; font-size: 1.1rem; font-weight: bold; text-align: center; }
/* 키워드 탭 스타일 */
.tab-menu { display: flex; background: #fff; border-bottom: 1px solid #eee; padding: 10px; gap: 8px; overflow-x: auto; }
.tab-btn { padding: 8px 15px; border: 1px solid #ddd; border-radius: 20px; background: none; font-size: 13px; cursor: pointer; white-space: nowrap; transition: 0.2s; }
.tab-btn.active { background: #03cf5d; color: white; border-color: #03cf5d; }
#news-list { padding: 10px 20px; min-height: 400px; }
.news-item { padding: 15px 0; border-bottom: 1px solid #f1f3f5; text-decoration: none; display: block; color: inherit; }
.news-item:last-child { border-bottom: none; }
.news-title { font-size: 15px; font-weight: 600; line-height: 1.4; color: #212529; margin-bottom: 5px; }
.news-item:hover .news-title { color: #03cf5d; }
.news-meta { font-size: 11px; color: #adb5bd; }
.loading { text-align: center; padding: 50px; color: #666; font-size: 14px; }
</style>
</head>
<body>
<div class="news-container">
<div class="news-header">실시간 뉴스</div>
<!-- 키워드 버튼들 -->
<div class="tab-menu" id="tab-menu">
<button class="tab-btn active" onclick="fetchNews('속보', this)">속보</button>
<button class="tab-btn" onclick="fetchNews('IT테크', this)">IT/테크</button>
<button class="tab-btn" onclick="fetchNews('경제', this)">경제</button>
<button class="tab-btn" onclick="fetchNews('스포츠', this)">스포츠</button>
<button class="tab-btn" onclick="fetchNews('연예', this)">연예</button>
<button class="tab-btn" onclick="fetchNews('정치', this)">정치</button>
</div>
<div id="news-list"><div class="loading">뉴스를 불러오는 중...</div></div>
</div>
<script>
// 페이지 로드 시 '속보' 뉴스 먼저 출력
document.addEventListener("DOMContentLoaded", () => {
fetchNews('속보');
});
async function fetchNews(keyword, element) {
const listContainer = document.getElementById('news-list');
// 탭 버튼 활성화 스타일 제어
if(element) {
document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));
element.classList.add('active');
}
listContainer.innerHTML = "<div class='loading'>'" + keyword + "' 뉴스를 가져오고 있습니다...</div>";
try {
// PHP 서버에 키워드 전송
const response = await fetch('api.php?q=${encodeURIComponent(keyword)}');
const data = await response.json();
if (data.items && data.items.length > 0) {
listContainer.innerHTML = data.items.map(item => `
<a href="${item.link}" target="_blank" class="news-item">
<div class="news-title">${item.title.replace(/<[^>]*>?/gm, '')}</div>
<div class="news-meta">작성일: ${new Date(item.pubDate).toLocaleString()}</div>
</a>
`).join('');
} else {
listContainer.innerHTML = "<div class='loading'>결과가 없습니다.</div>";
}
} catch (error) {
listContainer.innerHTML = "<div class='loading'>데이터 로드 실패</div>";
}
}
</script>
</body>
</html>
그누보드5 로 만들어져 있는데에 네이버 뉴스를 속보를 첫 화면으로 키워드별 실시간 뉴스를 보이게 하고 싶은데
잘 몰라서 그런지 잘 뉴스가 안나오는데 뭔가 오류일까요?
g5 설치 한 홈에 둘다 넣어두었는데 안되는데 뭐 잘못 했을가요?
http://URL/g5/api.php
http://URL/g5/news_list.html
이렇게 들어가있습니다.
내부적인 기록이 있어서 URL을 못 보여드려요 ㅠ
답변 1개 / 댓글 4개
채택된 답변
+20 포인트
5일 전
<?php
// api.php
header('Content-Type: application/json; charset=UTF-8');
$client_id = "TdlhFeQamjfQvPbD_kUJ";
$client_secret = "kon3zRXCt2";
// 키워드 (기본값: 속보)
$keyword = isset($_GET['q']) ? $_GET['q'] : "속보";
$encText = urlencode($keyword);
// ★ 정확한 API 경로 포함
$url = "https://openapi.naver.com/v1/search/news.json?query=".$encText."&display=10&sort=date";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"X-Naver-Client-Id: ".$client_id,
"X-Naver-Client-Secret: ".$client_secret
));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 가능하면 1로
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
❤️010-7445-7118❤️ 해외서버관리/API개발/프로그램/APP/모바일/랜딩페이지/스포츠커뮤니티 (20년개발자노하우/사후관리)
// api.php
header('Content-Type: application/json; charset=UTF-8');
$client_id = "TdlhFeQamjfQvPbD_kUJ";
$client_secret = "kon3zRXCt2";
// 키워드 (기본값: 속보)
$keyword = isset($_GET['q']) ? $_GET['q'] : "속보";
$encText = urlencode($keyword);
// ★ 정확한 API 경로 포함
$url = "https://openapi.naver.com/v1/search/news.json?query=".$encText."&display=10&sort=date";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"X-Naver-Client-Id: ".$client_id,
"X-Naver-Client-Secret: ".$client_secret
));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 가능하면 1로
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
❤️010-7445-7118❤️ 해외서버관리/API개발/프로그램/APP/모바일/랜딩페이지/스포츠커뮤니티 (20년개발자노하우/사후관리)
답변에 대한 댓글 4개
4일 전
물어볼 만한 곳이 없어서 번거롭게 추가 댓들 달아서 죄송합니다.
어제 url 수정하고 몇 접속할 때는 괜찮았는데 오늘 접속하니까 결과가 없습니다. 라는 메시지가 나오는데
키워드 설정의 문제일까요? ㅠ 아님 네이버측에서 막는 건가 해서요.ㅠ
어제 url 수정하고 몇 접속할 때는 괜찮았는데 오늘 접속하니까 결과가 없습니다. 라는 메시지가 나오는데
키워드 설정의 문제일까요? ㅠ 아님 네이버측에서 막는 건가 해서요.ㅠ
간장게장같은남자
4일 전
동일 아이피로 적당한 agent 와 referer 값을 주지 않으면 네이버측에서는 봇으로 판단해서 접근을 차단할 수 있습니다.
2일 전
말씀 감사합니다~ ㅠ 뜻은 이해했는데 아직 걸음마 단계라 그런지 미궁속으로 들어가고 있어요 ㅠㅠ
코드만 꼬이고 그러다 배가 산으로 가는 이상한 코드가 됐네요.
api.php를 조정하면 될거 같은데 감이 안오네요 ㅠ 몇 일 고민하고 좀 끙끙 거려봐야겠네요.
코드만 꼬이고 그러다 배가 산으로 가는 이상한 코드가 됐네요.
api.php를 조정하면 될거 같은데 감이 안오네요 ㅠ 몇 일 고민하고 좀 끙끙 거려봐야겠네요.
답변을 작성하려면 로그인이 필요합니다.