테스트 사이트 - 개발 중인 베타 버전입니다

api 코드 한번 봐주세요. 채택완료

천사나라 8년 전 조회 3,570

여기 고수분들 도움을 얻어서 거의 성공하긴 했는데 그냥 검색은 되는데 form 에서 입력해서 넘기는게 안되네요.

정상적으로 동작하는것 : http://awamp.duckdns.org/naverbook3.php">http://awamp.duckdns.org/naverbook3.php 

아래 코드로 실행한것: http://awamp.duckdns.org/naverbook2.php">http://awamp.duckdns.org/naverbook2.php


<?php

  


  $client_id = "";

  $client_secret = "M";

  $encText = urlencode($_GET['book']);    // 이부분이 동작 안합니다. urlencode("검색어"); 하면 되는데 $_GET 을 사용하면 안되는군요.  방법이 없을까요? form 에서 책이름을 넣으면 검색되게 하고 싶습니다.


  $url = "https://openapi.naver.com/v1/search/book.json?query=">https://openapi.naver.com/v1/search/book.json?query=".$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);

  // echo "status_code:".$status_code." ";

  curl_close ($ch);

  

  if($status_code == 200) {    //it means OK = successful response

  $jsonData = json_decode($response);

  echo $jsonData->items[0]->title;

  echo "<br>";

  echo $jsonData->items[0]->author;

  echo "\r\n";

 

    }else {

    echo "Error 내용:".$response;

  }

?>


<!DOCTYPE html>

<html>

<head>

<!-- <title>barcoder</title> -->

</head>

<body>


<form action="naverbook2.php" method="get">

<input type="text" name="book" ">

<input type="submit" name="submit" value="submit">

</form>

 

</body>

</html>

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
tuts
8년 전

</p><p><?php</p><p>$client_id = "";</p><p>  $client_secret = "";</p><p>  $encText = urlencode(@$_GET['book']);    // 이부분이 동작 안합니다. urlencode("검색어"); 하면 되는데 $_GET 을 사용하면 안되는군요.  방법이 없을까요? form 에서 책이름을 넣으면 검색되게 하고 싶습니다.</p><p>  if(!empty($encText))</p><p>  {</p><p><span style="white-space:pre">	</span>  $url = "<a href="<a href="https://openapi.naver.com/v1/search/book.json?query=" target="_blank" rel="noopener noreferrer">https://openapi.naver.com/v1/search/book.json?query=</a>"><a href="https://openapi.naver.com/v1/search/book.json?query=" target="_blank" rel="noopener noreferrer">https://openapi.naver.com/v1/search/book.json?query=</a></a>".$encText; </p><p><span style="white-space:pre">	</span>  </p><p>
</p><p><span style="white-space:pre">	</span>  $is_post = false;</p><p><span style="white-space:pre">	</span>  $ch = curl_init();</p><p><span style="white-space:pre">	</span>  curl_setopt($ch, CURLOPT_URL, $url);</p><p><span style="white-space:pre">	</span>  curl_setopt($ch, CURLOPT_POST, $is_post);</p><p><span style="white-space:pre">	</span>  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);</p><p><span style="white-space:pre">	</span>  $headers = array();</p><p><span style="white-space:pre">	</span>  $headers[] = "X-Naver-Client-Id: ".$client_id;</p><p><span style="white-space:pre">	</span>  $headers[] = "X-Naver-Client-Secret: ".$client_secret;</p><p><span style="white-space:pre">	</span>  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);</p><p><span style="white-space:pre">	</span>  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);</p><p><span style="white-space:pre">	</span>  $response = curl_exec ($ch);</p><p><span style="white-space:pre">	</span>  $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);</p><p><span style="white-space:pre">	</span>  // echo "status_code:".$status_code." ";</p><p><span style="white-space:pre">	</span>  curl_close ($ch);</p><p><span style="white-space:pre">	</span>  </p><p><span style="white-space:pre">	</span>  if($status_code == 200) {    //it means OK = successful response</p><p><span style="white-space:pre">	</span>  $jsonData = json_decode($response);</p><p><span style="white-space:pre">	</span>  for($i=0;$i<count($jsonData->items);$i++)</p><p><span style="white-space:pre">	</span>  {</p><p><span style="white-space:pre">		</span>  echo $jsonData->items[$i]->title;</p><p><span style="white-space:pre">		</span>  echo "
";</p><p><span style="white-space:pre">		</span>  echo $jsonData->items[$i]->author;</p><p><span style="white-space:pre">		</span>  echo "\r\n";<span style="white-space:pre">	</span></p><p><span style="white-space:pre">	</span>  }</p><p><span style="white-space:pre">	</span>  </p><p><span style="white-space:pre">	</span> </p><p><span style="white-space:pre">	</span>    }else {</p><p><span style="white-space:pre">	</span>    echo "Error 내용:".$response;</p><p><span style="white-space:pre">	</span>  }</p><p>  }</p><p>?></p><p>
</p><p><!DOCTYPE html></p><p><html></p><p><head></p><p><!-- <title>barcoder</title> --></p><p></head></p><p><body></p><p>
</p><p><form action="<span style="color: rgb(72, 72, 72); font-family: Arial, 돋움, Dotum; font-size: 14.004px;">naverbook2</span>.php" method="get"></p><p><input type="text" name="book" "></p><p><input type="submit" name="submit" value="submit"></p><p></form></p><p> </p><p></body></p><p></html></p><p>


