gethostbyname() 함수 사용시
안녕하세요, 리눅스에서 naverapi(openapi)를 사용해서 단어의 뜻을 찾아주는 프로그램을 짜려고 합니다.
네이버 api로 단어를 찾는 방법은 일단,
http://openapi.naver.com/search?key=인증키&query=찾는단어&display=5&start=1&target=endic
url을 브라우저에 입력하면, xml 메시지가 보여집니다.
그리고, 그 단어의 뜻이 실린 웹페이지의 주소가 xml 메시지 안에 주소 식으로 되어 있고,
웹 브라우저에 링크 태그 속의 주소를 입력하면 뜻 페이지가 나오게 됩니다.
(즉, 사전찾기 기능의 네이버 api는 뜻을 담은 웹페이지의 주소를 담은 xml메시지를 전송해 줍니다.)
/
/
/
저는 gethosybyname()에 위의 url을 인자로 넣어서 ip 주소를 얻어낸 다음에
그 ip주소로 connect()해서 xml 메시지를 받고, 그 안에서 link태그 속의 주소를 뽑아내서 다시 단어의 뜻이 실린 웹페이지
ex) http://endic.naver.com/endic.naver?docid=492100
에 엑세스하여 뜻을 뽑아오려고 생각하고 있었습니다.
/
/
/
그런데, gethostbyname() 안에 저 위의
http://openapi.naver.com/search?key=인증키&query=찾는단어&display=5&start=1&target=endic
와 같은 주소 형식을 넣으니까 프로그램이 IP를 못 얻어오더라구요.
인자를 전해주는 ? 뒤의 변수들을 인식을 못하는 것 같은데요.
따로 인자를 전해주는 방법이 있나요?
리눅스에서 보통 c를 사용해서 위와 같은 url 을 엑세스 할 수 있는 방법이 있나요?
/
/
/
^^ 질문이 참 어지럽네요.
그럼 더운 여름 건강 조심하세요.
gethostbyname('endic.naver.c
이와 같이 사용합니다.
URL을 파싱해서 호스트명(endic.naver.com, openapi.naver.com)을 가져온 다음에 gethostbyname를 쓰던가 그렇지 않으면 코드상에 박아두고 사용하세요. "URL 전체를 인수로 넘겨주면 호스트를 찾을 수 없습니다." 오류메시지를 만납니다.
인자는 어떻게 전달해야 할까요?
답변 감사합니다.^^
근데 또 의문이 들어서요.
위의 URL을 보면 인증키와 검색할 단어( KEY, WORD )를 인자로 전달하게 되어 있는데,
이 인자는 어떤 식으로 전달해야 할까요?
gethostbyname( 'endic.naver.com ' );
이것은 영어 사전 서비스를 제공하는 주소를 가져오긴 하지만 뜻을 찾아주는 것은 아니잖아요.
^^ 답변 부탁드립니다.
더운 여름 건강하세요.
C에서의 소켓
C에서의 소켓 프로그래밍은 해본적이 없어서 가상코드(수도코드)로만 설명해드리겠습니다.
1. ipaddr = gethostbyname('openapi.naver.com');
2. 소켓구조체 준비 - ipaddr하고 포트번호가 입력됨(이 예에서는 80)
3. socket connect
4. HTTP 쿼리문자열 만들기
querystring = "GET /search?key=인증키&query=찾는단어&display=5&start=1&target=endic HTTP/1.1\r\nHost: openapi.naver.com\r\nConnection: close\r\n\r\n";
이 때 "찾는단어" 이 부분은 URL encode방식의 문자열을 입력합니다. 인증키 부분은 하드코딩(코드에 직접 적어두는 방식 - 변경이 되는 경우 재컴파일해야함)해줘도 되겠고요.
5. socketwrite(3번의 반환값, querystring);
6. 응답을 받음
7. XML 파싱을 통해 해당 주소 구함
이런 단계로 프로그래밍을 해 주셔야 합니다. 가상코드라서 실제 소켓함수명하고는 다르기 때문에 소켓프로그래밍 관련 내용을 찾아보시기 바랍니다.
감사합니다.^^
아직 시도해 본 것은 아니지만요,
이해가 가네요. 시도해보겠습니다.
더운 여름 건강 조심하세요^^
댓글 달기