• API Access License 와 Secret Key를 발급받자. (네이버 검색광고 에 들어가 도구 > API 사용관리)
  • Header에 다음을 추가해야 한다.
    • X-Timestamp
    • X-API-KEY
    • X-Customer
    • X-Signature
  require 'net/http'
  ...

  service_url = "https://api.naver.com"
  uri = URI.parse(service_url)
  req = Net::HTTP::Get.new(uri)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = (uri.scheme == 'https')
  res = http.request(req)
  puts res.body
  
  • X-Signature은 Secret Key를 이용 아래 data를 sha256-hmac 으로 인코딩해야 한다.
    • data = Milliseconds since Unix Epoch + '.' + http method + '.' + request_uri
  require 'Base64'
  require 'openssl'
  ...

  ms_since_epoch = (Time.now.to_f * 1000).floor
  data = ms_since_epoch.to_s + '.' + http_method + '.' + api_path
  digest = OpenSSL::Digest::Digest.new('sha256')
  signature = Base64.encode64(OpenSSL::HMAC.digest(digest, secret_key, data)).strip
  
  • parameter를 추가해서 원하는 API 결과를 얻자.
  uri = URI.parse("https://api.naver.com/keywordstool")
  params = {showDetail: "1", hintKeywords: Keywords.join(",")}
  uri.query = URI.encode_www_form( params )
  req = Net::HTTP::Get.new(uri)
  
  • X-Timestamp의 값은 Signature 생성시 ms_since_epoch과 같은 값이어야 된다.
  • (update)
    • 다른 mac에서 아래 에러가 난다.
    .../ruby/2.3.0/net/http.rb:933:in `connect_nonblock': SSL_connect returned=1 errno=0 state=error: certificate verify failed (OpenSSL::SSL::SSLError)
    
  • 왜 이런지 모르겠다. Googling 결과는 state=SSLv3 인 에러에 대한 얘기다.
  • 우선은 아래와 같이 땜질을 해서 넘어가자.
      http.verify_mode = OpenSSL::SSL::VERIFY_NONE
     

참고링크