Étape 2 : ajouter le code pour le Convertisseur de HTML en RSS pour la recherche fédérée
Notes
Cette rubrique décrit la fonctionnalité qui fait partie de la Infrastructure Update for Microsoft Office Servers. Pour télécharger la mise à jour, voir Description de la mise à jour de l'infrastructure SharePoint Server 2007 : 15 juillet 2008.
Le code suivant passe une requête utilisateur au site Web Windows Live Search, puis convertit le code HTML qui en résulte dans un flux RSS.
Le code complet pour cet exemple est disponible dans HTML to RSS Federated Search Connector.
Créer le flux RSS
Dans le fichier Default.aspx, modifiez la propriété de page Inherits afin qu'elle utilise la nouvelle classe que vous allez créer dans le fichier Default.aspx.cs (code-behind).
Notes
Pour que le code suivant fonctionne correctement, la page qui chargera et affichera le flux doit porter le nom default.aspx.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="SearchHTMLToRSS" %>
Dans le fichier Default.aspx.cs, ajoutez les directives d'espace de noms suivantes.
using System; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Text; using System.IO; using HtmlAgilityPack;
Modifiez la déclaration de classe par défaut afin qu'elle exploite le nom de classe utilisé dans cette solution.
public partial class SearchHTMLToRSS : System.Web.UI.Page
Remplacez la méthode par défaut Page_Load par le code suivant.
protected override void Render(HtmlTextWriter writer) { //Retrieve query term from query string; construct search URL string queryTerm = Request.QueryString["q"]; string searchURL = string.Format("http://search.live.com/results.aspx?q={0}", queryTerm); Response.ContentType = "text/xml"; //Write the RSS document to the HTMLTextWriter object writer.Write(GetResultsXML(searchURL, queryTerm)); }
Ajoutez le code pour la méthode GetResultsXML, qui interroge le site de recherche et crée un document RSS à partir du code HTML résultant. Après avoir localisé la classe div contenant les résultats, ce code extrait les informations dont il a besoin et crée un flux RSS contenant ces informations.
private string GetResultsXML(string searchURL, string queryTerm) { //Construct and execute the HTTP request HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(searchURL); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //Begin writing the RSS document StringBuilder resultsXML = new StringBuilder(); resultsXML.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); resultsXML.Append("<rss version=\"2.0\">"); resultsXML.AppendFormat("<channel><title><![CDATA[HTML to RSS Conversion: {0}]]></title><link/><description/><ttl>60</ttl>", queryTerm); try { HtmlWeb hw = new HtmlWeb(); HtmlDocument doc = hw.Load(searchURL); //Find the <div> tag that contains the results HtmlNodeCollection nodeCollection = doc.DocumentNode.SelectNodes("//div[@id='results']"); foreach (HtmlNode htmlNode in nodeCollection) { foreach (HtmlNode subNode in htmlNode.ChildNodes) { //Find the list that contains the result items if (subNode.Name == "ul") { foreach (HtmlNode lineItemNode in subNode.ChildNodes) { //Excluding line items that are children of others, because we are interested in the main set of results if (((lineItemNode.Attributes.Count > 0) && (lineItemNode.Attributes[0].Value != "child")) || (lineItemNode.Attributes.Count == 0)) { StringWriter descWriter = new StringWriter(); StringWriter titleWriter = new StringWriter(); StringWriter linkWriter = new StringWriter(); //After retrieving the values sought from the markup, HTML-encode //the strings to avoid validation errors string description = lineItemNode.ChildNodes[1].InnerText; Server.HtmlEncode(description, descWriter); string encDescription = descWriter.ToString(); string title = lineItemNode.FirstChild.FirstChild.InnerText; Server.HtmlEncode(title, titleWriter); string encTitle = titleWriter.ToString(); string link = lineItemNode.FirstChild.FirstChild.Attributes[0].Value; Server.HtmlEncode(link, linkWriter); string encLink = linkWriter.ToString(); if (lineItemNode.FirstChild.FirstChild.Attributes[0].Name == "href") { //Write each RSS item resultsXML.AppendFormat("<item><title>{0}</title><link><![CDATA[{1}]]></link><description>{2}</description></item>", encTitle, encLink, encDescription); } } } } } } } finally { response.Close(); } //Complete RSS document resultsXML.Append("</channel></rss>"); return resultsXML.ToString(); }
Déployez cette solution dans votre site Web. Pour déployer cette solution dans votre site Office SharePoint Server 2007, enregistrez le contenu de cette solution dans votre répertoire _layouts. Pour plus d'informations, voir Procédure : créer une application Web dans un site Web SharePoint.
Chargez le fichier Default.aspx dans votre navigateur Web ou lecteur RSS pour vérifier qu'il est en train de créer un flux RSS. Ajoutez les chaînes de requête de test (?q=termes de recherche) dans l'URL pour vérifier que le flux retourne les résultats.
Étapes suivantes
Étape 3 : créer l'emplacement de recherche fédéré et personnaliser le code XSL
Voir aussi
Autres ressources
Étape 1 : configurer le projet pour le Convertisseur de HTML en RSS pour la recherche fédérée