Crea un feed RSS per il tuo sito Web da un database
Sito web realizzato da Claytabase
Per aiutarti a eseguire questa procedura dettagliata, segui la guida sulla configurazione del nostro ambiente di test o adatta il codice alle tue esigenze .
Livello di esperienza - Intermedio
Introduzione
RSS è un file basato su XML standardizzato che fornisce informazioni sugli aggiornamenti apportati al tuo sito.
Questi possono quindi essere utilizzati da varie applicazioni di aggregazione di notizie che escono e controllano i cambiamenti nei vari siti preferiti degli utenti e li informano di qualsiasi novità.
A causa della natura dello sviluppo del web, ci sono un paio di formati leggermente diversi, quello sotto è in Atom 2.0.
Campione di un file RSS
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> <channel> <atom:link href="https://it.claytabase.com/" rel="self" type="application/rss+xml"/> <title/> <link/> <copyright>Copyright Claytabase 2012</copyright> <language/> <description/> <item> <title>Create an RSS Feed for your Website In ASP NET and SQL Server</title> <description>Easy way to create an RSS Feed for your Website in ASP.NET in VB.NET or C#.NET</description> <link>https://www.claytabase.co.uk/Academy/Learning-Web-Design/Using-ASP-NET/Create-an-RSS-Feed-for-your-Website-In-ASP-NET-and-SQL-Server</link> <pubDate>Wed, 15 Dec 2021 09:37:24 GMT</pubDate> <category>monthly</category> <guid>https://www.claytabase.co.uk/A7038527-90D0-4214-8C65-3A2BD831F141</guid> </item> <item> <title>CSS Styling for AJAX Accordion Control</title> <description>Some simple CSS styling rules for an AJAX Accordion Control</description> <link>https://www.claytabase.co.uk/Academy/Learning-Web-Design/Using-CSS/CSS-Styling-for-AJAX-Accordion-Control</link> <pubDate>Tue, 14 Dec 2021 07:00:00 GMT</pubDate> <category>monthly</category> <guid>https://www.claytabase.co.uk/0DB19797-5B3A-45F0-B3E6-2A8080DA60EE</guid> </item> </channel></rss>
Abbiamo creato una tabella d'esempio, e l'abbiamo eseguito tramite il Database della nostra accademia. Questa tabella include un UNIQUEIDENTIFIER (GUID), titolo, descrizione, URL, lingua e data. Questi data fungeranno come una sorta di informazioni catturate o richiesti nella maggior parte dei CMS.
USE ClaytabaseAcademyGOCREATE TABLE RSSPages(PageGUID UNIQUEIDENTIFIER CONSTRAINT DF_PageGUID DEFAULT NEWSEQUENTIALID() CONSTRAINT PK_PageGUID PRIMARY KEY,PageTitle NVARCHAR(200),PageDescription NVARCHAR(500),PageURL NVARCHAR(500),PageLanguage NVARCHAR(2),PageDate DATETIME,ChangeFrequency NVARCHAR(20))GOINSERT INTO RSSPages(PageTitle,PageDescription,PageURL,PageDate,PageLanguage,ChangeFrequency)SELECT 'Create an RSS Feed for your Website from a database','Walkthrough: Creating an RSS Feed for your Website in ASP.NET using VB.NET or C#.NET from an SQL Server database','https://www.claytabase.co.uk/Academy/Learning-Web-Design/Using-ASP-NET/Create-an-RSS-Feed-for-your-Website-In-ASP-NET-and-SQL-Server','2021-12-15 10:00:00','en','Weekly'INSERT INTO RSSPages(PageTitle,PageDescription,PageURL,PageDate,PageLanguage,ChangeFrequency)SELECT 'CSS Styling for AJAX Accordion Control','Some simple CSS styling rules for an AJAX Accordion Control','https://www.claytabase.co.uk/Academy/Learning-Web-Design/Using-CSS/CSS-Styling-for-AJAX-Accordion-Control',GETDATE(),'en','Monthly'INSERT INTO RSSPages(PageTitle,PageDescription,PageURL,PageDate,PageLanguage,ChangeFrequency)SELECT 'We''ll take the strain while you do what you are good at','A Multi-National team with over 20 years of experience specialising in Web, Database, Cloud services and bespoke Business Management Software','https://www.claytabase.co.uk/',GETDATE(),'en','Daily'INSERT INTO RSSPages(PageTitle,PageDescription,PageURL,PageDate,PageLanguage,ChangeFrequency)SELECT 'Wir nehmen Ihnen die Anstrengung, während Sie das tun, was Sie gut können','Ein multinationales Team mit über 20 Jahren Erfahrung, das sich auf Web-, Datenbank-, Cloud-Dienste und maßgeschneiderte Business-Management-Software spezialisiert hat','https://de.claytabase.com/',GETDATE(),'de','Daily'INSERT INTO RSSPages(PageTitle,PageDescription,PageURL,PageDate,PageLanguage,ChangeFrequency)SELECT 'Nos esforzaremos mientras haces lo que se te da bien','Un equipo multinacional con más de 20 años de experiencia especializado en Web, bases de datos, servicios en la nube y software de gestión empresarial a medida.','https://de.claytabase.com/',GETDATE(),'es','Daily'GOCREATE PROC GetRSSPages(@Language NVARCHAR(2)) AS BEGINSELECT * FROM RSSPagesWHERE PageLanguage=@LanguageENDGOEXEC GetRSSPages 'de'
Aggiungere un nuovo Web Form in Visual Studio
In VS, aggiungi un modulo Web facendo clic con il pulsante destro del mouse sulla cartella Pagine, selezionando Aggiungi e quindi Modulo Web.
Ora vogliamo entrare nel codice sottostante, quindi fai clic con il pulsante destro del mouse sulla nuova pagina e seleziona Visualizza codice
Il codice probabilmente sembra molto più complesso di quello che è, quindi diamo un'occhiata a cosa fa.
Per prima cosa importiamo gli spazi dei nomi per SQL e XML.
Quindi viene impostata la connessione al database, che in questa istanza lo estrae dalla configurazione web.
VB
Imports System.Data.SqlClientImports System.XmlPublic Class RSS Inherits System.Web.UI.Page Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("SqlConnection").ConnectionString) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim RSSLanguage As String = "en" Dim BaseURL As String = "https://www.claytabase.co.uk/" Dim MyTitle As String = "Academy Title" Dim MyDescr As String = "Academy Description"
'Clear any previous output from the buffer Response.ClearContent() Response.ContentType = "text/xml" Response.Charset = "Utf-8" Dim xtwFeed As XmlTextWriter = New XmlTextWriter(Response.OutputStream, Encoding.UTF8) xtwFeed.WriteStartDocument() 'The mandatory rss tag xtwFeed.WriteStartElement("rss") xtwFeed.WriteAttributeString("version", "2.0") xtwFeed.WriteAttributeString("xmlns:atom", "https://www.w3.org/2005/Atom") 'The channel tag contains RSS feed details xtwFeed.WriteStartElement("channel") xtwFeed.WriteRaw("<atom:link href="https://it.claytabase.com/"" & BaseURL & RSSLanguage & "/rss"" rel=""self"" type=""application/rss+xml"" />") xtwFeed.WriteElementString("title", MyTitle) xtwFeed.WriteElementString("link", BaseURL) xtwFeed.WriteElementString("copyright", "Copyright Claytabase 2012") xtwFeed.WriteElementString("language", RSSLanguage) xtwFeed.WriteElementString("description", MyDescr)
'Objects needed for connecting to the SQL Using com As New SqlCommand("EXEC GetRSSPages '" + RSSLanguage + "'", con) If con.State = ConnectionState.Closed Then con.Open() Else End If Using dr = com.ExecuteReader() 'Loop through the content of the database and add them to the RSS feed While dr.Read() xtwFeed.WriteStartElement("item") xtwFeed.WriteElementString("title", dr.Item("PageTitle").ToString()) xtwFeed.WriteElementString("description", dr.Item("PageDescription").ToString()) xtwFeed.WriteElementString("link", dr.Item("PageURL").ToString()) xtwFeed.WriteElementString("pubDate", Format(dr.Item("PageDate"), "ddd, dd MMM yyyy hh:mm:ss") + " GMT") xtwFeed.WriteElementString("category", dr.Item("ChangeFrequency").ToString()) xtwFeed.WriteElementString("guid", BaseURL + "/" + dr.Item("PageGUID").ToString()) xtwFeed.WriteEndElement() End While End Using End Using 'Close all tags xtwFeed.WriteEndElement() xtwFeed.WriteEndElement() xtwFeed.WriteEndDocument() xtwFeed.Flush() xtwFeed.Close() Response.End() End SubEnd Class
C#
using System.Text;using Microsoft.VisualBasic;using System.Data.SqlClient;using System.Xml;public class RSS : System.Web.UI.Page{ private SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings("SqlConnection").ConnectionString); protected void Page_Load(object sender, System.EventArgs e) { string RSSLanguage = "en"; string BaseURL = "https://www.claytabase.co.uk/"; string MyTitle = "Academy Title"; string MyDescr = "Academy Description";
// Clear any previous output from the buffer System.Web.UI.Page.Response.ClearContent(); System.Web.UI.Page.Response.ContentType = "text/xml"; System.Web.UI.Page.Response.Charset = "Utf-8"; XmlTextWriter xtwFeed = new XmlTextWriter(System.Web.UI.Page.Response.OutputStream, Encoding.UTF8); xtwFeed.WriteStartDocument(); // The mandatory rss tag xtwFeed.WriteStartElement("rss"); xtwFeed.WriteAttributeString("version", "2.0"); xtwFeed.WriteAttributeString("xmlns:atom", "https://www.w3.org/2005/Atom"); // The channel tag contains RSS feed details xtwFeed.WriteStartElement("channel"); xtwFeed.WriteRaw("<atom:link href=\"" + BaseURL + RSSLanguage + "/rss\" rel=\"self\" type=\"application/rss+xml\" />"); xtwFeed.WriteElementString("title", MyTitle); xtwFeed.WriteElementString("link", BaseURL); xtwFeed.WriteElementString("copyright", "Copyright Claytabase 2012"); xtwFeed.WriteElementString("language", RSSLanguage); xtwFeed.WriteElementString("description", MyDescr);
// Objects needed for connecting to the SQL using (SqlCommand com = new SqlCommand("EXEC GetRSSPages '" + RSSLanguage + "'", con)) { if (con.State == ConnectionState.Closed) con.Open(); else { } using (var dr = com.ExecuteReader()) { // Loop through the content of the database and add them to the RSS feed while (dr.Read()) { xtwFeed.WriteStartElement("item"); xtwFeed.WriteElementString("title", dr.Item["PageTitle"].ToString()); xtwFeed.WriteElementString("description", dr.Item["PageDescription"].ToString()); xtwFeed.WriteElementString("link", dr.Item["PageURL"].ToString()); xtwFeed.WriteElementString("pubDate", Strings.Format(dr.Item["PageDate"], "ddd, dd MMM yyyy hh:mm:ss") + " GMT"); xtwFeed.WriteElementString("category", dr.Item["ChangeFrequency"].ToString()); xtwFeed.WriteElementString("guid", BaseURL + "/" + dr.Item["PageGUID"].ToString()); xtwFeed.WriteEndElement(); } } } // Close all tags xtwFeed.WriteEndElement(); xtwFeed.WriteEndElement(); xtwFeed.WriteEndDocument(); xtwFeed.Flush(); xtwFeed.Close(); System.Web.UI.Page.Response.End(); }}
Conclusioni
Sul codice dal caricamento della pagina, ed è qui che è stato un po 'più creativo.
Il campo RSSLanguage viene utilizzato nel nostro CMS, indicando al sistema quale lingua viene utilizzata per ogni richiesta, e anche l'URL di base verrebbe popolato, per questo esempio li abbiamo resi campi statici.
Le prossime righe di codice stabiliscono la codifica e il tipo di risposta, aprono un writer XML e stabiliscono alcune delle intestazioni richieste, poiché queste cambieranno raramente, le ho impostate manualmente.
Ora possiamo passare alla lettura dei dati, quindi il primo compito è creare un comando SQL, e in questo caso chiamiamo semplicemente la stored procedure che restituisce i campi richiesti dal database, a seconda dell'input della lingua.
Quindi apriamo la connessione SQL e dichiariamo un lettore di dati per scorrere il set di risultati dal database.
Sappiamo già che il tag XML è un elemento per ogni documento, quindi possiamo aprirlo immediatamente.
Compila quindi ogni elemento richiesto con i dati e assicurati che la data sia nel formato corretto, quindi chiuderemo il tag utilizzando WriteEndElement.
Una volta che tutti i dati sono stati letti, il codice chiude il lettore di dati, le connessioni e la scrittura dei tag di chiusura per ogni elemento aperto in precedenza.
Una volta che hai scritto e pubblicato il tuo, assicurati di controllarlo sul W3C RSS Validator.
Sito web realizzato da Claytabase
Questa è una sezione di codice che è stata modificata dal codice di Ousia Content Management System, uno dei sistemi più veloci e ottimizzati sul mercato, parte dei nostri servizi di progettazione di siti web.
Questi sono disponibili con siti a partire da circa £ 500.