get값이 없을경우 오류처리와 for문으로 결과값 items값 출력하는거 수정해봤습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

천사나라
8년 전
답변 감사 드립니다. 이제 제대로 되네요. 항상 도움에 감사 드립니다.
근데 @$_GET['book'] 앞에 골뱅이 저거 넣어야 되나요? 안 넣어도 일단 실행은 되네요.
오늘 교보문고에 갔다 왔습니다. xml 은 어렵다고 해서 json 에 관한 책이 있나 봤더니 책이 거의 없네요.
json 공부를 좀 해보고 싶은데 마땅한 교재 같은게 없네요.
api 공부할려면 xml 보다 json 이 낫다는 얘길 들었거든요.
t
tuts
8년 전
@ 안넣어주셔도 괜찮습니다
json같은경우는 교재말고 구글 검색해서 정보 찾아보시는게 더 빠르실꺼예요
천사나라
8년 전
감사 감사..

댓글을 작성하려면 로그인이 필요합니다.

그리고 for 문을 사용해서 결과를 5개만 가져오고 싶은데 코드를 어떻게 수정해야 하나요?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

tuts
8년 전

어떤 부분이 오류인지요? 두번째 링크로 들어가서 폼에서 검색하니 첫번째 링크랑 똑같이 뜹니다

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

천사나라
8년 전
그런데 왜 첫페이지에 ... 아래와 같은 메시지가 뜰까요??????

Error 내용:{ "errorMessage": "Incorrect query request (잘못된 쿼리요청입니다.)", "errorCode": "SE01" }
천사나라
8년 전
아마도 첫페이지가 나타날때 입력란이 공란이라서 이런 메시지가 나타 나는것 같은데?
방법이 없을까요?
천사나라
8년 전
코드를 아래 처럼 바꿔도 안되네요.

if($encText != ''){
echo $jsonData->items[0]->title;
echo "<br>";
echo $jsonData->items[0]->author;
echo "<br>";

}else {
echo "Error 내용:".$response;
}

}
천사나라
8년 전
아래코드처럼 위에다가 넣으니까 그냥 Error 내용: 이것만 나타납니다. else 이하가 안 나타나야 정상이지 않나요?

if($encText !=''){
$url = "https://openapi.naver.com/v1/search/book.json?query=".$encText;
}

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인