/// <summary>
        /// Obtiene una colección de resultados Web de acuerdo a una consulta dada haciendo uso de los servicios de busqueda de Google y Yahoo
        /// </summary>
        /// <param name="keywords">Palabras clave de la consulta de usuario</param>
        /// <param name="numResults">Numero de resultados que se van a obtener</param>
        /// <returns></returns>
        public System.Collections.ArrayList webSearch(string keywords, int numResults)
        {
            //System.Collections.ArrayList resultsGoogle = webSearchGoogle(keywords, numResults);
            //System.Collections.ArrayList resultsYahoo = webSearchYahoo(keywords, numResults);
            //System.Collections.ArrayList results = ranking(resultsGoogle, resultsYahoo);
            System.Collections.ArrayList results = new System.Collections.ArrayList();
            WebDocument wd = new WebDocument();

            wd.Titulo = "pagina1"; wd.Resumen = "resumen1"; wd.Url = "url1";
            results.Add(wd);
            return(results);
        }
        /// <summary>
        /// Verifica si un documento se encuentra duplicado en las listas de documentos retornadas por los motores de busqueda
        /// </summary>
        /// <param name="doc">Documento Web que se va a verificar</param>
        /// <param name="results">Lista de resultados de un motor de busqueda</param>
        /// <returns></returns>
        public bool esDocumentoDuplicado(WebDocument doc, System.Collections.ArrayList results)
        {
            bool band = false;

            for (int j = 0; j < results.Count; j++)
            {
                WebDocument wdg = (WebDocument)results[j];
                if (doc.Url.Equals(wdg.Url))
                {
                    band = true;
                }
            }
            return(band);
        }
        /// <summary>
        /// Obtiene una colección de resultados Web de acuerdo a una consulta dada, (API utilizada: Yahoo Web Search API)
        /// </summary>
        /// <param name="keywords">Palabras clave de la consulta de usuario</param>
        /// <param name="numResults">Numero de resultados que se van a obtener</param>
        /// <returns></returns>
        public System.Collections.ArrayList webSearchYahoo(string keywords, int numResults)
        {
            System.Collections.ArrayList results = new System.Collections.ArrayList();
            YahooSearchService           yahoo   = new YahooSearchService();

            Yahoo.API.WebSearchResponse.ResultSet resultsYahoo = yahoo.WebSearch("YahooExample", keywords, "any", 10, 1, "all", false, true, "en");
            foreach (Yahoo.API.WebSearchResponse.ResultType result in resultsYahoo.Result)
            {
                WebDocument wd = new WebDocument();
                wd.Titulo  = result.Title;
                wd.Resumen = result.Summary;
                wd.Url     = result.Url;
                results.Add(wd);
            }
            return(results);
        }
        /// <summary>
        /// Convierte un DataSet de resultados de búsqueda en un ArrayList
        /// </summary>
        /// <param name="ds">DataSet de resultados de búsqueda</param>
        /// <returns>Resultados en formato de ArrayList</returns>
        public System.Collections.ArrayList convertDataSetToArrayList(DataSet ds)
        {
            System.Collections.ArrayList results = new System.Collections.ArrayList();
            DataTable     dt     = ds.Tables[0];
            List <string> grupos = new List <string>();

            foreach (DataRow row in dt.Rows)
            {
                WebDocument wd = new WebDocument();
                wd.Titulo  = row[0].ToString();
                wd.Resumen = row[1].ToString();
                wd.Url     = row[2].ToString();
                results.Add(wd);
            }
            return(results);
        }
 /// <summary>
 /// Realiza un ranking de documentos de Google y Yahoo
 /// </summary>
 /// <param name="resultsGoogle">Listado de documentos de Google</param>
 /// <param name="resultsYahoo">Listado de documentos de Yahoo</param>
 /// <returns></returns>
 public System.Collections.ArrayList ranking(System.Collections.ArrayList resultsGoogle, System.Collections.ArrayList resultsYahoo)
 {
     System.Collections.ArrayList rankedDocs = new System.Collections.ArrayList();
     for (int i = 0; i < resultsGoogle.Count; i++)
     {
         WebDocument wdg = (WebDocument)resultsGoogle[i];
         WebDocument wdy = (WebDocument)resultsYahoo[i];
         rankedDocs.Add(wdg);
         if (i < resultsYahoo.Count)
         {
             if (esDocumentoDuplicado(wdy, resultsGoogle) == false)
             {
                 rankedDocs.Add(wdy);
             }
         }
     }
     return(rankedDocs);
 }
        /// <summary>
        /// Obtiene una colección de resultados Web de acuerdo a una consulta dada, (API utilizada: Google API Web Search 2.0)
        /// </summary>
        /// <param name="keywords">Palabras clave de la consulta de usuario</param>
        /// <param name="numResults">Numero de resultados que se van a obtener</param>
        /// <returns></returns>
        public System.Collections.ArrayList webSearchGoogle(string keywords, int numResults)
        {
            System.Collections.ArrayList results = new System.Collections.ArrayList();
            //Crear un cliente Google
            GwebSearchClient client = new GwebSearchClient("http://www.google.com.co");

            //Obtener lista de resultados
            System.Collections.Generic.IList <IWebResult> resultsGoogle = client.Search(keywords, numResults);
            foreach (IWebResult result in resultsGoogle)
            {
                WebDocument wd = new WebDocument();
                wd.Titulo  = result.Title;
                wd.Resumen = result.Content;
                wd.Url     = result.Url;
                results.Add(wd);
            }
            return(results);
        }