Insane
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 » All shared script » hướng dẫn viết tool leech truyện cho mọi mã nguồn
Xuống dưới » hướng dẫn viết tool leech truyện cho mọi mã nguồn
avatar by Pham_loi Pham_loi
Chức vụ:
21:42:36, 04-07-2015

mình sẽ hd viết tools leec 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 leec duy nhất 1 trang đầu tiên, ko leec nhiều trang cùng lúc:

để leec truyện, trc 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">, div đấ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????? :3
lại để ý vào phần view code, tìm đến cuối truyện thấy có </font></div><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àm strstr 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');
Copy code

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,'</font></div><br />');
$noidung = str_replace($temp1,'',$temp);

Copy code

giải thích đoạn trên:
$temp1 sẽ lấy cắt nội dung từ </font></div><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";
}

Copy code

đưa đoạn này vào khung form:
<select name="id">' .
                '' . $option . '' .
                '</select>

Copy code

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();

Copy code

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&ocirc; Ấy...L&agrave; Của T&ocirc;i! (cực hay)">2</a> <a class="pagenav" href= "/forum/co-ayla-cua-toi- cuc-hay_1262_trang-3.html" title="C&ocirc; Ấy...L&agrave; Của T&ocirc;i! (cực hay)">3</a>...<a class="pagenav" href="/forum/co-ayla-cua-toi- cuc-hay_1262_trang-50.html" title="C&ocirc; Ấy...L&agrave; Của T&ocirc;i! (cực hay)">50</a> <a class="pagenav" href="/forum/co-ayla-cua-toi- cuc-hay_1262_trang-2.html" title="C&ocirc; Ấy...L&agrave; Của T&ocirc;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 :D
để ý 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&ocirc; Ấy...L&agrave; Của T&ocirc;i! (cực hay)">2</a> <a class="pagenav" href= "/forum/co-ayla-cua-toi- cuc-hay_1262_trang-3.html" title="C&ocirc; Ấy...L&agrave; Của T&ocirc;i! (cực hay)">3</a>...<a class="pagenav" href="/forum/co-ayla-cua-toi- cuc-hay_1262_trang-50.html" title="C&ocirc; Ấy...L&agrave; Của T&ocirc;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:
ực hay)">50</a>
Copy code

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à xong :D
Nguồn: http://m.gocvn.org

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