본문으로 바로가기

[php] 네이버 오픈 Api 사용하기

category Web 2018. 4. 10. 15:36

Naver Developer : https://developers.naver.com




텀프로젝트 아이디어 생각하다가 오픈 Api를 사용하는게 어떨까 해서 해본 api.. 네이버 Api는 네이버 개발자 페이지에 정보도 많고 통신하는 코드도 언어 별로 있어서 다른 api보다 사용하기 편한거 같다. 코드에 대한 이해만 있다면 누구든지 사용 가능하다.  


다만 네이버 api사용이 2년전인가 3년전부터 바뀌어서 전에꺼랑 혼동하지 않도록 주의하자. 


웹페이지에 사용할꺼라서 php로 작성했다. 



일단 네이버 Api를 사용하려면 홈페이지에서 클라이언트 ID랑 Secret key를 발급받아야 한다. 발급은 Naver Developer에서 발급받을 수 있다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
  $client_id = "SFezXsTn6ehQdzFHwwp7"//발급받은 client id & secret key
  $client_secret = "KzKrnNFNu_";
 
  $encText = urlencode("네이버"); //검색할 Text를 url인코딩
 
  /*요청 변수(query, display, start, sort... 네이버 참고)
    json ver: https://openapi.naver.com/v1/search/book.json?...
    xml ver : https://openapi,naver.com/v1/search/book.xml?...
  */
  $url = "https://openapi.naver.com/v1/search/book.json?query=".$encText;
 
  $is_post = false;
 
  /*
  curl = 원하는 url에 값을 넣고 리턴되는 값을 받아오는 함수
  */
  $ch = curl_init(); //세션 초기화
 
  /*curl_setopt : curl옵션 세팅
    CURLOPT_URL : 접속할 url
    CURLOPT_POST : 전송 메소드 Post
    CURLOPT_RETURNTRANSFER : 리턴 값을 받음
  */
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, $is_post);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
  $headers = array();
  $headers[] = "X-Naver-Client-Id: ".$client_id;
  $headers[] = "X-Naver-Client-Secret: ".$client_secret;
 
  /*
    CURLOPT_HTTPHEADER : 헤더 지정 (네이버 api를 사용하려면 필요하다)
    CURLOPT_SSL_VERIFYPEER : 인증서 검사x
    https 접속시 필요
  */
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
 
/*
  curl_exec : 실행
  curl_getinfo : 전송에 대한 정보
  CURLINFO_HTTP_CODE : 마지막 HTTP 코드 수신
*/
  $response = curl_exec ($ch);
  $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  echo "status code: ".$status_code."";
 
  curl_close ($ch);
  if($status_code == 200) { //정상
    echo $response;
  }
  
  else {
    echo "Error 내용: ".$response;
  }
 
  ?>
 
cs



전체 코드이고 일단 Naver Developer에 있는 코드와 동일하게 사용했다.  코드에 대한 자세한 내용은 주석처리 해놓았다.  리턴 값을 json 혹은 xml형태로 받을 수 있는데 json이 파싱에도 편한거 같아서 json으로 받았다. 


response값을 확인하면 



이렇게 알아볼 수 없게 나온다.. 처음 할 때 파싱해야 한다는 생각이 안나서 어떻게하지.. 하고 고민 많이했다. json 이랑 xml이 먼지 찾아보고 그때 서야 파싱해야 한다는 걸 알았다. 


파싱한 방법은 다음과 같다.


1
2
3
4
5
6
7
<?php
 
$result = json_decode($responsetrue);
 
        print_r($result);
 
?>
cs



json_decode를 사용하면 $response를 배열 형태로 반환해준다. 




그러면 잘은 안보이지만 배열 형태로 파싱된 형태이다. 




형태를 풀어쓰자면

Array {


[total]


[start]


[display]


[items]['index]['title / link / image...']


}


이렇게 배열이 구성되어 있다. items안에 검색한 결과 값이 있으니 적절히 사용하면 된다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!-- html 부분-->
<p>검색어: 네이버</p>
        <table>
        <tr>
                <th>번호</th>
                <th>제목</th>
                <th width=200>이미지</th>
                <th>저자</th>
        </tr>
 
<!--php 부분-->
<?php
        $count = 0;
        while($count < $total){
        $img_src = $result[items][$count][image];
 
?>      <tr>
                <td><?php echo $count+1 ?></td>
                <td><?php echo $result[items][$count][title];?></td>
                <td><img src="<?php echo $img_src?>"></td>
                <td><?php echo $result[items][$count][author];?></td>
        </tr>
<?php
        $count++;
        }
?>
 
cs




html 결과 >>



보기 좋게 테이블 구성이 되었다. 




xml 버전 >>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
        $client_id = "SFezXsTn6ehQdzFHwwp7";
        $client_secret = "KzKrnNFNu_";
        $encText = urlencode("네이버");
        $url = "https://openapi.naver.com/v1/search/book_adv.xml?d_titl=".$encText;
 
        $is_post = false;
        $ch = curl_init();
 
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, $is_post);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
        $headers = array();
        $headers[] = "X-Naver-Client-Id: ".$client_id;
        $headers[] = "X-Naver-Client-Secret: ".$client_secret;
 
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
 
        $response = curl_exec ($ch);
        $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 
 
        curl_close($ch);
        echo $response;
 
        $result = new SimpleXMLElement($response);
 
        //파싱 예제
        echo $result->channel->item->title;
 
?>
cs


'Web' 카테고리의 다른 글

[PHP] cURL 사용 예시  (0) 2018.09.06
롤(RIOT) API 사용해서 전적 페이지 만들기  (1) 2018.08.22
[html] 마우스 오버시 글자 나타내기  (0) 2018.02.20