Tạo file RSS 2007-08-30 09:54:49


Đây là đoạn code demo cho việc tạo 1 RSS để chia sẻ thông tin (demo: http://rss.phpbasic.com)
Giả sử ta có 1 table news: id,title,intro,date
Ta sẽ tạo rss như sau:
<?php
header
("content-type: text/xml");
//connect databse
$sql = mysql_query("SELECT * FROM news LIMIT 20");
print
'<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>RSS news</title>
<description>PHP | MySQL | AJAX | Javascript | HTML | CSS</description>
<link>http://rss.phpbasic.com</link>
<copyright>www.phpbasic.com</copyright>
<generator>PHP | MySQL | AJAX | Javascript | HTML | CSS</generator>
<pubDate>2007-08-30</pubDate>
<lastBuildDate>2007-08-30</lastBuildDate>'
;
while(
$rs = mysql_fetch_assoc($sql)){
print
'
<item>
<title>'
.$rs['title'].'</title>
<description>'
.$rs['intro'].'</description>
<link>http://phpbasic.com/?php=article&amp;basic=view&amp;id='
.$rs['id'].'</link>
<pubDate>'
.$rs['date'].'</pubDate>
</item>
'
;
}
print
'
</channel>
</rss>
'
;
?>

Tra loi 25 comment(s) TG 2007-08-30 09:54:49

cocbay 2007-08-30 11:29:56

Đơn giản vậy mà nghĩ không ra, lo chui vào mấy cái lớp cho rắc rối.
Cách này làm thủ công, cảm ơn nhe.

@cocbay

hocnua 2007-10-15 02:57:30

TG ơi khi hiển thị dữ liệu nên trình duyệt thì bị lỗi font mặc dù đã làm y nguyên như của TG

@hocnua

Ga` 2008-01-02 12:48:18

Thế xin cho hỏi có thể dùng cho HTML được ko? và dùng như thế nào? Em mới tập làm web nên chỉ biết HTML thôi à.

@Ga`

TG 2008-01-03 05:36:15

RSS thì phải dùng dùng XML thôi, còn cách tạo thì cũng có thể áp dụng cho HTML luôn

@TG

Ga` 2008-01-03 10:02:31

À vâng, ví dụ em làm một file phim.html gồm danh sách link các bộ phim, em muốn mỗi khi thêm một link cho một bộ phim nào đó vào file này thì cái RSS này cũng tự động cập nhật thêm link mới này
Vậy mong bác TG chỉ rõ. Em xin chân thành cảm ơn!

@Ga`

TG 2008-01-04 01:06:37

Thì khi thêm 1 link, sẽ lưu vào databse sau đó chỉ việc truy xuất ra và tạo thành RSS như vậy sẽ lấy được những link mới  cập nhật thôi

@TG

Ga` 2008-01-04 02:27:18

Vậy anh TG làm ơn bớt chút time rồi làm một cái VD nho nhỏ để em tham khảo dc ko ạ? Em vẫn chưa hiểu rõ bản chất của vấn đề này lắm. Thanks!

@Ga`

TG 2008-01-05 12:50:55

Bạn để ý trên đoạn code trên, dữ liệu được lấy từ database thông qua câu này:
$sql = mysql_query("SELECT * FROM news LIMIT 20");
Như vậy, về phần dữ liệu bạn phải insert dữ liệu mới nhất vào database,còn trong đoạn code này sẽ lấy dữ liệu in ra, 1 trang web binh thường( cách code hằng này) là trả dữ liệu về dạng HTML hết đó

@TG

Ga` 2008-01-05 07:12:13

Okie rui`. Thanks bro TG nhieu` lam !

@Ga`

gaulucky92 2008-02-22 11:32:56

Lấy dữ liệu mới nhất thì dùng cái ORDER BY DESC:
SELECT * FROM news LIMIT 20 ORDER BY id DESC


À GT cho mình hỏi chút, giữa mysql_fetch_assoc() và mysql_fetch_array() có gì khác nhau ko? Cả 2 cái đều là xuất nội dung trong db ra... Lâu nay mình toàn xài fetch_array à :P

@gaulucky92

TG 2008-02-22 12:56:30

@TG

GnuhNguyen 2008-03-15 10:28:50

Code này hay quá, nhưng tớ nghĩ là nội dung in ra nên save vào thành file chứ k nên echo luôn trên browser ^^ thật đấy ^^

@GnuhNguyen

Quan Tran Anh 2008-03-15 10:44:00

Đây không phải là echo ra browser, đơn giản chỉ là trả về 1 luồng dữ liệu có kiểu là text/xml, còn bạn dùng browser để request đến thì nó sẽ mặc định hiển thị lên thôi, save về vẫn đựoc là dạng XML vậy.
Tuy nhiên, do đặc thù của RSS là có nhiều người cùng truy xuất 1 lúc nên code này tốt hơn là chỉ dùng để save nội dung ra 1 tập tin như rss.xml chẳng hạn, còn đâu nếu người ta muốn xài rss của mình thì sẽ vào theo đg` link: http://host.com/rss.xml. Nếu ko với các site lớn lớn 1 chút sẽ rất ko tối ưu

@Quan Tran Anh

scvn 2008-08-21 07:40:13

nếu làm thế này google nó tìm đc mình ko mấy bác

@scvn

scvn 2008-08-21 07:43:00

em có code xtre = ajax giờ ko biết tách ra làm sao :( chỉ còn nước là làm theo 1 hướng khác để google tìm thấy dữ liệu trong site . Bác nào biết thì chỉ em nhé hoặc có thể chỉ em cách tách ajax ra khỏi xtremedia cũng đc càng tốt :)

@scvn

GnuhNguyen 2009-04-06 01:58:17

Tuy nhiên, do đặc thù của RSS là có nhiều người cùng truy xuất 1 lúc nên code này tốt hơn là chỉ dùng để save nội dung ra 1 tập tin như rss.xml chẳng hạn, còn đâu nếu người ta muốn xài rss của mình thì sẽ vào theo đg` link: http://host.com/rss.xml.

sặc thì ý tớ là thế này mà... ạch, nói không rõ thui, nhiều không vào rss kiểu echo này sẽ không hiện ra cái j cả, nên vì thế tớ mới nói là save thành file

@GnuhNguyen

GnuhNguyen 2009-04-06 02:06:41

Nếu không save ra file thì các máy đọc Rss trên web ví dụ Feeds của 360 đọc sẽ rất hay bị lỗi, tốt nhất là save ra file chứ không echo ra Browser!

@GnuhNguyen

ducanh 2010-08-02 23:44:39

@GnuhNguyen: chào các anh, em đã lam đc Rss bằng đoạn code trên, nhưng em đang phân vân với đoạn code trên thì xuất ra file .xml thì như nào, chứ để người khác xem Rss trực tiếp thì ko hay mà họ phải xem qua .xml ví dụ rss.xml
hi vọng sớm dc giúp đỡ.
Chân thành cảm ơn.

@ducanh

TG 2010-08-03 06:51:58


@ducanh: Thay vì bạn print ra thì bạn cho nó vào 1 chuỗi $str
sau đó ghi chuỗi đó ra file
<?php

$fp
= open('rss.xml','w'){
fwrite($fp,$str);
}
fclose($fp);
?>

@TG

Mrkip 2010-09-11 18:09:51

@TG: tớ muốn tạo 1 file rss như vậy cho forum [url=http://goccongnghe.org]goccongnghe.org[/url]mà chẳng biết sao, nản thật.

@Mrkip

gdfg 2011-04-05 05:27:25

dfgdf

@gdfg

huedt 2011-04-14 18:06:55


Tác giả hay các anh pro cho em hỏi em đã làm sao cái gì trong phần item của file trên mà nó chỉ hiển thị được phần trên thôi còn phần item thì không truy xuất được từ cơ sở dữ liệu ạ?em là thế này:
<?php require_once('Connections/hue.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php
header
("content-type: text/xml");
//connect databse
$sql1 = mysql_query("SELECT * FROM tin LIMIT 20");
print
'<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>RSS news</title>
<description>PHP | MySQL | AJAX | Javascript | HTML | CSS</description>
<link>http://localhost/hue</link>
<copyright>www.phpbasic.com</copyright>
<generator>PHP | MySQL | AJAX | Javascript | HTML | CSS</generator>
<pubDate>2007-08-30</pubDate>
<lastBuildDate>2007-08-30</lastBuildDate>'
;
while(
$rs = mysql_fetch_assoc($sql1)){
print
'
<item>
<title>'
.$rs['ten'].'</title>
<description>'
.$rs['tomtat'].'</description>
<link>http://localhost/hue/noidungtin.php?idtin='
.$rs['idtin'].'</link>
<pubDate>'
.$rs['ngay'].'<pubDate>
</item>
'
;
}
print
'
</channel>
</rss>
'
;
?>

@huedt

Ngọc Bảo 2011-04-14 18:41:50

Cái này chỉ là dạng thô thôi chứ chưa xử lý hết đâu nhất là trong phần <Description>
các bạn thử cho mã HTML vào xem.
Rss chuẩn tuân thủ rất nhiều điều kiện.
nếu trong source còn xuất hiện những ký tự mã ansi Hex (có thể do copy từ word dán vào rùi lưu vào cơ sở dử liệu ví dụ '\x80'=€ ) thì chết ngay lập tức

ở thẻ <description> mình thường xử lý đơn giản tí
$description=strip_tags(html_entity_decode(stripslashes($row['description'])),'<font><a><b><strong><i><em><u><li><ul><dl><dt><dd><ol><table><caption><label><option><select><sup><sub><strike><tr><td><th><tt><pre><img><p><span><div><h1><h2><h3><h4><h5><h6><br><hr>');

có 2 chuyện phải làm đổi mã thành htmlentities và xoá những tag mà RSS kg cho phép (như script , iframe....)

vẫn còn vấn đề xử lý các mã chìm chưa đổi dạng cái này thì nhức đầu lắm
và Well-Formed HTML

@Ngọc Bảo

Ngọc Bảo 2011-04-14 18:50:08


Nguyên cả nội dung
<?php
header
('content-type: application/rss+xml; charset: utf-8');
include(
"include/config.php");
echo
"<?xml version=\"1.0\" encoding=\"utf-8\"?>
"
;
?>
<rss version="2.0" >
<channel>
<title> Web developpeur</title>
<description> Lecteur RSS </description>
<lastBuildDate><?=date("D, j M Y",mktime(0, 0, 0, date("m") , date("d")-1, date("Y")))?> 10:30:30 +0100</lastBuildDate>
<link>http://tensite.com/</link>
<language>en</language>
<?php
$sql
= "SELECT * FROM `contenu` LIMIT 0 , 15";// (pour Les articles)
$result = $mysqli->query($sql);
while(
$row = $result->fetch_assoc()) {
$link=$row['guid'];
$description=strip_tags(html_entity_decode(stripslashes($row['description'])),'<font><a><b><strong><i><em><u><li><ul><dl><dt><dd><ol><table><caption><label><option><select><sup><sub><strike><tr><td><th><tt><pre><img><p><span><div><h1><h2><h3><h4><h5><h6><br><hr>');

?>
<item>
<title><?=strip_tags ( stripslashes ( html_entity_decode($row['title'])))?></title>
<description><?=htmlentities($description)?> </description>
<link><?=$link?></link>
<guid><?=$link?></guid>
<pubDate><?=date("D, j M Y H:i:s")?> +0100</pubDate>
</item>
<?php
}
?>
</channel>
</rss>

@Ngọc Bảo

The seeker 2011-06-09 15:12:52


Ko cần thiết phải khử thẻ HTML các bạn ạ (Tất nhiên là phải loại các thẻ như script, iframe, meta...).

<description><![CDATA[<?php echo $description ?>]]></description>

@The seeker

Reply