$temp = strstr($content,'<font size="4" />;
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:
$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ẻ <title> 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();trong đó $id là id của chuyên mục, $rid là id của tiêu đề. mấy cái $login, $user_id tự tìm hiểu dựa vào cột trong sql.
Trong khi chèn nếu lỗi ký tự khi hiện ra có thể dùng html_entity_decode...
Vậy là xong phần leech 1 trang truyện. Và sau đây là cách leech truyện bị phân ra nhiều trang. Cái này cũng phải view source. Tìm dấu hiệu có phân trang, ở đây vd trang gocvn. dấu hiệu có phân
trang sẽ là <a class="pagenav". Ta dùng if else để xử lý cho phù hợp. Nếu tồn tại <a class="pagenav" thì lúc này leech truyện có phân trang, ta phải xử lý riêng, ngược lại nếu ko có thì chả có phân trang, ta chỉ cần dùng câu lệnh mình nói trên để get nội dung như thường.
bây giờ nói về trường hợp có phân trang.
Vd page: http://gocvn.in/forum/co-ayla-cua-toi-cuc-
hay_1262.html
topic này đc phân thành 50 trang.
Cái cốt lõi ở đây là ta phải lấy đc số 50. để làm đc điều này ta bắt đầu dùng strstr cắt từ đoạn này: </font> 1</b> <a class="pagenav" đến hết. Xong ta cắt tiếp từ đoạn </center></div><br /><div class="mainblok"> đến hết, rồi dùng str_replace, xử lý như trên đầu. Chủ yếu là lấy chọn đoạn source này lưu vào biến $get:</font> 1</b> <a class="pagenav" href="/ forum/co-ayla-cua-toi-cuc-
hay_1262_trang-2.html" title="Cô Ấy...Là Của Tôi! (cực hay)">2</a> <a class="pagenav" href= "/forum/co-ayla-cua-toi- cuc-hay_1262_trang-3.html" title="Cô Ấy...Là Của Tôi! (cực hay)">3</a>...<a class="pagenav" href="/forum/co-ayla-cua-toi- cuc-hay_1262_trang-50.html" title="Cô Ấy...Là Của Tôi! (cực hay)">50</a> <a class="pagenav" href="/forum/co-ayla-cua-toi- cuc-hay_1262_trang-2.html" title="Cô Ấy...Là Của Tôi! (cực hay)">»</a>
Copy code
bây giờ dùng 1 vài thuật toán nho nhỏ để tách số 50 kia ra lưu vào 1 biến
để ý thẻ <a> chứa » luôn có 1 giá trị là trang-2 khi vào topic. Vì thế ta sẽ làm ntn:$ul = str_replace('http://gocvn.in','',$url);
$ul2 = str_replace('.html','_trang-2.html',$ul);
$view = '<a class="pagenav" href="'.$ul2.'" title="'.$tieude.'">»</a>';
$ok = str_replace($view,'',$get);
Copy code
trong đó $url là url cần leech, $tieude ở trên.
Vậy lúc này biến $ok sẽ có giá trị:</font> 1</b> <a class="pagenav" href="/ forum/co-ayla-cua-toi-cuc-
hay_1262_trang-2.html" title="Cô Ấy...Là Của Tôi! (cực hay)">2</a> <a class="pagenav" href= "/forum/co-ayla-cua-toi- cuc-hay_1262_trang-3.html" title="Cô Ấy...Là Của Tôi! (cực hay)">3</a>...<a class="pagenav" href="/forum/co-ayla-cua-toi- cuc-hay_1262_trang-50.html" title="Cô Ấy...Là Của Tôi! (cực hay)">50</a>
Copy code
vâng, số 50 sát đít kia, lấy ra quá dễ phải ko?
Đo độ dài của chuỗi trong biến $ok, lấy độ dài đó trừ đi khoảng 15 và lưu vào biến $cdnew.
Chuỗi trên dài 436 ký tự, trừ 15 => $cdnew = 421
ta dùng hàm mb_substr để cắt chuỗi như sau:
$cd = mb_substr($ok,$cdnew,15);
lúc này $cd sẽ đc như sau:
tách số 50 ra:$ok1 = str_replace('</a>','',$cd);
$tach = strstr($ok1,>);
$so50 = str_replace('>','',$tach);
Copy code
đã có số 50 trong $so50
lúc này dùng vòng for:for($i=1;$i<=$so50;$i++){
$urlnew = str_replace('.html','_trang-'.$i.'.html',$url);
$contentnew = file_get_contents($urlnew);
...code đoạn này làm y trang bên trên
}
Copy code
như vậy là xongNguồn: http://m.gocvn.org
Tags:
Johncms