[分享]PHP搜刮GOGOBOX資料,GOGOBOX搜尋器(自寫)

看板PHP作者 (胖胖糖)時間14年前 (2009/10/11 09:55), 編輯推噓2(203)
留言5則, 5人參與, 最新討論串1/1
轉自FQSTORY(算嗎?都是自己寫的!!顆顆) 就好奇心驅使,研究了一下GOGOBOX網站 找到一些規則 不知道其他GOGOBOX搜尋引擎是不是這樣寫的 說不定有更高招的方法 不過還是用了最普遍簡單的方法 程式碼還沒有整理過(邊測試邊寫的) 還請多多包涵 大家就參考看看吧!! . . . =======GOGOBOX 搜尋引擎(原理)=========== 其實只是使用最簡單也最笨的搜尋方法 "蜘蛛爬行法" (不太清楚是不是這樣叫) 爬行的只有會員ID,然後每個ID裡面都有許多檔案 這些檔案就用內建的GOGOBOX搜尋器,去搜尋 本人是一次搜尋最多五百筆(當然,要一次用更多都沒關係),如果超過五百筆就跳頁 (使用瀏覽器看最多五十筆,他是記錄在COOKIE,要改成五百) (程式碼裡面全部都可以很清楚的看到方法) =======GOGOBOX 搜尋引擎(PHP程式碼)=========== //(因為是邊測試邊寫,所以寫的超亂的,未整理過,請包含) //(邊碼為UTF8) //(PS此篇還需要先用CURL登入,並將SESSION記錄起來才可使用GOGOBOX內建搜尋) //這邊是開始使用"蜘蛛爬行法" //30000000 前面開頭的"3"也等於網址的開頭 http://box3.gogobox.com.tw //要修改的話要全部修改(約有兩三個) //由於PHP有時間限制,所以要先改過,本人約改成兩個小時 //然後一次五千筆(可以開好多個網頁一次進行) for($a=20001;$a<=25000;$a++){ $no = $a + 30000000; //GOGOBOX 會員ID 也是BOX ID gogo_load($no);//呼叫主程式 } //GOGOBOX 搜尋引擎 主程式 function gogo_load($no){ $post['box_no']=$no;//GOGOBOX 會員ID 也是BOX ID $post['nPageNo']='1';//搜尋第幾頁 $row_page=500;//一次筆數(使用GOGOBOX內建搜尋) $cookie_file_path = "d:\cookie.txt";//紀錄SESSION的地方,GOGOBOX內建搜尋必須登入 $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie_file_path); //get info //這行為登入的網址,要先登入一次GOGOBOX然後把記錄的SESSION記錄到上面的//d:\cookie.txt //不過因為只用一次,之後都可以使用,所以登入的程式碼刪了 ==" //其實主要是因為是邊研究邊寫,所以之後覺得沒用,就... //$login ='http://client.gogobox.com.tw:8000/caccessX'; $url = 'http://box3.gogobox.com.tw:8037/app/list_file.cgi?box_no='.$post['box_no']; curl_setopt($ch, CURLOPT_URL,$url); $num = curl_exec($ch); $num = strip_tags($num,''); $num = strstr($num,'全部資料夾'); $num = strstr($num,'('); $num = (int)substr($num,1,6); //以上是判斷是否有資料,如果有才執行以下"使用GOGOBOX內建搜尋 搜尋檔案" //不過之後覺得這邊可以改一下,速度可以更快 if($num !=0){ $page = ceil($num/$row_page); //=============================================== $url = 'http://box3.gogobox.com.tw:8037/app/list_file.cgi'; //$post['nPageNo']='1'; $once_num = 0; for($i=1;$i<=$page;$i++){ load_gogobox($post['box_no'],$i,$num,$row_page,$page); //呼叫 使用GOGOBOX內建搜尋 } }else{ echo $no.'&nbsp;';//if } curl_close ($ch); } //這邊就是發送資訊給GOGOBOX叫他搜尋某BOX的所有檔案 //一次搜尋五百筆(預設) //然後取得資料 function load_gogobox($post_no,$i,$num,$row_page,$page){ $chx = curl_init(); $cookie_file_path = "d:\cookie.txt"; //登入SESSION都記錄在這邊 curl_setopt($chx, CURLOPT_RETURNTRANSFER, 1); curl_setopt($chx, CURLOPT_COOKIEJAR, $cookie_file_path); curl_setopt($chx, CURLOPT_COOKIEFILE,$cookie_file_path); $url = 'http://box3.gogobox.com.tw:8037/app/list_file.cgi'; $post['box_no'] = $post_no; //GOGOBOX會員ID,BOX ID $post['nPageNo'] = $i; //第幾頁 if($i==$page){ $once_num = $num%$row_page; }else{ $once_num=$row_page; } curl_setopt($chx, CURLOPT_POST,1); curl_setopt($chx, CURLOPT_URL,$url); curl_setopt($chx, CURLOPT_POSTFIELDS, $post); //GOGOBOX 是利用COOKIE來記錄要顯示幾筆 //很久以前看的時候沒有發現 //是前個月(應該吧)看他的JAVASCRIPT 才發現的 ==" curl_setopt($chx, CURLOPT_COOKIE, "CbFileBoxListCnt=".$row_page." ; path=/"); //顯示X筆 $result = curl_exec($chx); gogobox($result,$once_num);//開始把GOGOBOX內建搜尋的結果(五百筆) 紀錄出來 curl_close ($chx); } function gogobox($content,$once_num){ //取回 分析 GOGOBOX內建搜尋 //主要就是一些字串處理 $content = strstr($content,'<!-- list table -->'); $content = substr($content,0,strpos($content,'<!-- list table END -->')); //echo $content; for($i=0;$i<$once_num;$i++){ $content = substr($content,strpos($content,'colspan=\'6\'')+10); $content_link = strip_tags($content,'<td><a>'); $content_data = strip_tags($content,'<td>'); $title = strstr($content_data,'class=\'box_f_name\' valign=\'middle\'>'); $title = strstr($title,'>'); $title = trim(substr($title,1,strpos($title,'</td>')-1)); $name = strstr($content_data,'class=\'box_f_info_01tdu\'>'); $name = strstr($name,'>'); $name = trim(substr($name,1,strpos($name,'</td>')-1)); $size = strstr($content_data,'class=\'box_f_info_02\'>'); $size = strstr($size,'>'); $size = trim(substr($size,1,strpos($size,'</td>')-1)); $date = strstr($content_data,'class=\'box_f_info_04\'>'); $date = strstr($date,'>'); $date = trim(substr($date,1,strpos($date,'</td>')-1)); $link = strstr($content_link,'onClick="Copy_Link'); $link = strstr($link,'\''); $link = substr($link,1); $link = trim(substr($link,0,strpos($link,'\'')-1)); $return['file_title']=mysql_escape_string($title); $return['file_name']=mysql_escape_string($name); $return['file_size']=mysql_escape_string($size); $return['file_link']=mysql_escape_string($link); $return['db_date']=mktime(); //data_creat_some("gogobox",$return); //最後將字串都整理好後,建立到資料庫去 //這邊就不把此FUNCTION寫出來了,可以用var_dump($return)看資料 //之後即可自行應用 } } ===============引用先前==================== 引用先前發的 "GOGOBOX 搜尋引擎" 以下是之前研究GOGOBOX的原由 GOGOBOX 搜尋引擎 想必有許多人都也有想過吧!! 當初FINDBOX出來的時候,可是為之驚人啊!! 每天流量都爆破!!顆顆 但是不知怎麼的後來就消失了 ======題外話====== (知道的人還請跟我說說吧!THX!~) 只知道之後GOGOBOX有改版 檔案的下載位置好像都有改變的樣子(不太 記得了) 所以FINDBOX就失效了??? (I REALLY DONT KNOW) (或是被警察伯伯抓了???這樣有犯法嗎??) 這一值都是我現在的疑問 顆顆 不過現在好像又有很多人有架類似的站吧!! 顆顆~~這邊也是其中之一 ======題外話====== 所以就決定再來試做一個 GOGOBOX搜尋引擎 於是就花了許多時間在研究他的檔案位置 最後是有得出一些結論 : 第一個 GOGOBOX 每個會員都有編號 第二個 GOGOBOX 每個檔案也都有編號 第三個 GOGOBOX 每個檔案下載位置都有加上會員編號 第四個 不知道怎麼不列會員編號就下載到檔案 最後 GOGOBOX 必須要有會員編號 和檔案編號才能下載 (不知道對不對) 但是還有一個線索,就是他每個會員BOX裡面都可以搜尋到他所PO的所有檔案 結合以上幾點就用PHP寫出了一個搜尋器 因為不可能直接使用GOGOBOX的搜尋引擎,所以大概就是要像GOOGLE一樣 把檔案都先搜索過然後存到資料庫,使用者再直接搜尋這個資料庫 這樣速度才OK SO... 目前今天花了一個下午,大概寫出了一些,已經可以廣搜GOGOBOX了 不過速度有點慢 == 十分鐘 約 幾千個檔案而已 (過了幾天,目前約四十萬筆吧!!) 一切還在測試中,...至於公開程式碼 大概會慢一點公開 . . . -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.46.114.108

10/12 01:10, , 1F
建議不要直接貼程式碼,在bbs上面很難看
10/12 01:10, 1F

10/12 08:30, , 2F
一樓你不爽別看 我看的很開心
10/12 08:30, 2F

10/12 08:38, , 3F
是啊,不爽別看不就好了,有人送你還不知感恩...
10/12 08:38, 3F

10/12 12:45, , 4F
一樓的意思應該是難以閱讀跟難以跳躍參照吧= =?
10/12 12:45, 4F
文章代碼(AID): #1AqJh_I0 (PHP)