2009年9月16日 星期三

GOGOBOX 搜尋引擎(PHP程式碼公開)

=======GOGOBOX 搜尋引擎(註記)===========

從寫好到現在已經過了一段時間了
大概搜到有五十多萬筆就停止了
原因主要是 :
  • 資料庫目前還是在自己的小筆電上面,要公開搜尋要移到"大主機"上
  • 本人沒有付費空間或是"大主機",只有免費空間
  • 免費空間放三十萬筆就爆了(修一修頂多放五十萬筆),但GOGOBOX有上百萬筆
  • 已經有人寫出來了,而且也夠好了
大概在前個禮拜停止之後,至今已經快要淡忘了= ="
所以決定在忘記之前,快點先寫出來 (BLOG+福球亂彈)

=======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了
不過速度有點慢 == 十分鐘 約 幾千個檔案而已
(過了幾天,目前約四十萬筆吧!!)
一切還在測試中,...至於公開程式碼 大概會慢一點公開
ps 目前搜了兩萬五千筆左右 == 離全部還好遠好遠
===============宣告====================
此篇內容僅供測試,如果有利用做不法行為,與本人無關

5 則留言:

  1. 因為GOGOBOX 不太可能讓你直接搜尋它們的資料庫(除非HACK OR GOGOBOX本身開放),所以要先把資料都慢慢爬行搜索到自己的資料庫,再讓別人搜尋,目前市面上看的到的,都差不多是這樣

    回覆刪除
  2. 網誌管理員已經移除這則留言。

    回覆刪除
  3. 原來大大對之前的事情不大知道
    基本上是這樣......
    之前的一開始大家用的只有一個某人做的引擎
    說實在真的好用到我那時候只要熟悉關鍵字使用訣竅
    幾乎不用上論壇或是YAHOO找文章
    想要找的東西幾乎只要有人上傳都挖出來
    只剩下對方給不給加會員這關卡
    但是人紅是非多~ 那個引擎太好用~
    作者BLOG好像有說因為太熱門被警告~ 後來暫時中止服務~
    然後就不見了`

    回覆刪除
  4. 建議用雲端概念去做~ 搜索應該較快~ 就是讓網路上各主機幫你找然後把找到的參數丟給使用者~ 我不會寫程式~ 只會一些些概念做紙上談兵

    回覆刪除