[C#/API]네이버 연관 검색어 프로그램 4(API 연동(1): 네이버 연관 키워드)
네이버 API 및 11번가 Open API를 이용해 키워드 검색프로그램을 만들면서 개발의 방법 및 스킬을 늘리는게 목적입니다.
기본 베이스가 되는 프로그램 언어는 c#(WPF)로 진행 할 생각 입니다.
지금 부터는 네이버 연관 검색어/네이버 제품 등록수/옥션 제품 등록수/인터파크 제품 등록수를
각 사이트에서 제공해주는 API를 가지고 데이터를 가지고 오는 부분을 진행 하겠습니다.
1) 네이버 광고 API 연동(연관검색어)
해당 API는 검색한 키워드와 연관된 키워드,클릭수,조회수등의 정보를 가지고 올수 있습니다.
네이버 키워드 연관검색 API 호출을 위해서는
CUSTOMERID,엑세스라이선스,비밀키가 필요합니다.
(https://eehnuyh.tistory.com/1)
NuGet 에서 System.Configuration.ConfigurationManager 참조 추가 합니다.
CUSTOMERID,엑세스라이선스,비밀키를 저장하는 셋팅 KeywordSearchNaverCustomerID,KeywordSearchNaverApiKey,KeywordSearchNaverSecret
(UI 에서 입력하는 폼을 만들어 저장 할 생각 입니다.)
(액세스 한정자를 Public 으로 해야 외부에서 접근 가능합니다.)
Compont/Keyword/Models/KeywordModel.cs
Compont/Keyword/Models/KeywordsTool.cs
네이버에서 제공 해주는 JSON형식을 모델화한 클래스 입니다.
Compont/Keyword/NaverAPIClient.cs
2) NaverAPIClient.cs 코드
using EEH.Component.Keyword.Naver.Models;
using EEH.RestAPI;
using EEH.Utils;
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace EEH.Component.Keyword.Naver
{
public class NaverAPIClient
{
private string naverApiUrl = "https://api.naver.com";
private RestAPIClient apiClient;
private delegate string SignatureHandler(string timeStamp);
private SignatureHandler GetSignatureHandler;
public NaverAPIClient()
{
Init();
}
void Init()
{
apiClient = new RestAPIClient(naverApiUrl);
apiClient.OnHeaderSettingDelegate = (header) =>
{
if (header != null)
{
long timeStamp = Utils.CommonUtils.GetTimeStamp();
string strTimeSTamp = timeStamp.ToString();
header.Add("X-API-KEY", APIInfoSettings.Default.KeywordSearchNaverApiKey);
header.Add("X-Customer", APIInfoSettings.Default.KeywordSearchNaverCustomerID);
header.Add("X-Timestamp", strTimeSTamp);
if (GetSignatureHandler != null)
{
header.Add("X-Signature", GetSignatureHandler(strTimeSTamp));
}
}
};
}
public async Task<KeywordsTool> Search(string keyword)
{
string rqtUri = "/keywordstool";
GetSignatureHandler = (timeStamp) =>
{
return GetSignature(timeStamp, "GET", rqtUri);
};
string subURL = string.Format("{0}?hintKeywords={1}&includeHintKeywords=1&showDetail=1", rqtUri, keyword);
KeywordsTool rtn = await apiClient.GetAsync<KeywordsTool>(subURL);
rtn.Keyword = keyword;
return rtn;
}
string GetSignature(string timeStamp, string method, string rqtUri)
{
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(APIInfoSettings.Default.KeywordSearchNaverSecret));
return Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(timeStamp + "." + method + "." + rqtUri)));
}
}
}