Nội quy chuyên mục: 1. [url=http//nukeviet.vn/phpbb/search.php3szae2wm]Tìm kiếm trước khi đặt câu hỏi.[/url3szae2wm]
2. Đặt tên bài viết/ câu hỏi/ thắc mắc rõ ràng, gắn gọn nhưng phải đủ ý, không được chung chung.
3. Cung cấp chi tiết các thông tin về lỗi, các phiên bản hệ thống, module, nơi bị lỗi ... và hình ảnh chụp (nếu có).
#37612 gửi bởi kingscript
Ngày 29 Tháng 06 2009 , 04:50
Mình muốn trang web mình cập nhật thông tin tự động từ một số trang báo thì làm sao vậy các bạn ?
Lấy RSS từ các trang khác đưa vào trong block hả hay trong themes mình chưa thử vụ này :( ai biết xin chỉ giúp :-/
#37708 gửi bởi kingscript
Ngày 30 Tháng 06 2009 , 03:45
Mình thử dùng cho website báo nông nghiệp chẳng hạn thì nó hiển thị tin lên trang chủ mình không được ok giống như mục tin tức nó hiện một list dòng ghi tiêu đề các bài báo có links đến báo nông nghiệp vậy thôi không hình ảnh minh họa mẫu giống như trên báo.
#37909 gửi bởi kingscript
Ngày 02 Tháng 07 2009 , 23:12
Theo mình biết thì có 2 cách để lấy tin tức tự động từ trang báo.
1. Lấy thông tin tiêu đề nhưng khi truy cập thì sẽ vào thẳng trang báo cần lấy.
2. Là chúng ta update nó vào database luôn như vậy khi lấy tin sẽ không chuyển sang trang báo khác. Mà hiện thị trên trang web của mình luôn. Việc này cần viết một đoạn code nhỏ và cắt bỏ tinh chỉnh lại phần tin tức cần lấy để trình bày lên web của mình.
Ai có ý kiến xin góp ý xíu !!!!
#37919 gửi bởi ntanh2605
Ngày 03 Tháng 07 2009 , 01:38
Bạn có thể sử dụng phần code đã có sẳn từ diễn đàn tên là autonew hay cái gì đấy quên rồi :D và sửa lại cho phù hợp với trang web cần lấy thông tin. Với điều kiện host của bạn phải hỗ trợ hàm file_get_contents.
Mình gửi luôn ví dụ bên dưới, bạn có thể đown về test thử. Tải file dưới về giải nén được thư mục có 4 file con (index.php, news.php, tudong.class.php, và news-russia.php) , copy thư mục vào thư mục modules, vào ACP active.
Để lấy tin từ 1 trang khác bạn phải view source code html của trang đó. Tìm đến dòng code bắt đầu của nội dung cần copy. Chú ý dòng code này phải là unique, có nghĩa là tránh dùng dòng code lập lại nhiều lần trong page.
Trước hết cùng tìm hiểu về nhiệm vụ của các file.
- File index.php làm nhiệm vụ dẫn file cho module. Tại file này không cần thay đổi gì.
- File news.php có chức năng khai báo đường dẫn đến site cần get thông tin. Ở đây mình get thông tin từ trang http://news-russia.info/. Cho nên set $item = 6.
Mã: Chọn hết
$item = 6;
$item = empty($_GET['item'])? $item : $_GET['item'];
if ($url == '') {
switch ($item) {
case 1:
$default = "http://tuoitre.com.vn/Tianyon/";
$file = "tuoitre.php";
break;
case 2:
$default = "http://www.thanhnien.com.vn/pages/default.aspx";
$file = "thanhnien.php";
break;
case 3:
$default = "http://dantri.com.vn/news/";
$file = "dantri.php";
break;
case 4:
$default = "http://www.tienphong.vn/Tianyon/Index.aspx?ChannelID=71";
$file = "tienphong.php";
break;
case 5:
$default = "http://vnexpress.net/GL/Home/";
$file = "vnexpress.php";
break;
case 6:
$default = "http://news-russia.info/";
$file = "news-russia.php";
break;
default:
$default = "http://tuoitre.com.vn/Tianyon/";
$file = "tuoitre.php";
break;
}
//end of if
}

- File tudong.class là các hàm php cần thiết để lấy thông tin từ site khác.
- File new-russia.php là file cần sửa đổi cho phù hợp với trang thông tin bạn cần lấy.

Bg cùng xem ví dụ nhé. Mở file new-russia bạn sẽ thấy nội dung như thế này
Mã: Chọn hết
<?php
/*
* @Program: NukeViet CMS v2.0 RC1
* @File name: Module AutoNews
* @Version: 2.0
* @Date: 01.05.2009
* @Website: www.nukeviet.vn
* @Copyright: (C) 2009
* @License: http://opensource.org/licenses/gpl-license.php GNU Public License
*/

if ( ! defined('NV_SYSTEM') )
{
die( "You can't access this file directly..." );
}
$path = $base['path'];
$content = readonline($url);
echo $content;
session_start();

function readonline ($url) {
global $news,$path,$bgcolor,$bgcolor1,$bgcolor2,$bgcolor3;

$news->start_transfer();
$news->getcontent($content);
$oldicon1='bgcolor="#C12E24"><img src="/templates/news/images/picture_left_2.gif"';
$oldicon2='bgcolor="#C12E24"><img src="/templates/news/images/picture_right_2.gif"';
$oldicon3='style="BORDER-bottom: #C12E24 3px solid; PADDING-bottom: 1px">';
$oldbground='background="/templates/news/images/picture_center_2.gif" class="category" bgcolor="#C12E24">';
$oldlink4rum='bgcolor="#ece9d8" colspan=2> <a href="http://news-russia.info/forum/"';
$oldbgcolor = 'bgcolor="#f4faf8"';
$oldtableborder = 'style="BORDER-left: #dcdcdc 1px solid;PADDING-left: 1px; BORDER-right: #dcdcdc 1px solid;PADDING-right: 1px;BORDER-bottom: #dcdcdc 1px solid;PADDING-bottom: 1px"> ';
//config new backgound
$newbground = "bgcolor=".$bgcolor1.">&nbsp;";
$newicon1='bgcolor='.$bgcolor1.'><img src="http://www.net4all.ru/portal/images/modules/News/go.gif"';
$newicon2='><a href';
$newlink4rum='colspan=2><a';
$newbgcolor = 'bgcolor='.$bgcolor1;
$newtableborder = 'style="BORDER-bottom: '.$bgcolor3.' 1px solid;PADDING-bottom: 1px">';
if ( substr_count($path,"/")<2 ) {
// index page
// echo "chay index";
preg_match_all('/<TABLE CELLSPACING="5" CELLPADDING="0" width="500" height="100%" valign="top" align="left">(.*?)<span id=\'dle-info\'><\/span>/s',$content,$matches,PREG_SET_ORDER);
$content = '';

foreach ($matches as $match) {
//echo 1;
$match[1]=$match[1];
$match[1] = str_replace($oldicon1 ,$newicon1, $match[1]);
$match[1] = str_replace($oldicon2 ,$newicon2, $match[1]);
$match[1] = str_replace($oldbgcolor ,$newbgcolor, $match[1]);
$match[1] = str_replace($oldicon3 ,'>', $match[1]);
$match[1] = str_replace($oldbground , $newbground , $match[1]);
$match[1] = str_replace($oldtableborder , $newtableborder , $match[1]);
$match[1] = str_replace("495" ,"100%" , $match[1]);
$match[1] = str_replace($oldlink4rum ,$newlink4rum , $match[1]);
$content .= '<table width="100%" border="0" cellpadding="0" cellspacing="0">'.$match[1].'<td height="0" colspan="2" valign="top"></td></tr></table>';
}
// ----------------------------------------
} elseif (( substr_count($path,"/") ==2 ) and (substr_count($path,".") >0 )) {
// article
//echo "chay art";
preg_match_all('/<TD width="495" height="100%" align="left" valign="top">(.*?)<table width="475" border="0" cellpadding="0" cellspacing="0">/s',$content,$matches,PREG_SET_ORDER);
$content = '';
$tmp1 = 'color: #ffffff;" background="/templates/news/images/picture_center_2.gif" class="category" bgcolor="#C12E24">';
$newtmp1 = 'color: '.$bgcolor3.';" class="category">&nbsp;';
foreach ($matches as $match) {
$match[1]=$match[1];
$match[1] = str_replace($oldicon1 ,$newicon1, $match[1]);
$match[1] = str_replace($oldicon2 ,$newicon2, $match[1]);
$match[1] = str_replace($oldbgcolor ,$newbgcolor, $match[1]);
$match[1] = str_replace($oldicon3 ,'>', $match[1]);
$match[1] = str_replace($tmp1 , $newtmp1 , $match[1]);
$match[1] = str_replace("FFFFFF" ,$bgcolor3 , $match[1]);
$match[1] = str_replace("495" ,"100%" , $match[1]);
$match[1] = str_replace($oldlink4rum ,$newlink4rum , $match[1]);
$content .= '<table width="100%" border="0" cellpadding="0" cellspacing="0">'.$match[1].'<td height="0" colspan="2" valign="top"></td></tr></table>';
$content .= '<table width="100%" border="0" cellpadding="0" cellspacing="0">';
$content .= "<tr><td height=1></td></tr>";
$content .= "<tr><td height=\"0\" colspan=\"2\" valign=\"top\">";
$content .= "<center><a href=\"".$_SESSION['back']."\">View More</a></center>";
$content .= "</td></tr></table>";
}
// ----------------------------------------
} else {
// channel
// echo "chay channel";
preg_match_all('/<TABLE CELLSPACING="5" CELLPADDING="0" width="500" height="100%" valign="top" align="left">(.*?)<span id=\'dle-info\'><\/span>/s',$content,$matches,PREG_SET_ORDER);
$content = '';
foreach ($matches as $match) {
$match[1]=$match[1];
$match[1] = str_replace($oldicon1 ,$newicon1, $match[1]);
$match[1] = str_replace($oldicon2 ,$newicon2, $match[1]);
$match[1] = str_replace($oldbgcolor ,$newbgcolor, $match[1]);
$match[1] = str_replace($oldicon3 ,'>', $match[1]);
$match[1] = str_replace($oldbground , $newbground , $match[1]);
$match[1] = str_replace("500" ,"100%" , $match[1]);
$match[1] = str_replace("495" ,"100%" , $match[1]);
$match[1] = str_replace($oldlink4rum ,$newlink4rum , $match[1]);
$content .= '<table width="100%" border="0" cellpadding="0" cellspacing="0">'.$match[1].'<td height="0" colspan="2" valign="top"></td></tr></table>';
}

}
// ----------------------------------------
$news->updatecontent($content);
$news->modify_urls();
$news->getcontent($content);

return win2utf($content);
}


?>

Bắt đầu cho tất cả các file dạng này bằng
Mã: Chọn hết
<?php
/*
* @Program: NukeViet CMS v2.0 RC1
* @File name: Module AutoNews
* @Version: 2.0
* @Date: 01.05.2009
* @Website: www.nukeviet.vn
* @Copyright: (C) 2009
* @License: http://opensource.org/licenses/gpl-license.php GNU Public License
*/

if ( ! defined('NV_SYSTEM') )
{
die( "You can't access this file directly..." );
}
$path = $base['path'];
$content = readonline($url);
echo $content;
session_start();

function readonline ($url) {
global $news,$path,$bgcolor,$bgcolor1,$bgcolor2,$bgcolor3;

$news->start_transfer();
$news->getcontent($content);

chắc không có gì phải nói nhiều về đoạn này vì đây chỉ là phần khai báo bảo mật và gọi class để bắt đầu lấy thông tin.
Hãy tìm hiểu đoạn code tiếp theo
Mã: Chọn hết
$oldicon1='bgcolor="#C12E24"><img src="/templates/news/images/picture_left_2.gif"';
$oldicon2='bgcolor="#C12E24"><img src="/templates/news/images/picture_right_2.gif"';
$oldicon3='style="BORDER-bottom: #C12E24 3px solid; PADDING-bottom: 1px">';
$oldbground='background="/templates/news/images/picture_center_2.gif" class="category" bgcolor="#C12E24">';
$oldlink4rum='bgcolor="#ece9d8" colspan=2> <a href="http://news-russia.info/forum/"';
$oldbgcolor = 'bgcolor="#f4faf8"';
$oldtableborder = 'style="BORDER-left: #dcdcdc 1px solid;PADDING-left: 1px; BORDER-right: #dcdcdc 1px solid;PADDING-right: 1px;BORDER-bottom: #dcdcdc 1px solid;PADDING-bottom: 1px"> ';
//config new backgound
$newbground = "bgcolor=".$bgcolor1.">&nbsp;";
$newicon1='bgcolor='.$bgcolor1.'><img src="http://www.net4all.ru/portal/images/modules/News/go.gif"';
$newicon2='><a href';
$newlink4rum='colspan=2><a';
$newbgcolor = 'bgcolor='.$bgcolor1;
$newtableborder = 'style="BORDER-bottom: '.$bgcolor3.' 1px solid;PADDING-bottom: 1px">';

do trang của mình lấy thông tin họ trình bày không hợp với theme mình dùng. Những biến bắt đầu bằng $old**** là code khi mình view source của họ và biến $new*** là code mình thay thế cho những phần đó. Từ phần này bạn có thể remove link, ảnh, icon của site đó.
Tiếp theo đó phần code
Mã: Chọn hết
if ( substr_count($path,"/")<2 ) {
// index page
// echo "chay index";
preg_match_all('/<TABLE CELLSPACING="5" CELLPADDING="0" width="500" height="100%" valign="top" align="left">(.*?)<span id=\'dle-info\'><\/span>/s',$content,$matches,PREG_SET_ORDER);
$content = '';

foreach ($matches as $match) {
//echo 1;
$match[1]=$match[1];
$match[1] = str_replace($oldicon1 ,$newicon1, $match[1]);
$match[1] = str_replace($oldicon2 ,$newicon2, $match[1]);
$match[1] = str_replace($oldbgcolor ,$newbgcolor, $match[1]);
$match[1] = str_replace($oldicon3 ,'>', $match[1]);
$match[1] = str_replace($oldbground , $newbground , $match[1]);
$match[1] = str_replace($oldtableborder , $newtableborder , $match[1]);
$match[1] = str_replace("495" ,"100%" , $match[1]);
$match[1] = str_replace($oldlink4rum ,$newlink4rum , $match[1]);
$content .= '<table width="100%" border="0" cellpadding="0" cellspacing="0">'.$match[1].'<td height="0" colspan="2" valign="top"></td></tr></table>';
}
// ----------------------------------------
}

ở đây hãy chú ý biến path ngay từ đầu file được khai báo
Mã: Chọn hết
$path = $base['path'];
có nghĩa là lấy đúng đường dẫn mà bạn nhập vào file news.php. Và đoạn
Mã: Chọn hết
[code]if ( substr_count($path,"/")<2 ) [/code]
do đường dẫn đến trang chủ là http://news-russia.info/. Nếu đường dẫn đến trang chủ là http://news-russia.info/ABC/ thì bạn phải cho <3 và cứ thế tăng dần hoặc giảm dần cho đúng.
Mã: Chọn hết
preg_match_all('/<TABLE CELLSPACING="5" CELLPADDING="0" width="500" height="100%" valign="top" align="left">(.*?)<span id=\'dle-info\'><\/span>/s',$content,$matches,PREG_SET_ORDER);
phần code trong ngoặc '***' là đoạn bạn phải tự xác định đâu là đoạn mở đầu của phần nội dung cần copy. Hãy view source code từ trang chủ của họ và cố gắng lấy bắt đầu từ những tag div hoặc table nhé.
Tiếp theo đoạn
Mã: Chọn hết
foreach ($matches as $match) {
//echo 1;
$match[1]=$match[1];
$match[1] = str_replace($oldicon1 ,$newicon1, $match[1]);
$match[1] = str_replace($oldicon2 ,$newicon2, $match[1]);
$match[1] = str_replace($oldbgcolor ,$newbgcolor, $match[1]);
$match[1] = str_replace($oldicon3 ,'>', $match[1]);
$match[1] = str_replace($oldbground , $newbground , $match[1]);
$match[1] = str_replace($oldtableborder , $newtableborder , $match[1]);
$match[1] = str_replace("495" ,"100%" , $match[1]);
$match[1] = str_replace($oldlink4rum ,$newlink4rum , $match[1]);
$content .= '<table width="100%" border="0" cellpadding="0" cellspacing="0">'.$match[1].'<td height="0" colspan="2" valign="top"></td></tr></table>';

Là phần lọc nội dung như đã nói ở trên, thay thế icon, link của trang đó bằng của mình.

Tiếp theo bạn phải view phần tin chi tiết và tìm đoạn code bắt đầu thông tin tương tự như trên
thay thế vào pre_match_all bên dưới
Mã: Chọn hết
} elseif (( substr_count($path,"/") ==2 ) and (substr_count($path,".") >0 )) {
// article
//echo "chay art";
preg_match_all('/<TD width="495" height="100%" align="left" valign="top">(.*?)<table width="475" border="0" cellpadding="0" cellspacing="0">/s',$content,$matches,PREG_SET_ORDER);

Và làm tương tự nếu như trang tin đó có phân tin theo chủ đề, hãy mở chủ đề bất kì và tìm đoạn unique code tương tự thay vào bên dưới
Mã: Chọn hết
} else {
// channel
// echo "chay channel";
preg_match_all('/<TABLE CELLSPACING="5" CELLPADDING="0" width="500" height="100%" valign="top" align="left">(.*?)<span id=\'dle-info\'><\/span>/s',$content,$matches,PREG_SET_ORDER);
$content = '';
foreach ($matches as $match) {
$match[1]=$match[1];
$match[1] = str_replace($oldicon1 ,$newicon1, $match[1]);
$match[1] = str_replace($oldicon2 ,$newicon2, $match[1]);
$match[1] = str_replace($oldbgcolor ,$newbgcolor, $match[1]);
$match[1] = str_replace($oldicon3 ,'>', $match[1]);
$match[1] = str_replace($oldbground , $newbground , $match[1]);
$match[1] = str_replace("500" ,"100%" , $match[1]);
$match[1] = str_replace("495" ,"100%" , $match[1]);
$match[1] = str_replace($oldlink4rum ,$newlink4rum , $match[1]);
$content .= '<table width="100%" border="0" cellpadding="0" cellspacing="0">'.$match[1].'<td height="0" colspan="2" valign="top"></td></tr></table>';
}

}


Vậy là get được thông tin ở trang chủ, chủ đề, và nội dung chi tiết :D
Thử xem thế nào nhé! Chúc thành công!

PS: ở cuối file news-russia có dòng
Mã: Chọn hết
return win2utf($content);

Hàm win2utf là do trang get tin không ở định dạng unicode cho nên mình có thêm hàm này vào để xử lý text. Nếu không cần thiết bạn chỉ cần return $content thôi là được.
Đính kèm
(4.87 KB) Đã tải về 76 lần

Nếu bạn là người hay hỏi hơn hay học ! Đọc tiếp bên dưới ... Hỏi .. hỏi nữa .. hỏi mãi ... hỏi riết ai cũng "quải" !
#39274 gửi bởi yeunukeviet
Ngày 19 Tháng 07 2009 , 21:50
laser đã viết:Vào Admin Control Panel/ Blocks/ Tạo block mới ==> Chọn nguồn cấp là link đến file RSS. Save lại là xong.


Laser có thể hướng dẫn kỹ hơn đươc không? Thực sự mình không hiểu chọn nguồn cấp như thế nào. Bạn nào có thể hướng dẫn cụ thể cho vnexpress hay tuoitre... không??

http://nguoiviet.de