Mình sẽ hd viết tools leech truyện cho ae và không sử dụng 1 tý curl nào, chỉ có file_get_contents và put_contents, str_replace, strstr rất đơn giản và dễ hiểu. đầu tiên sẽ là phần leech duy nhất 1 trang đầu tiên, ko leech nhiều trang cùng lúc: để leech truyện, trước hết ace phải view mã nguồn, vd ở đây là gocvn.in. Ae vào thử 1 topic truyện view code html, view 2-3 topic và so sánh tìm những điểm giống nhau, vd có những điểm giống nhau như khi đến phần nội dung truyện sẽ đc nằm trong <div class="forumtxt"> đấy nó bao hàm nội dung truyện, sẽ là cơ sở để ae tách riêng cái nội dung đó ra, nhưng khi view ở wap gocvn.in thì có đến 2 cái <div class="forumtxt"> , vậy phải làm sao để nhận biết, ae để ý có duy nhất 1 cái <font size="4" /> ở cạnh nội dung truyện, vậy đây chính là cơ sở để bắt đầu tách truyện, vậy dấu hiệu khi kết thúc truyện là ở đâu????? lại để ý vào phần view code, tìm đến cuối truyện thấy có <br /> là duy nhất, ok vậy đây là dấu hiệu kết thúc truyện, chú ý làm như vậy với 2-3 pages để chắc chắn đúng nhé. Khi có 2 dấu hiệu đó rồi ae có thể tách nội dung ra. Cách tách nội dung: để tách nd chúng ta dùng 2 hàmstrstr và str_replace , thực ra còn nhiều hàm khác cũng có chức năng như 2 hàm kia nhưng ae cứ dùng 2 cái đó đã, về sau tìm hiểu sau. Đầu tiên chúng ta sẽ get nội dung của 1 page muốn leec, vd: $content = file_get_contents('http://gocvn.in/forum/co-ayla-cua-toi-cuc-hay_1262.html'); như vậy source của pages truyện kia nằm trong biến$content . như đã nói trên, dấu hiệu bắt đầu nội dung sẽ là <font size="4" /> , sẽ dùng hàm này: $temp = strstr($content,'<font size="4" />'); hàm trên sẽ cắt toàn bộ nội dung từ đầu đến <font size="4" />, nội dung từ <font size="4" /> đến hết sẽ nằm trong biến$temp . Bây giờ đến lượt tách phần cuối. tách phần cuối sẽ ntn: text $temp1 = strstr($temp,'<br />'); $noidung = str_replace($temp1,'',$temp); giải thích đoạn trên: $temp1 sẽ lấy cắt nội dung từ <br /> đến hết,$noidung sẽ xoá phần thừa sau cùng trong$temp, => $noidung sẽ chứa chọn gói nội dung truyện, vậy nội dung truyện đã nằm ở$noidung . cách tách tiêu đề truyện cũng tương tự như trên, ae có thể tách ra từ cặp thẻ < t i t l e > và save lại vào biến$tieude . Và sau cùng là chèn vào sql cái này phải biết về sql, chúng ta vào myphpadmin trong cp host, ở đây mình sẽ ví dụ về leec truyện cho mã nguồn johncms, bài viết sẽ nằm trong bảng forum. Cội text sẽ chứa nội dung truyện và tiêu đề. Mình sẽ dùng hai lần hàm INSET data vào sql, lần 1 sẽ inset tiêu đề truyện, lần 2 là nội dung. Và chọn chuyên mục để leech. Ae làm như sau:
$cm=mysql_query("SELECT * FROM `forum` WHERE `type`='r'");
while (($res=mysql_fetch_assoc($req))!=false) {
$option .='<option value="' . $res['id'] .'"' . ($id==$res['id'] ?'selected="selected"' :'') .'>' . $res['text'] .'</option>' ."\n";
}
đưa đoạn này vào khung form:
<div class="quote"><font color="green">text</font></div>
<select name="id">' .
'' . $option .'' .
'</select>
dùng POST['id'] để lấy tên chuyên mục, từ đó ta có thể leech đúng trỗ. Cú pháp chèn zô sql đối với mã nguồn johncms sẽ là như sau:
mysql_query("INSERT INTO `forum` SET
`refid` ='$id',
`type` ='t',
`time` ='" . time() ."',
`user_id` ='$user_id',
`from` ='$login',
`text` ='$tieude',
`soft` ='',
`edit` ='',
`curators` =''
") or exit(__LINE__ .':' . mysql_error());
$rid = mysql_insert_id();
$rid = mysql_insert_id();
mysql_query("INSERT INTO `forum` SET
`refid` ='$rid',
`type` ='m',
`time` ='" . time() ."',
`user_id` ='$user_id',
`from` ='$login',
`ip` ='" . core::$ip ."',
`ip_via_proxy` ='" . core::$ip_via_proxy ."',
`soft` ='" . mysql_real_escape_string($agn) ."',
`text` ='" . $noidung ."',
`edit` ='',
`curators` =''
") or exit(__LINE__ .':' . mysql_error());
$postid = mysql_insert_id();