keyWord=
$keyWord
;
$this
->saveFile=
$saveFile
;
$this
->minSize=
$minSize
;
$this
->page=
$pageRange
[0];
$this
->maxPage=
$pageRange
[1];
}
public
function
run(){
while
(
$this
->flag &&
$this
->maxPage>
$this
->page){
$this
->timestamp=
$this
->microtimeFloat();
$this
->_execute();
$this
->page++;
$this
->_notice();
}
}
protected
function
_execute(){
$this
->_getUrl();
$this
->_getHtmlPage();
$this
->_parseHtml();
if
(
$this
->_currentMagnetCount){
$this
->_save();
}
}
public
function
microtimeFloat(){
list(
$usec
,
$sec
) =
explode
(
" "
, microtime());
return
sprintf('%01.2f',(float)
$usec
+ (float)
$sec
);
}
protected
function
_notice(){
$currentTime
=
$this
->microtimeFloat();
$useTime
=sprintf('%01.2f',
$currentTime
-
$this
->timestamp);
$this
->timestamp =
$currentTime
;
echo
'第'.
$this
->page.'页存储了'.
$this
->_currentMagnetCount.'个磁力链接,耗时'.
$useTime
.
"秒\r\n"
;
if
(!(
$this
->flag &&
$this
->maxPage>
$this
->page)){
echo
'总共存储了'.
$this
->_magnetCount.'个磁力链接'.
"\r\n"
;
}
}
protected
function
_getUrl(){
$this
->_url =
$this
->host.'search?q='.rawurlencode(
$this
->keyWord).'&p='.
$this
->page;
}
protected
function
_getHtmlPage(){
$ch
= curl_init();
curl_setopt(
$ch
, CURLOPT_HEADER, false);
curl_setopt(
$ch
, CURLOPT_TIMEOUT,
$this
->timeout);
curl_setopt(
$ch
, CURLOPT_URL,
$this
->_url);
curl_setopt(
$ch
, CURLOPT_SSLVERSION,3);
$result
= curl_exec(
$ch
);
if
(
$result
=== false){
$opts
=
array
(
'https'=>
array
(
'method'=>
"GET"
,
'timeout'=>
$this
->timeout,
)
);
$context
= stream_context_create(
$opts
);
$this
->_html = @
file_get_contents
(
$this
->_url,false,
$context
);
}
else
{
$this
->_html =
$result
;
}
curl_close(
$ch
);
}
protected
function
_parseHtml(){
preg_match_all('/href=
"(magnet\:\?xt=urn\:btih\:.+?)"
/',
$this
->_html,
$magnet
);
preg_match_all('/attr_val">(\d+?\.?\d*? [G|M|K]B)/',
$this
->_html,
$size
);
if
(
empty
(
$size
[1])){
$this
->flag=false;
}
foreach
(
$size
[1]
as
$key
=>
$val
){
if
(
$this
->_compareSize(
$val
)){
$this
->_magnet[]=
$magnet
[1][
$key
];
}
}
$this
->_currentMagnetCount =
count
(
$this
->_magnet);
$this
->_magnetCount +=
count
(
$this
->_magnet);
}
protected
function
_compareSize(
$size
){
$number
=
substr
(
$size
,0,
strpos
(
$size
,' '));
$unit
=
substr
(
$size
,
strpos
(
$size
,' ')+6);
$n
='';
switch
(
$unit
){
case
'GB':
$n
=1;
break
;
case
'MB':
$n
=1024;
break
;
case
'KB':
$n
=1048576;
break
;
default
:
$n
=false;
}
if
(
$n
===false){
try
{
throw
new
Exception(
"文件大小单位识别失败\n"
);
}
catch
(Exception
$e
) {
echo
$e
->getMessage();
return
false;
}
}
return
(
$this
->minSize < (
$number
/
$n
) );
}
protected
function
_save(){
$data
= '';
foreach
(
$this
->_magnet
as
$val
){
$data
.=
$val
.
"\n"
;
$this
->magnetNum++;
if
(0==
$this
->magnetNum%15)
$data
.=
"\n\n"
;
}
file_put_contents
(
$this
->saveFile,
$data
,FILE_APPEND);
$this
->_magnet=
array
();
}
}
$s
=
new
Magnet('LOL','magnet.log',2,
array
(0,10));
$s
->run();