09/10/2018, 23:54
Rss - Ajax - Tự động lấy tin
Tự động cập nhật tin tức bằng RSS và Load tin tức bằng Ajax
Tham khảo http://www.tintrongnuoc.net
1. Tool Lấy tin tức bằng công nghệ RSS (Application run 24/7)
2. Website hiện tin tức bằng công nghệ Ajax
Source code
1 Tool lấy tin tức
a. Database (MSSQL)
Cấu trúc Database gồm 3 Table (NHOMTIN, NGUONLINK_RSS,TINTUC)
NHOMTIN(Idnhom,TenNhom) vd (1,Thế giới);(2,Xã hội)....
NGUONLINK_RSS(idnguon, TenNguon, Link) vd(1,Tuoi Tre,linkrss)
TinTuc (idtin,tieude,tomtat,noidung,images)
b. Source Code
///Function lấy RSS của các link (vd LinkRSS của Tuổi trẻ mục tin thế giới)
http://www.tuoitre.com.vn/tianyon/Rs...px?ChannelID=2
Imports System.Xml.XPath
Public Sub GetFeed(ByVal RSSURL As String)
Try
' Bring back the Feed
Dim doc As New XPathDocument(RSSURL)
Dim nav As XPathNavigator = doc.CreateNavigator()
Dim iter As XPathNodeIterator = nav.Select("/rss/channel/item")
' Loop through the nodes
While iter.MoveNext()
' Get the data we need from the node
ProcessNode(iter.Current)
End While
Catch ex As Exception
Console.WriteLine(ex.Message.ToString())
End Try
End Sub
Sub ProcessNode(ByVal lstNav As XPathNavigator)
Dim rssTitle As String = "title"
Dim rssLink As String = "link"
Dim rssDescription As String = "description"
Dim rsspubDate As String = "pubDate"
' Get the child nodes
Dim iterNews As XPathNodeIterator = lstNav.SelectDescendants(XPathNodeType.Element, False)
' Loop through the child nodes
While iterNews.MoveNext()
' Save the current Name
Dim rssName As String = iterNews.Current.Name
' Is this the title?
If rssName.ToUpper() = rssTitle.ToUpper() Then
stitle = iterNews.Current.Value
End If
' Is this the Link?
If rssName.ToUpper() = rssLink.ToUpper() Then
link = iterNews.Current.Value
End If
' Is this the Description?
If rssName.ToUpper() = rssDescription.ToUpper() Then
description = iterNews.Current.Value
End If
If rssName.ToUpper() = rsspubDate.ToUpper Then
pubdate = iterNews.Current.Value
End If
If rssName.ToUpper = rsssource.ToUpper Then
source = iterNews.Current.Value
End If
End While
'them vao co so du lieu
insertNews(stitle, description, link, pubdate)
End Sub
'Mình chỉ tóm tắt source code thôi nhé , các bạn tự vận dụng cho chính chương trình của các bạn
'/////////////CÁCH LẤY TIN CHI TIẾT NỘI DUNG CỦA MỘT TIN TỨC
Không biết vì lý do gì mà các trang tin tức cung cấp link RSS lại không cung cấp tin chi tiết nội dung của trang tin đó. Link RSS chỉ cung cấp Tiêu đề tin, tóm tắt tin và link đến chi tiết tin của trang đó. Khi gặp khó khăn này, mình đã nghĩ ra một cách là đọc trang tin chi tiết đó, và chọn lọc ra phần chi tiết tin để thêm vào database của mình.
Tham khảo http://www.tintrongnuoc.net
1. Tool Lấy tin tức bằng công nghệ RSS (Application run 24/7)
2. Website hiện tin tức bằng công nghệ Ajax
Source code
1 Tool lấy tin tức
a. Database (MSSQL)
Cấu trúc Database gồm 3 Table (NHOMTIN, NGUONLINK_RSS,TINTUC)
NHOMTIN(Idnhom,TenNhom) vd (1,Thế giới);(2,Xã hội)....
NGUONLINK_RSS(idnguon, TenNguon, Link) vd(1,Tuoi Tre,linkrss)
TinTuc (idtin,tieude,tomtat,noidung,images)
b. Source Code
///Function lấy RSS của các link (vd LinkRSS của Tuổi trẻ mục tin thế giới)
http://www.tuoitre.com.vn/tianyon/Rs...px?ChannelID=2
Imports System.Xml.XPath
Public Sub GetFeed(ByVal RSSURL As String)
Try
' Bring back the Feed
Dim doc As New XPathDocument(RSSURL)
Dim nav As XPathNavigator = doc.CreateNavigator()
Dim iter As XPathNodeIterator = nav.Select("/rss/channel/item")
' Loop through the nodes
While iter.MoveNext()
' Get the data we need from the node
ProcessNode(iter.Current)
End While
Catch ex As Exception
Console.WriteLine(ex.Message.ToString())
End Try
End Sub
Sub ProcessNode(ByVal lstNav As XPathNavigator)
Dim rssTitle As String = "title"
Dim rssLink As String = "link"
Dim rssDescription As String = "description"
Dim rsspubDate As String = "pubDate"
' Get the child nodes
Dim iterNews As XPathNodeIterator = lstNav.SelectDescendants(XPathNodeType.Element, False)
' Loop through the child nodes
While iterNews.MoveNext()
' Save the current Name
Dim rssName As String = iterNews.Current.Name
' Is this the title?
If rssName.ToUpper() = rssTitle.ToUpper() Then
stitle = iterNews.Current.Value
End If
' Is this the Link?
If rssName.ToUpper() = rssLink.ToUpper() Then
link = iterNews.Current.Value
End If
' Is this the Description?
If rssName.ToUpper() = rssDescription.ToUpper() Then
description = iterNews.Current.Value
End If
If rssName.ToUpper() = rsspubDate.ToUpper Then
pubdate = iterNews.Current.Value
End If
If rssName.ToUpper = rsssource.ToUpper Then
source = iterNews.Current.Value
End If
End While
'them vao co so du lieu
insertNews(stitle, description, link, pubdate)
End Sub
'Mình chỉ tóm tắt source code thôi nhé , các bạn tự vận dụng cho chính chương trình của các bạn
'/////////////CÁCH LẤY TIN CHI TIẾT NỘI DUNG CỦA MỘT TIN TỨC
Không biết vì lý do gì mà các trang tin tức cung cấp link RSS lại không cung cấp tin chi tiết nội dung của trang tin đó. Link RSS chỉ cung cấp Tiêu đề tin, tóm tắt tin và link đến chi tiết tin của trang đó. Khi gặp khó khăn này, mình đã nghĩ ra một cách là đọc trang tin chi tiết đó, và chọn lọc ra phần chi tiết tin để thêm vào database của mình.
Bài liên quan
Code load Ajax
Javascript
'//////////////////////////////
function CreateXMLDOM()
{
var AVersions =[ "MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Mic rosoft.XmlDom"];
// code for IE
for (var i = 0;i < AVersions.length;i++)
{
try
{
var oXmlDom = new ActiveXObject(AVersions[i]);
return oXmlDom;
}
catch (oError)
{
//loi
}
}
}
function LoadData(id,obj,content,group,page)
{
//var idchannel = txtidchannel.value;
var linkXml
var DivLoading = document.getElementById(obj);
DivLoading.innerHTML ="<table width=100% height=400px><tr><td align=center valign=center><IMG height=32 src='images/ajax-loader.gif' width=32 border=0><font color='#095B8A'><b>Loading...</b></font></td></tr></table>";
linkXml ="TrangLoadTinTuc.aspx";
// code for Mozilla, etc.
if (window.XMLHttpRequest)
{
var xmlhttp=new XMLHttpRequest()
}
// code for IE
else if (window.ActiveXObject)
{
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
}
if (xmlhttp!=null)
{
xmlhttp.onreadystatechange=function ()
{
if (xmlhttp.readyState==4)
{
if (xmlhttp.status==200)
{
var Divnoidung = document.getElementById(obj);
Divnoidung.innerHTML =xmlhttp.responseText;
}
else if (xmlhttp.status==404)
{
LoadData(id,obj,stt,page);
}
}
}
xmlhttp.open("GET",linkXml,true)
xmlhttp.send(null)
}
else
{
alert("Your browser does not support XMLHTTP.")
}
}
Cái cách bác nghĩ ra thế bác đã làm đc chưa :|
Có ai đã lam thành công phần lấy hình ảnh từ đường dẫn tin RSS chưa, xin hướng dẫn giúp.
Tôi có tìm được chương trình Vietspider cua nhuthuan.blogspot.com nhưng không dùng được, đây là một chương trình thu thập tin tực tự động nhưng chạy độc lập. Bây giờ tôi cũng muốn làm như vậy nhưng đưa trực tiếp lên web.
Trước đây, onboom.com có cho đoạn mã javascript làm việc này thì phải vì tôi tìm thấy trang hddvn.com sử dụng "Công nghệ cung cấp bởi onboom.com"
Anh em nào quan tâm và đã làm được, xin vui lòng gợi ý giúp hướng làm với. Tôi đang dùng ASP. Có thể dùng javascript cũng được.
Cám ơn trước,
Vấn đề đặt ra:
+ Đã lấy được tin RSS từ các trang cung cấp tin RSS và hiển thị được lên web, nhưng đưa tin RSS như vậy thì nhìn đơn điệu quá, nếu có thêm hình ảnh thì rất hay. Nhưng RSS thì không có cung cấp hình ảnh!
+ Từ đường dẫn RSS làm thế nào để lấy được hình ảnh có trong tin đó --> liên quan đến bóc tách thông tin.
Tôi đã có tìm và thấy trang hddvn.com làm được việc này bằng:
"Hệ thống tin tự cập nhật từ VnExpress.net - Vietnam News Daily
Cung cấp công nghệ bởi Onboom Group"
Tuy nhiên, tôi không hiểu rõ lắm về đoạn javacript mà hddvn.com dùng. Trên onboom.com cũng không còn cung cấp công nghệ này nữa thì phải.
Trên trang nhuthuan.blogspot cua Nhữ Đình Thuận có phần mềm VietSpider làm việc này. VietSpider nghe nói là mã nguồn mở nhưng không thấy cung cấp mã nguồn. Vả lại, VietSpider cũng không dùng được vì chỉ cố định lấy tin có 1 ngày và cũng không liên quan gì đến việc cập nhật tự động trên web!
Có anh em nào quan tâm đến vấn dề này thì cùng trao đổi nghiên cứu nha. (Code bằng ASP hoặc javascript)
Đây là sản phẩm của mình , theo công nghệ RSS + Ajax, mình lấy tin RSS và lấy hình ảnh, và chi tiết của tin tức đó, các bạn vào xem và tham khảo
Cách lấy tin chi tiết như sau:
các bạn dùng kỷ thuật đọc trang tin (HttpWebResponse)
các bạn phải biết điểm bắt đầu và kết thúc của trang tin chi tiết đó
VD báo tuổi trẻ, điểm bắt đầu của nó là "Chuoi tieu de tin tuc do" , điểm kết thúc là
"</div>"
Function loctintuoitre(ByVal link As String, ByVal chuoitim As String) As String
Dim noidung As String
Dim chuoi As String
Dim sr As StreamReader
Try
Dim req As HttpWebRequest = WebRequest.Create(link)
'Get the data as an HttpWebResponse object
Dim resp As HttpWebResponse = req.GetResponse()
'Convert the data into a string (assumes that you are requesting text)
sr = New StreamReader(resp.GetResponseStream())
Dim results As String = sr.Read
Dim Chuoi_kiemtra As String
Dim tieude As String
tieude = chuoitim.ToLower
tieude = Replace(tieude, """", "")
Do While Not results Is Nothing
results = sr.ReadLine()
If InStr(results.ToLower, "<body") Then
results = sr.ReadLine()
Do While Not results Is Nothing
results = sr.ReadLine()
Chuoi_kiemtra = results
If results <> "" Then
Dim kiemtra As String = Replace(Chuoi_kiemtra.ToLower, """", "")
If (InStr(kiemtra, tieude) > 0) Or (InStr(kiemtra, "<script>gettimestring(") > 0) Then
Do While Not results Is Nothing
If results <> "" Then
chuoi = chuoi + results
If InStr(results.ToLower, "</div>") Then
GoTo hien
End If
End If
results = sr.ReadLine()
Loop
End If
End If
Loop
End If
'noidung = noidung + results
Loop
Catch wex As WebException
End Try
hien:
sr.Close()
loctintuoitre = chuoi
End Function
RSS thì tùy cái có hình, cái không có.