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

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

정상적으로 동작하는것 : http://awamp.duckdns.org/naverbook3.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=".$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 포인트

Copy
<?php$client_id = "";  $client_secret = "";  $encText = urlencode(@$_GET['book']);    // 이부분이 동작 안합니다. urlencode("검색어"); 하면 되는데 $_GET 을 사용하면 안되는군요.  방법이 없을까요? form 에서 책이름을 넣으면 검색되게 하고 싶습니다.  if(!empty($encText))  {	  $url = "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);	  for($i=0;$i<count($jsonData->items);$i++)	  {		  echo $jsonData->items[$i]->title;		  echo "<br>";		  echo $jsonData->items[$i]->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>


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

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

답변에 대한 댓글 3개

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

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

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

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

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

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

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

답변에 대한 댓글 4개

그런데 왜 첫페이지에 ... 아래와 같은 메시지가 뜰까요??????

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

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

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

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

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

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

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

로그인
🐛 버그신고