Partager via


É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

  1. 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" %>
    
  2. 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;
    
  3. 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
    
  4. 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));
        }
    
  5. 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();
        }
    
  6. 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.

  7. 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