Mon premier pitch en D1A en Mars 1994
Mot de passe :
Accueil | 
Résultats du mot clé LiveSearch
10/05/2007
Tutoriel : Mashup LiveSearch / GoogleSearch avec ASP.Net 2.0 et Ajax 1.0

Il y a quelques semaines, j'ai intégré GoogleSearch dans mon site grâce à son API. Le rendu est plutôt sympa et efficace, tout du moins pour les pages qui sont référencées par Google. Microsoft propose lui aussi son API pour le moteur de recherche Live.com. De mon esprit curieux, sort un mash-up plutôt inattendu avec les deux frères ennemis, d'où l'envie de marier les deux plutôt de que faire 2 zones de recherches.

Ce mini tutoriel vous présentera la manière dont ce mashup a été réalisé sur mon site internet avec :

  • Les pré requis
  • La création du WebService d'interrogation de MSN Live Search
  • Le code behind nécessaire
  • L'implémentation de GoogleSearch et de LiveSearch en Javascript

Les sources, libres de droits sont disponibles en téléchargement.

Les pré requis

1. Pour démarrer, vous devez référencer le WebService de recherche MSN sur http://soap.search.msn.com/webservices.asmx?wsdl

2. Votre Web.Config, doit contenir les éléments nécessaires à l'utilisation d'ASP.Net AJAX 1.0.

3. Quatre variables ont été mises dans le Web.Config à savoir :

4. Référencer la feuille de style de Google dans la page ASPX :

    <link href="http://www.google.com/uds/css/gsearch.css" type="text/css" rel="stylesheet"/>

5. votre page ASPX doit contenir un ScriptManager :

<asp:ScriptManager ID="ScriptManager1" runat="server" />

6. Votre fichier CSS doit absolument avoir le code suivant pour éviter d'avoir 2 zones de formulaires Google :

.gsc-control form.gsc-search-box   {display : none;}

 

Le WebService d'interrogation de MSN Live Search

Le webservice est localisé dans le fichier App_Code/WebService.cs. Pour que mon WebService soit accessible via mon javascript client, ne pas oublier de mettre l'attribut System.Web.Script.Services.ScriptService

 

[System.Web.Script.Services.ScriptService]

[WebService(Namespace = "http://www.laurentgeffroy.com/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class WebService : System.Web.Services.WebService {

Pour la WebMethod, il faut également affecter l'attribut System.Web.Script.Services.ScriptMethod. L'utilisation est plutôt simple. On créé une nouvelle instance du WebService MSNSearchService auquel on affecte une requete. La requête est initialisée avec l'objet SearchRequest et les propriétés Query. La Query est modifiée pour limiter les recherches sur un domaine particulier. C'est également dans SearchRequest que vous affecterez la AppKey fournie.

Les résultats sont placés dans mes propres classes. Il est je pense possible d'utiliser directement le sourceResponse.Results comme valeur de retour. Mon but était de limiter la quantité de données à retourner au script coté client.

Votre WebService est construit ! Le voici en détail :

    [WebMethod(Description = "Récupère le résultat de la recherche sur le site actuel")]

    [System.Web.Script.Services.ScriptMethod]

    public LiveSearch.Resultats MsnLiveSearch(string p_search)

    {

        // Variable de retour

        LiveSearch.Resultats v_result = new LiveSearch.Resultats();

 

        // Nouvelle instance du WebService

        MSNSearchService _search = new MSNSearchService();

 

        SearchRequest _searchRequest = new SearchRequest();

        SearchResponse _searchResponse;

        Result[] sourceResults;

 

        try

        {

            SourceRequest[] _sr = new SourceRequest[1];

 

            // Recherche uniquement sur le Web

            _sr[0] = new SourceRequest();

            _sr[0].Source = SourceType.Web;

 

            // Construction de la recherche

            _searchRequest.Query = "site:" + ConfigurationManager.AppSettings["SiteWeb"] + " " + p_search;

            _searchRequest.Requests = _sr;

 

            // Fourniture du LiveAppID et de la culture

            _searchRequest.AppID = ConfigurationManager.AppSettings["LiveAppID"];

            _searchRequest.CultureInfo = "FR-fr";

 

            // Invocation et récupération du résultat

            _searchResponse = _search.Search(_searchRequest);

 

            foreach (SourceResponse sourceResponse in _searchResponse.Responses)

            {

                sourceResults = sourceResponse.Results;

 

             &