XtGem Forum catalog
logo

Chatbox|Admin nhận làm wap/web, giá cả thương lượng... Thông tin admin tại mỗi bài viết.
Home · Bang hội ·
* Đăng Nhập hoặc Đăng Kí
để sử dụng hết chức năng của diễn đàn.
Hi, Khách!
HomeBang hội » Wapmaster » PHP » Hướng Dẫn Grab + Làm Tool Leech Bằng CURL Part 2 by princenuce
Xuống dưới » Hướng Dẫn Grab + Làm Tool Leech Bằng CURL Part 2 by princenuce
avatar by Pham_loi Pham_loi
Chức vụ:
01:02:58, 16-03-2016

Những cái cơ bản mình nói ở trước ở part 1 rồi, bay giờ mình đi vào phân tích tool luôn để ace thấy nó cũng thường thôi[imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img)
ok ok, mình sẻ lấy tool auto leech truyện cười tại haynhat.com để phân tích nhé, vì bản này vừa viết xong nên nói luôn cho nóng, về bản chất thì giống nhau cả thôi
hàm thứ nhất tối quan trọng nè
<?php
function get($url){
$curl curl_init ();
curl_setopt ($curlCURLOPT_URL$url);
curl_setopt ($curlCURLOPT_USERAGENT"Mozilla/17.0");
curl_setopt ($curlCURLOPT_COOKIEJAR'cookie.txt');
curl_setopt ($curlCURLOPT_COOKIEFILE'cookie.txt');
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
curl_setopt ($curlCURLOPT_ENCODING"");
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}
?>

Copy code
chức năng là lấy mã html của link thôi,
giả sử mình xem 1 bài post chẳng hạn link này
http://www.haynhat.com/home/truyen-cuoi/2013/05/mong-muon-khi-chet/
ok mình thấy tiêu đề bài viết nó nằm trong
<?php
<h1 class="posttitle"><center></h1>Mong muốn khi chết</center></h1>
?>

Copy code

