php로 도서관사이트의 검색결과를 긁어오고 싶은데 잘 안되네요.

easthelper의 이미지

사실 php를 할 줄 알아서가 아니라 알아보다가 php를 이용해서 하기 좋다고 해서 막 시작했습니다. 프로그래밍 경험은 학교에서 배운 c언어와 혼자 공부하고 있는 java가 다입니다.

학교 도서관 책 상태를 아이폰으로 보면 편하겠다 싶어서 공부를 시작하기 시작했는데.

간단히 과정을 말씀 드려보면.

아무생각 없이 file_get_contents 로 긁어오려다 보니 메인페이지는 긁어 올 수 있는데 문제는 검색결과를 불러올 수가 없더군요-_-;
입력폼에 키워드를 입력하면 서치.asp 형식이 url에 표시되면서 검색 결과가 나옵니다. 키워드는 표시되지 않구요.
그 주소를 복사해서 직접입력하면 빈페이지만 나옵니다. 교보같은 사이트는 검색키워드가 없다라고 나오는데 이건 그냥 빈페이지만 나오는 매정한 ㅜㅜ

그래서 또 알아보니 get, post방식을 알게 되었습니다.

firefox에서 firebug라는 확장을 이용해서 post 내용도 살펴보고 기존 검색창 소스에서 input 경우만 뜯어와서 소스를 작성했습니다.

예를들면

<html>
<body>
 
				<form method="post" name="SearchForm" target="down" action="http://ac.kr" STYLE="margin:0,0,0,0;">
 
검색					<input type="hidden" value="SYSTOT" name="SysKey" id="SysKey">
					<input type="hidden" value="TOT" name="SysDiv" id="SysDiv">
					<input type="hidden" value="FRNT" name="SearchMethod" id="SearchMethod">
					<input type="hidden" name="ViewSearchMethod" value="전방일치">
					<input type="hidden" value="" name="ViewType" id="ViewSysDiv">
					<input type="hidden" value="" name="TitleImageName">
					<input type="hidden" value="MainBody" name="MainMenuNo">
					<input type="hidden" name="SearchQuery" id="SearchQuery" value="[web ,TOT00,1,0,1] and ([000BN1SL,TOT00,3,6,3]) AND NOT [1,TOT00,3,25,3]">
					<input type="hidden" name="ViewQuery" id="ViewQuery" value="[전방일치/ 전체: web] [소장처:서울캠퍼스]">
					<input type="hidden" value="TOTWSearchEngine" name="SearchLocation" id="SearchLocation">
					<input type="hidden" name="ComMethod" id="ComMethod">
					<input type="hidden" value="통합" name="ViewType" id="ViewType">
					<!-- <input type="text" name=SearchField size=21 class="select"> -->
					<!-- ezsearch search text box modification -->
					<select class="select_sort" name="SearchItem" id="SearchItem"><option selected="" value="TOTAL">전체</option>
						<option value="KEYW01">서명</option>
						<option value="KEYW02">저자</option>
						<option value="KEYW03">발행처</option>
						<option value="KEYW04">주제어</option>
						<option value="KEYW06">소속</option>
					</select>	
					<input type="hidden" value="000BN1SL" name="LimitTitleSS_2">
					<input type="text" autocomplete="off" value="web" id="ezSearch" class="select" size="21" name="SearchField">
					<input align="absmiddle" type="image" name="image1" id="image1" src="http://">
 
 
 
 
</form>
</body>
</html>

이런식으로 말입니다. 그리고 정상적으로 입력했을떄의 post와 동일하게 post되도록 짜집기한 소스입니다. 일단 테스트용으로 해본건데 이것마저 공백화면을 출력해주더군요..
혹시나 referer 체크를 해서 하는건가 싶기도 해서 curl소스를 이용해 보았는데.

<?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "localhost/for_iphone_1.php");
curl_setopt($ch, CURLOPT_REFERER, "http:///topmenu.asp");
curl_exec($ch);
curl_close($ch);
?>

리퍼가 변경되는지도 모르겠습니다 -_-;;;

아니면 저 post를 보낸 상태에서 따로 데이터값을 받아와야 하는건지..
그러고보니 php를 쓰지도 않았군요-_-;;; 워낙 기초가 없다보니 막막하기만 합니다. 애초에 가능한짓을 하고 있는건가 하는 의문도 들고..
나름 모교학생들을 널리 이롭게 하기 위해 시작했는데 막힌다고 중단하고 싶진 않습니다.
해답이 아니더라도 어떤쪽으로 공부해야 될지 고수님들의 조언좀 부탁드립니다ㅠㅠ.

easthelper의 이미지

제가 직접 referer 수정할 능력이 안돼서 불여우 확장을 이용해서 referer 값을 변경했더니 posting 후 응답을 받는데는 성공 했습니다.

그런데 위에 같은 방법으로 하면 그냥 해당 페이지를 불러오는 거고

제가 하고 싶은 건 스트링으로 받아와서 정규식 처리를 하는 건데.
그럼 form을 이용하지 말고 curl을 이용해서 post를 따로 해야되는건가요?
조그마한 팁이라도 부탁드립니다.
그리고 http에 대해서도 공부해야 될거같은데 괜찮은 책 있으면 추천좀 부탁드립니다. 감사합니다.

매일매일 삽질하면서 조금조금이나마 진척은 있으니 재미는 있는데 생각보다 공부해야 할게 많네요ㅜ

easthelper의 이미지

telnet에서 직접 POST 및 GET 하면서 내용 좀 파악하고

COOKIE 값 이용해서 검색결과 리스트의 html 받아오는데까지 성공 했습니다.
curl 몇줄이면 가능한걸 보니 허무하기까지 하긴 하지만.. 아직 이해도가 떨어져서 제대로 사용하긴 어렵습니다.

대략의 앞으로 진행해야 할 사항

1. 키워드 입력받아서 post 내용 할당
2. 정규식 사용 스트링 재 가공
3. 리스트에서 상세페이지 연결하기 및 페이지 이동

영어도 짧아서 힘드네요- _-;; 영어공부부터 할까봐요 ㅜㅜ
공부하다가 보니까 제 질문글에 답글이 안달릴만 하더군요-_-;;
어쨌든 혼자라도 이어가볼라고 합니다~!

cleansugar의 이미지

저는 파이썬으로 긁어오기 프로그램을 만든 적이 있습니다.

파이썬으로는 검색엔진도 만드니까 추천합니다.

파이썬에는 HTML파서, HTTP와 쿠키 조작 라이브러리가 있어서 편합니다.

PHP는 웹용 언어라서 긁어오기는 좀 무리가 있죠.

하지만 PHP에도 HTML파서와 HTML과 쿠키 조작 라이브러리가 있을겁니다.

___________________

http://blog.aaidee.com

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.