네이버 검색광고 키워드 도구 API 검색

이 코드는 네이버 검색광고에서 제공하는 키워드 도구 API를 호출하여
특정 키워드와 연관된 검색 키워드 데이터를 조회하는 역할을 한다.

API 인증 절차부터 요청 생성, 응답 처리까지의 전 과정을 하나의 함수로 캡슐화하여
외부에서는 키워드 문자열만 전달하면 결과를 받을 수 있도록 구성되어 있다.


API 인증 정보 설정

상단에는 네이버 검색광고 API 호출에 필요한 인증 정보가 상수로 정의되어 있다.

  • ACCESS_LICENSE
  • SECRET_KEY
  • CUSTOMER_ID

이 값들은 네이버 검색광고 관리자 센터에서 발급받는 정보이며,
요청 시 HTTP 헤더에 포함되어 API 사용 권한을 검증하는 데 사용된다.

코드 내에서 상수로 분리함으로써
인증 정보 변경 시 유지보수가 용이하도록 설계되어 있다.


키워드 조회 함수 구조

fetchKeyword 함수는 키워드 도구 API 호출을 담당하는 핵심 로직이다.

입력값으로 하나 이상의 키워드를 문자열 형태로 전달받아
해당 키워드를 기반으로 한 연관 키워드 목록을 반환한다.

함수의 반환값은 배열 형태이며,
API 응답이 정상적이지 않은 경우 빈 배열을 반환하도록 처리되어 있다.


타임스탬프 및 서명 생성

API 요청 시 보안을 위해 타임스탬프와 서명이 필요하다.

타임스탬프는 밀리초 단위의 현재 시간으로 생성되며,
요청 시점의 유효성을 검증하는 용도로 사용된다.

서명은 다음 요소를 결합하여 생성된다.

  • 타임스탬프
  • HTTP 메서드
  • 요청 경로

이 값을 SECRET_KEY를 이용해 HMAC-SHA256 방식으로 해시한 뒤
Base64로 인코딩하여 최종 서명을 만든다.

이 서명은 요청이 위변조되지 않았음을 증명하는 역할을 한다.


API 요청 구성

cURL을 사용하여 HTTP GET 요청을 생성한다.

요청 URL에는 다음 정보가 포함된다.

  • hintKeywords
  • showDetail 옵션

hintKeywords는 조회 대상 키워드이며
URL 인코딩을 통해 안전하게 전달된다.

HTTP 헤더에는 앞서 생성한 인증 정보가 포함된다.

  • X-Timestamp
  • X-API-KEY
  • X-CUSTOMER
  • X-Signature

이를 통해 네이버 서버는 요청자의 신원을 확인하고
요청의 유효성을 검증한다.


응답 처리 방식

API 호출 결과는 JSON 문자열 형태로 반환된다.

이를 배열로 디코딩한 뒤
keywordList 항목만 추출하여 반환한다.

만약 응답에 해당 항목이 존재하지 않을 경우
null 병합 연산자를 통해 빈 배열을 반환하도록 처리되어 있다.

// 네이버 키워드 도구 API 설정
define('ACCESS_LICENSE', '');
define('SECRET_KEY', '');
define('CUSTOMER_ID', '');

// 키워드 검색 함수
function fetchKeyword($keywords) {
    $timestamp = (string) round(microtime(true) * 1000);
    $signature = base64_encode(hash_hmac('sha256', $timestamp.'.GET./keywordstool', SECRET_KEY, true));

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://api.searchad.naver.com/keywordstool?hintKeywords='.urlencode($keywords).'&showDetail=1');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'X-Timestamp: '.$timestamp,
        'X-API-KEY: '.ACCESS_LICENSE,
        'X-CUSTOMER: '.CUSTOMER_ID,
        'X-Signature: '.$signature
    ]);
    $data = json_decode(curl_exec($ch), true);
    curl_close($ch);

    return $data['keywordList'] ?? [];
}

Comments

Tips & Tech

Linux Apache에서 GPTBot·Amazonbot·AhrefsBot의 게시판 이미…
Others Midjourney, DALL·E, ChatGPT에서 Y2K 파스텔 UI 프롬프…
Linux Cloudflare R2 자동 업로드 구성하기. 특정 폴더에 파일…
WordPress 워드프레스 7.0 관리자 링크 색상 변경 후 이전 색상으…
WordPress 캐시 환경에서 AJAX 댓글(코멘트) 분리로 서버 응답시간…
Linux 아파치 일반 계정 파일 접근 권한 설정과 mod-ruid2 적…
Delphi Delphi IDE 메인 폼 안열림 dproj 설정으로 해결
Dev tips VSCode 한국어 설정법, Configure Display Language로 U…
Others RustDesk 자체 서버 구축으로 공용 서버 로그인 문제 해…
Linux Dante SOCKS5 프록시 서버 구축 및 설정
Windows 윈도우 실행파일(exe) 서비스 등록 자동화 쉽게 하는 방…
Others CLIProxyAPI Windows 설치 가이드
WordPress 그누보드7 데이터를 WordPress WXR로 변환하기
Others Ollama 설치 경로 C드라이브 고정 문제 해결 및 드라이…
Dev tips Apache Access Log 기반 도메인별 방문자 카운터 구현
Windows ZImage AI 이미지 생성 환경 구축 방법
Windows 파일 복사 후 실행 배치파일 - 에러 감지 포함
Dev tips 네이버 검색 Open API
Views Dev tips 네이버 검색광고 키워드 도구 API 검색
Dev tips MariaDB column_stats 테이블 오류 해결 방법
Dev tips PHP-FPM 에러 로그 실시간 모니터링
Windows 윈도우11 업데이트 후 네트워크 드라이브 접근 불가 문…
Dev tips 다국어 번역 함수 구현 방법
WordPress "치명적인 오류가 발생했습니다" 디버깅 가이드
Linux Apache 웹 로그 분석하기 – awk와 GoAccess 활용
Windows 윈도11 강제업데이트 피하고 윈도10 계속 쓰기
Linux PHP 파일 업로드 용량 늘리기
Dev tips 애드센스 충돌 문제 해결하기
Python Python Playwright로 Edge 브라우저 제어하기
Delphi TDirectory.Delete 대신 CMD 으로 폴더 삭제