câu hỏi đặt ra là nếu có nhiều cái nằm giữa <h1 class="posttitle"><center> và </center></h1> thì gặp rắc rối khi tách ra để lấy đúng tiêu đề của nó [imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img, nên mình có thủ thuât nhỏ như sau, (dành cho mấy thím xài pc or ucweb thui nhé)
bạn bôi đen <h1 class="posttitle"><center> và ctrl+F và nhìn xem nó có mấy kết quả, nếu có 1 kết quả là tốt, hì hì nếu có 2 cái thì sẽ phải dựa vào bộ html nhận được mà phân tích tiếp ;;), bây giờ thì mình chỉ nhận được 1 tags như thế có nghĩa là công việc hơi suôn sẻ,[imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img), như vậy để lấy được tiêu đề mình sẽ thiết kể 1 function để tách nó ra, fuction như sau
<?php
function get_tt($data){
preg_match('#<h1\sclass=\"posttitle\"><center>(.+?)</center></h1>#',$data,$out);
return(
$out[1);
}
?>

Copy code

hàm này nhận vào là bộ mã html, câu regex ấy có nghĩ tìm chuỗi nằm giữa 2 cụm tags nêu trên trong bộ html đưa vào và lấy nó vào $out, trả lại giá trị cho hàm bằng lệnh return $out[1;
chú ý nè, cái $out nó là 1 mảng, nhưng giá trị mình cần lấy nó ở $out[1, làm sao biết thì đơn giản nếu bạn k chắc thì print_r($out); rồi xem nó ở cái nào thì lấy, nhanh nhất đó, còn mình thì lấy theo php.net và kinh nghiệm nó nói [imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img, vậy là xong tiêu đề rồi đó,
tương tự phần nội dung mình cũng tìm được nó nằm trong tagsnội dung, nhờ thủ thuật trên mình củng biết nó duy nhất tức là chỉ có 1 tags như thế-chính là tags chứa nội dung đó,[imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img, vậy mình củng thiết kế 1 function lấy nội dung ntn
<?php
function get_ct($data){
preg_match ('#<div\sclass=\"noi-dung-bv\">(.+?)</div>#s',$data,$out);
return 
nl2br(strip_tags($out[1));
}
?>

Copy code

ở phần trả lại mình có dùng đến strip_tags() để bỏ các tags html khỏi nội dung và nl2br để chuyển tất cả kí tự \n\r hoặc \n .. thành <br />, lý do là để nó hiển thị cho tự nhiên như bài thật thôi,[imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img)
vậy là để lấy được nội dung 1 bài có vẻ đơn giản nhỉ, uhm củng bt thôi, nếu k rườm rà thì chỉ có 2 dòng [imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img)
và tiếp là mình muốn lấy link của 1 trang truyện cười thì mình có hàm sau
<?php
function get_l($link){
$data get ($link);
preg_match_all ('#<div\sclass=\"listting\">(.+?)</div>#is',$data,$page);
foreach (
$page[0 as $k=>$v) {
preg_match ('#href=\"(.+?)\"#s',$v,$a);
$out[$k = $a[1;
}
return 
$out;
}
?>

Copy code

hàm này nhận vào 1 link và trả về danh sách link truyện, link nhận vào ví dụ
http://www.haynhat.com/home/hay/truyen-cuoi/page/2/
thì hàm trên sẽ lấy tất cả link truyện trên trang đó và trả nó vào 1 mảng ai cần giả thích hàm này thì nói mình giải thích vì thực ra nó củng tương tự chỉ là thêm cái vòng lặp mảng thôi [imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img
à uhm đâu vào đấy r nhỉ, công việc bây giờ là lặp và lấy truyện thôi,
mình vào và thấy nó có 59 trang truyện, thì mình sẽ lặp 59 trang và lấy truyện từ các trang ấy, code đây
<?php
$i 
1;
while (
$i<=59) {
if (
$i>1$list get_l('http://www.haynhat.com/home/hay/truyen-cuoi/page/' $i);
if (
$i=1$list get_l('http://www.haynhat.com/home/hay/truyen-cuoi/');
foreach (
$list as $u) {
$html get ($u);
echo 
get_tt ($html) . '<br />';
echo 
get_ct ($html);
echo 
'<hr />';
//echo $u;
}
$i ++;
}
?>

Copy code

cái thằng truyện cười ở đây nó hơi chuối tí, trang 1 của nó phải có link dạng
[url http://www.haynhat.com /home/hay/truyen-cuoi/
hơi rắc rối nhưng mình gỡ cho nè
đầu tiên bắt đầu vòng lặp cho $i=1; là biến chạy
while ($i<=59) { cái này có nghĩ trong lúc biến i <= 59($i giờ bằng 1< 59 là cái chắc rồi ) thì ta sẽ làm như sau
if ($i=1) $list = get_l('[url http://www.haynhat.com /home/hay/truyen-cuoi/');
nếu biến i =1 thì $list (biến danh sách link ) hàm lấy danh sách link từ url và gán vào $list
if ($i>1) $list = get_l('[url http://www.haynhat.com /home/hay/truyen-cuoi);
nếu biến i> 1 nếu biến i =1 thì $list (biến danh sách link ) hàm lấy danh sách link từ url và gán vào $list
sau đó lặp mảng $list lấy ra link và tách tittle và nội dung rồi xuất ra sau đó $i tăng lên 1 rồi tiếp tục vòng lặp,
ồ yeah, vậy là khi $i đang <=59 thì vòng lặp cứ thực hiện, đến khi $i tăng quá 59 thì thoát ra và dừng lại, như vậy code trên sẻ lấy tất cả truyện và xuất ra màn hình cho bạn, k insert đâu nhá, đây chỉ là bản demo để các bạn hiểu thế nào là auto thôi, như vậy khi bạn chạy cod etreen thì việc bạn cần làm là ngồi đợi nó leech hêt thôi, chả làm gì, source hoàn chỉnh đây
<?php
<meta charset="utf8" />
<?
/*----------------*/
function get($url){
$curl curl_init ();
curl_setopt ($curlCURLOPT_URL$url);
curl_setopt ($curlCURLOPT_USERAGENT"Mozilla/17.0");
curl_setopt ($curlCURLOPT_COOKIEJAR'cookie.txt');
curl_setopt ($curlCURLOPT_COOKIEFILE'cookie.txt');
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
curl_setopt ($curlCURLOPT_ENCODING"");
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}
/*----------------*/
function get_ct($data){
preg_match ('#<div\sclass=\"noi-dung-bv\">(.+?)</div>#s',$data,$out);
return 
nl2br(strip_tags($out[1));
}
/*----------------*/
function get_tt($data){
preg_match('#<h1\sclass=\"posttitle\"><center>(.+?)</center></h1>#',$data,$out);
return(
$out[1);
}
function 
get_l($link){
$data get ($link);
preg_match_all ('#<div\sclass=\"listting\">(.+?)</div>#is',$data,$page);
foreach (
$page[0 as $k=>$v) {
preg_match ('#href=\"(.+?)\"#s',$v,$a);
$out[$k = $a[1;
}
return 
$out;
}
//echo get ('http://www.haynhat.com/');

//print_r (get_l('http://www.haynhat.com/home/hay/truyen-cuoi/page/2'));
$i 1;
while (
$i<=59) {
if (
$i>1$list get_l('http://www.haynhat.com/home/hay/truyen-cuoi/page/' $i);
if (
$i=1$list get_l('http://www.haynhat.com/home/hay/truyen-cuoi/');
foreach (
$list as $u) {
$html get ($u);
echo 
get_tt ($html) . '<br />';
echo 
get_ct ($html);
echo 
'<hr />';
//echo $u;
}
$i ++;
}
?>

Copy code

ồ ohm giờ hướng dẫn luôn cho việc insert csdl johncms nè
mình có một số hàm viết sẵn, các bạn chỉ việc dùng , vì những hàm này là tự mình viết dể phục vụ viêt tool chứ mình không dùng hàm sẵn trong john nên khá dài dòng nên k giả thích nhé
<?php
/*----------------*/
function dbconnect()
{
$dbuser='root';
$dbname='jcms';
$dbpass='root';
$dbhost='localhost';
date_default_timezone_set('Asia/Ho_Chi_Minh');
$con=mysql_connect($dbhost,$dbuser,$dbpass);
if(
$con){
mysql_select_db($dbname,$con);
mysql_query("SET NAMES 'utf8'",$con);
return 
$con;
}
else{
die(
'không chọn được database');

}
}

/*----------------*/
function check_entry($title){
dbconnect();
if(
mysql_num_rows(mysql_query("SELECT `text`,`type` FROM `forum` WHERE `text` = '$title' AND `type` = 't'" )) == 0){
return 
$suc='ok';
}else{
return 
$suc='err';
}
}
/*----------------*/
function get_id_title($title){
dbconnect();
if((
$sql mysql_query("SELECT `id` FROM `forum` WHERE `text` = '$title' AND `type` = 't'"))!==false){
$row mysql_fetch_array($sql);
return 
$suc$row['id';
}else{
return 
$suc='err';
}
}
/*
--------------------------------------------------------------------------------
post title entry
--------------------------------------------------------------------------------
*/
/*----------------*/
function insert_post_title_johncms($title,$refid,$user_id,$from){
dbconnect();
if(
mysql_query("INSERT INTO `forum` SET
`refid` = '
$refid',
`type` = 't',
`time` = '" 
time() . "',
`user_id` = '
$user_id',
`from` = '
$from',
`text` = '
$title',
`soft` = '',
`edit` = ''"
)== true){
return 
$suc='ok';
}else{
return 
$suc='err';
}
}
/*
--------------------------------------------------------------------------------
end post title
--------------------------------------------------------------------------------
*/
/*
--------------------------------------------------------------------------------
post entry
--------------------------------------------------------------------------------
*/
/*----------------*/
function insert_post_entry_johncms($contents,$refid,$user_id,$from){
dbconnect();
if(
mysql_query('INSERT INTO `forum`(`type`,
`from`,
`time`,
`user_id`,
`refid`,
`text`)
VALUES(
"m",
"' 
.$from'",
"' 
time() . '",
1,
"' 
$refid .'",
"' 
.mysql_real_escape_string($contents) . '")')==true){
return 
$suc='ok';
}else{
return 
$suc='err';
}
}
/*
--------------------------------------------------------------------------------
end post entry
--------------------------------------------------------------------------------
*/

đây là code insert data
/*kiểm tra bài viết đã có tên trong database hay chưa */
if(check_entry($title)== 'ok'){
/* kiểm tra xem thêm tiêu đề bài viết thành công không */
if(insert_post_title_johncms($title,$refid,$user_id,$from)== 'ok'){
/* lấy id tiêu đề bài viết */
if($id get_id_title($title)){
/* kiểm tra xem có id của bài đã thêm hay không */
if($id != 'err') {
/* kiểm tra nếu thêm bài viết*/
if(insert_post_entry_johncms($contents,$id ,$user_id ,$from) == true){
echo 
'<font color="lime">auto post <b><font color="#0E46A5">' $title '</font></b> thành công....<br />';
echo 
'</font><br />';
/* thì thông báo thành công */
} else {
/* lỗi thì thông báo */
echo '<font color="red">...thêm bài viết <b>'$title '</b> thất bại...<br />';
echo 
'...................</font><br />';
}
} else {
/* không tìm thấy id thì error  */
echo ' lỗi rồi không tìm thấy id<br />';
}
}
} else {
echo 
'post tiêu đề ' $title ' lỗi<br />';
}
} else {
echo 
' đã tồn tai bài viết <b>'$title .'</b><br /> ';
}
}
?>

Copy code

như trên ta đã lấy được nội dung và tiêu đề rồi, bây giờ chỉ việc insert thôi, code trên đây chỉ nhận vào 2 biến tiêu đề và nội dung, ngoài ra để tốt hơn tưc là leech vào đúng chuyên mục thì phiền bạn thêm vào
<?php
$refid 
"42";
$from "";
$user_id "";
$cat_id "253";

cách dùng như sau

<meta charset="utf8" />
<?
$refid "42";
$from "";
$user_id "";
$cat_id "253";
/*----------------*/
function get($url){
$curl curl_init ();
curl_setopt ($curlCURLOPT_URL$url);
curl_setopt ($curlCURLOPT_USERAGENT"Mozilla/17.0");
curl_setopt ($curlCURLOPT_COOKIEJAR'cookie.txt');
curl_setopt ($curlCURLOPT_COOKIEFILE'cookie.txt');
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
curl_setopt ($curlCURLOPT_ENCODING"");
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}
/*----------------*/
function get_ct($data){
preg_match ('#<div\sclass=\"noi-dung-bv\">(.+?)</div>#s',$data,$out);
return 
nl2br(strip_tags($out[1));
}
/*----------------*/
function get_tt($data){
preg_match('#<h1\sclass=\"posttitle\"><center>(.+?)</center></h1>#',$data,$out);
return(
$out[1);
}
function 
get_l($link){
$data get ($link);
preg_match_all ('#<div\sclass=\"listting\">(.+?)</div>#is',$data,$page);
foreach (
$page[0 as $k=>$v) {
preg_match ('#href=\"(.+?)\"#s',$v,$a);
$out[$k = $a[1;
}
return 
$out;
}

$i 1;
while (
$i<=59) {
if (
$i>1$list get_l('http://www.haynhat.com/home/hay/truyen-cuoi/page/' $i);
if (
$i=1$list get_l('http://www.haynhat.com/home/hay/truyen-cuoi/');
foreach (
$list as $u) {
$html get ($u);


/*--------------- lấy tiêu đề và nội dung ----------------------------------*/

$title get_tt ($html);
$contents get_ct ($html);
/*///////////////////////insert/////////////////////////////////////////////*/
/*kiểm tra bài viết đã có tên trong database hay chưa */
if(check_entry($title)== 'ok'){
/* kiểm tra xem thêm tiêu đề bài viết thành công không */
if(insert_post_title_johncms($title,$refid,$user_id,$from)== 'ok'){
/* lấy id tiêu đề bài viết */
if($id get_id_title($title)){
/* kiểm tra xem có id của bài đã thêm hay không */
if($id != 'err') {
/* kiểm tra nếu thêm bài viết*/
if(insert_post_entry_johncms($contents,$id ,$user_id ,$from) == true){
echo 
'<font color="lime">auto post <b><font color="#0E46A5">' $title '</font></b> thành công....<br />';
echo 
'</font><br />';
/* thì thông báo thành công */
} else {
/* lỗi thì thông báo */
echo '<font color="red">...thêm bài viết <b>'$title '</b> thất bại...<br />';
echo 
'...................</font><br />';
}
} else {
/* không tìm thấy id thì error  */
echo ' lỗi rồi không tìm thấy id<br />';
}
}
} else {
echo 
'post tiêu đề ' $title ' lỗi<br />';
}
} else {
echo 
' đã tồn tai bài viết <b>'$title .'</b><br /> ';
}

}
$i ++;
}
?>

Copy code

ok xong rồi đó test coi, test đi coi lôi k vì mình viết ra chứ chưa test đâu, chắc k lỗi đâu [imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img).
Nguồn: haygame.mobi nha.


Chỉnh sửa lúc 2016-03-16 01:04 bởi Pham_loi
Like: 0
Lên trên  Tổng số: 1







Trực Tuyến: Khách: 1
Diễn đàn teen Việt Nam
CopyRight 2014