Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Résolu]Google Custom Search, ça fonctionne comment ?
#1

Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS : 1.7.0
#~ Version du MLE si existante : nope
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.7
#~ Installed Modules:
#~ * CMSMailer: 1.73.14
#~ * FileManager: 1.0.2
#~ * MenuManager: 1.6.2
#~ * ModuleManager: 1.3.3
#~ * News: 2.10.4
#~ * nuSOAP: 1.0.1
#~ * Printing: 1.0.4
#~ * Search: 1.6.2
#~ * ThemeManager: 1.1.1
#~ * TinyMCE: 2.6.5
#~ * FrontEndUsers: 1.8.1
#~ * CustomContent: 1.5.3
#~ * CGExtensions: 1.18.2
#~ * CGCalendar: 1.3.1
#~ * GCS: 0.0.1
#~ Config Information:
#~ * php_memory_limit:
#~ * process_whole_template: false
#~ * max_upload_size: 48000000
#~ * default_upload_permission: 664
#~ * assume_mod_rewrite: false
#~ * page_extension:
#~ * internal_pretty_urls: false
#~ * use_hierarchy: true
#~ Php Information:
#~ * phpversion: 5.2.11
#~ * md5_function: On (Vrai)
#~ * gd_version: 2
#~ * tempnam_function: On (Vrai)
#~ * magic_quotes_runtime: Off (Faux)
#~ * E_STRICT: 0
#~ * memory_limit: 64M
#~ * max_execution_time: 10
#~ * safe_mode: Off (Faux)
#~ * session_save_path: Aucune vérification à cause de la restriction spécifiée par PHP open_basedir
#~ * session_use_cookies: On (Vrai)
#~ Server Information:
#~ * Server Api: apache2handler
#~ * Server Db Type: MySQL (mysql)
#~ * Server Db Version: 5.0.84
#~ ----------------------------------------------
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
Bonjour !

Pour mon site, il me faut pouvoir effectuer des recherches qui porteront sur le site lui-même (local search) et sur une série de sites bien spécifique.
Or il me semble que c'est impossible avec Search et je me suis tourné alors vers Google Custom Search... Mais j'y comprends rien !
J'ai été trouver un code pour le champ 'GCS API Unique Identifier', mais rien ne se passe quand je clique sur 'Submit'. Alors, évidemment, je sais pas si ça marche.
Je ne comprends pas non plus si je dois mettre un template ou si les résultats s'afficheront dans la page.

Dans mon désespoir, j'ai essayé ceci:

{cms_module module="GCS" search_query="Recherche" search_query_size="30" detailpage="recherche"}

J'ai créé une page avec un alias 'recherche' avec un contenu vide et j'ai mis dans les meta data le code suivant:
Voilà un essai de code, mais je ne comprends pas vraiment où le mettre...

{literal}<script src="http://www.google.com/jsapi?key=taCle" type="text/javascript"></script>
<script language="Javascript" type="text/javascript">
//<![CDATA[

google.load("search", "1");

function OnLoad() {
// Create a search control
var searchControl = new google.search.SearchControl();

// Recherche en local et sur des sites prédéfinis
var siteSearch = new google.search.WebSearch();
siteSearch.setSiteRestriction("http://www.vd.ch/fr/themes/environnement/developpement-durable/");
searchControl.addSearcher(siteSearch);

// Tell the searcher to draw itself and tell it where to attach
searchControl.draw(document.getElementById("searchcontrol"));

}
google.setOnLoadCallback(OnLoad);

//]]>
</script>{/literal}

J'obtiens un résultat sans template, dans la page est la bonne, avec le message suivant :

Résultat de la recherche

Warning: file_get_contents(http://www.google.com/search?client=goog...=confignon) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/modules/GCS/classes/GoogleCustomSearch.class.php on line 94

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/modules/GCS/classes/GoogleCustomSearch.class.php:94 Stack trace: #0 /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/modules/GCS/classes/GoogleCustomSearch.class.php(94): SimpleXMLElement->__construct('') #1 /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/modules/GCS/action.results.php(29): GoogleCustomSearch->performSearch() #2 /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/lib/classes/class.module.inc.php(1555): include('/home/www/2facc...') #3 /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/lib/classes/class.module.inc.php(1592): CMSModule->DoAction('results', 'm5c25d', Array, '112') #4 /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/plugins/function.content.php(98): CMSModule->DoActionBase('results', 'm5c25d', Array, 112) #5 /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/tmp/templates_c/%%C3^C37^C378FBD0%%t in /home/www/2facc9cde4200ebea4065b97f8888179/web/test_cmsms/modules/GCS/classes/GoogleCustomSearch.class.php on line 94

Il me faut également pouvoir empêcher certaines pages de renvoyer des résultats si l'internaute ne s'est pas identifié comme membre. Je pensais utiliser ça:
< !-- pageAttribute: NotSearchable -- >
Est-ce que ça fonctionnera avec GCS ?

Merci de m'aider Smile
#2

Bon, je persiste.

J'ai remarqué une grosse bêtise dans mon code avec la clé. J'ai mis la clé correcte à la place et le script fonctionne.

Le problème, c'est que j'aimerais utiliser le module lui-même en l'appelant de la sorte (à la place de {search} dans le gabarit) :

{cms_module module="GCS" search_query="Recherche" search_query_size="30" detailpage="recherche"}

Et que l'adresse qui est envoyé au moment d'une recherche n'est pas valide

file_get_contents(http://www.google.com/search?client=goog...10&q=durer) [function.file-get-contents]: failed to open stream: HTTP request failed!

Jean le Chauve explique ici comment mettre en place un page pour les recherches (sans utiliser le module GCS) :
http://forum.cmsmadesimple.org/index.php...#msg175201

Mais pas comment avoir une barre pour lancer la recherche sur une autre page et afficher les résultats sur la page de résultat.
#3

Regarde un peu si ce lien pourrait t'aider : http://www.cmsmadesimple.fr/forum/viewto...499#p11499
Il y a tous les liens utiles pour l'utilisation de l'api google, mais c'est sans le module GCS, que je ne connais pas.
[edit]coiffé sur le poteau[/edit]
#4

J'avais effectivement déjà vu tes autres messages. Hier, j'étais naze, donc j'avais fait 2-3 conneries. Mais aujourd'hui, à tête reposée, j'ai pas réussi à résoudre mon problème. J'ai pas l'impression que ce module soit très populaire.
Mais si ça se trouve, j'en ai pas vraiment besoin... Doit y avoir moyen de spécifier dans le script où on veut les résultats. Non ?
#5

Bien sûr.
Pas besoin du module, tu as un bac à sable avec tous les exemples, j'ai mis l'adresse dans le lien.
Leur api est super bien détaillée, même bli... pourrait s'y retrouver Wink
Pour le placement du résultat, c'est ici : http://code.google.com/apis/ajax/playgro..._placement (il place la réponse dans le document.getElementById, ici : #somewhere_else)
#6

Ben, j'ai pas les yeux en face des trous: je m'étais concentré sur Search Form Placement !
Tout ça, c'est bien beau, mais j'aurais voulu pouvoir afficher les résultats de la recherche dans une autre page.
C'est d'ailleurs comme ça que ça se fait, non ? Une barre recherche disponible sur toutes les pages du site et des résultats qui s'affichent dans une page spécifique. Mais ça, j'y arrive pas. Je suis de loin pas un spécialiste, mais je crois comprendre que le javascript s'exécute sur une seule et même page et ne va pas en appeler une autre.

L'idée que j'ai alors, c'est d'utiliser le module Search, lui dire d'appeler la page 'recherche' et de mettre du javascript sur cette page avec qqchose du genre:
searchControl.execute("<?php echo $_POST('search');?>");

Vous en dites quoi ?
#7

Bonjour Ivan

je crois que tu devrais regarder dans les gabarits du module search/recherche

celui de detail

A+

Phil Did

-.
#8

Merci Phil Did, j'ai bien pu avancer, mais il y a une dernière chose sur laquelle je bute :

je n'arrive pas à utiliser de balises smarty dans les paramètres d'une fonction que j'appelle :

searchControl.execute("{$phrase}");

J'ai essayé de fermer et de rouvrir les balises {literal} :

searchControl.execute("{/literal}{$phrase}{literal}");

Mais ça ne fonctionne pas. J'ai beau fouillé les forums, je ne comprends tjs pas. Si jamais vous avez une idée, je la prends volontiers ! Merci !

EDIT: ben si, ça fonctionne. Je savais bien que c'était l'heure d'arrêter, hier !

Maintenant, si quelqu'un connaît une façon propre de faire plusieurs restrictions avec Google search, je veux bien un lien !

Mais sinon, la morale, c'est que GCS, ça marche pas et on peut s'en passer.
#9

http://code.google.com/apis/ajax/playgro...e_restrict
Code :
var webSearch = new google.search.WebSearch();
// Restrict our search to pages from the Cartoon Newtowrk
webSearch.setSiteRestriction('www.cartoonnetwork.com');
// Add the searcher to the SearchControl  
searchControl.addSearcher(webSearch);

// Add in a WebSearch
var webSearch = new google.search.WebSearch();
// Restrict our search to pages from zoomjeune
webSearch.setSiteRestriction('www.zoomjeune.be');
// Add the searcher to the SearchControl
  searchControl.addSearcher(webSearch);

Et ainsi de suite.
#10

Merci !

En fait, je me suis tourné vers un google custom search engine, mais je n'arrive pas à intégrer les résultats dans ma page. Je peux les voir sans problème dans une page externe, mais pas sur une page de mon site. Pourtant, il suffit de coller le texte fourni par google au bon endroit, mais ça ne fonctionne pas du tout.

Je vous mets mon code à tout hasard, si qqn a déjà un peu d'expérience dans le domaine :

Dans le gabarit, à la place du search classique:
<form action="../test_cmsms" id="cse-search-box">
<input type="hidden" name="cx" value="005584XXXXXXXXXXX:epked-4geyy" />
<input type="hidden" name="cof" value="FORID:10" />
<input type="hidden" name="ie" value="UTF-8" />
<input type="text" name="q" size="31" />
<input type="submit" name="sa" value="Rechercher" />
</form>

Dans la meta de ma page pour les résultats:

{literal}
<script type="text/javascript">
var googleSearchIframeName = "cse-search-results";
var googleSearchFormName = "cse-search-box";
var googleSearchFrameWidth = 600;
var googleSearchDomain = "www.google.com";
var googleSearchPath = "/cse";
</script>
<script type="text/javascript" src="http://www.google.com/afsonline/show_afs_search.js"></script>
{/literal}

Dans le contenu de cette même page :

<div id="cse-search-results">Votre recherche est en cours...</div>

Donc, c'est hyper cul, mais ça veut pas marcher et je crois avoir bien cherché, mais j'ai pas vu le moindre petit indice.

Si jamais, vous pouvez regarder mon site (celui pour lequel je vous persécute depuis 1 mois...) :
http://www.coord21.ch/test_cmsms
#11

Re,

J'ai retrouvé çà dans un carton
Code :
<FORM method=GET action="http://www.google.com/search">
<input type=hidden name=ie value=UTF-8>
<input type=hidden name=oe value=UTF-8>
<TABLE bgcolor="#FFFFFF"><tr><td>
<A HREF="http://www.google.com/">
<IMG SRC="http://www.google.com/logos/Logo_40wht.gif"
border="0" ALT="Google"></A>
</td>
<td>
<INPUT TYPE=text name=q size=31 maxlength=255 value="">
<INPUT type=submit name=btnG VALUE="Google Search">
<font size=-1>
<input type=hidden name=domains value="servicedoc.info"><br><input type=radio name=sitesearch value=""> sur le web <input type=radio name=sitesearch value="servicedoc.info" checked> sur servicedoc.info <br>
</font>
</td></tr></TABLE>
</FORM>
<!-- SiteSearch Google -->

[2]
<FORM method=GET action=http://www.google.com/custom>
<TABLE bgcolor=#FFFFFF cellspacing=0 border=0>
<tr valign=top><td>
<A HREF=http://www.google.com/search>
<IMG SRC=http://www.google.com/logos/Logo_40wht.gif border=0 ALT=Google align=middle></A>
</td>
<td>
<INPUT TYPE=text name=q size=31 maxlength=255 value="">
<INPUT type=submit name=sa VALUE="Google Search">
<INPUT type=hidden name=cof VALUE="S:http://www.servicedoc.info;GL:1;AH:left;BGC:snow;LH:50;L
:http://www.servicedoc.info/logo.gif;LW:50;AWFID:9021ea2b1576b63c;">
<input type=hidden name=domains value="assemblee-nat.fr;senat.fr;conseil-constitutionnel.fr;gouv.fr;
elysee.fr;conseil-etat.fr;courdecassation.fr"><br><input type=radio name=sitesearch value=""> web <input type=radio name=sitesearch value="assemblee-nat.fr" checked> AN <input type=radio name=sitesearch value="senat.fr" checked> sénat <input type=radio name=sitesearch value="conseil-constitutionnel.fr" checked> Conseil constit
<input type=radio name=sitesearch value="gouv.fr" checked> gouv.fr <input type=radio name=sitesearch value="elysee.fr" checked> élysée <input type=radio name=sitesearch value="conseil-etat.fr" checked> Conseil d'Etat <input type=radio name=sitesearch value="courdecassation.fr" checked> Cour de cass
</td></tr></TABLE>
</FORM>
j'espère que cela pourra t'aider, sinon laisse

PS
j'espère aussi que je ne vais pas encore me faire engueulé pour invention de balise, je me comprends, rien à voir avec ton prob Ivan.

A+

Phil Did

-.
#12

Je ne connais pas cette méthode, mais à première vue, je changerais l'action du form par test_cmsms/index.php?page=recherche sinon tu n'arriveras pas au js.
#13

Je vois que sur ton site, tu as fais la correction.
Ton problème semble se situer ici : l'url créée te renvoie sur la page index.php :
Code :
http://www.coord21.ch/test_cmsms/index.php?cx=005584578441396243232%3Aepked-4geyy&cof=FORID%3A10&ie=UTF-8&q=Fribourg&sa=Rechercher&siteurl=www.coord21.ch%2Ftest_cmsms%2F
#14

J'ai trouvé ce que tu cherches Smile
http://googleajaxsearchapi.blogspot.com/...n-two.html
#15

Voilà ton code, il est paramétré selon tes besoins montrés plus haut (tu n'as qu'à rajouter les {literal}) :
page avec le form
Code :
<head>
    <script type="text/javascript">
      function inputFocus() {
        document.getElementById('query-input').style['background'] = '';
      }

      function inputBlur() {
        var queryInput = document.getElementById('query-input');
        if (!queryInput.value) {
          queryInput.style['background'] = 'white url(http://www.google.com/coop/images/google_custom_search_watermark.gif) no-repeat 0% 50%';
        }
      }
    </script>
  </head>
  <body onload="inputBlur();">
    <form action="/index.php?page=recherche" method="GET">
      <input name="q" size="50" id="query-input" onfocus="inputFocus();" onblur="inputBlur();" />
      <button type="submit">Search</button>
    </form>
page résultats :
Code :
<head>
    <title>Résultat de la recherche</title>
    <script src="http://www.google.com/jsapi" type="text/javascript"></script>
    <script type="text/javascript">
      google.load('search', '1');

      /**
       * Extracts the users query from the URL.
       */
      function getQuery() {
        var url = '' + window.location;
        var queryStart = url.indexOf('?') + 1;
        if (queryStart > 0) {
          var parts = url.substr(queryStart).split('&');
          for (var i = 0; i < parts.length; i++) {
            if (parts[i].substr(0, 1) == 'q') {
              return unescape(parts[i].split('=')[1].replace(/\+/g, ' '));
            }
          }
        }
        return '';
      }

      function onLoad() {
        var customSearchControl = new google.search.CustomSearchControl(
            'http://www.coord21.ch/test_cmsms');

        // Draw the control in content div
        customSearchControl.draw('cse-search-results');

        // Run a query
        customSearchControl.execute(getQuery());
      }

      google.setOnLoadCallback(onLoad);
    </script>
  </head>
  <body>
    <div id="cse-search-results">Votre recherche est en cours...</div>
#16

Pour cacher des custom pages aux robots, tu dois utiliser les <meta name="robots" content="noindex,nofollow" /> + le robot.txt
De plus, il faut vérifier dans les options de la page :
Afficher dans le menu : décoché
Cachable : décoché
La recherche se fera dans cette page : décoché
Si tu as l'extension Sitemap MadeSimple : préférences : Afficher les pages cachées dans le plan du site ? : non
Si Google a déjà indexé ces pages :
Confirmez que vous êtes bien le propriétaire du site dans les Outils pour les webmasters.
Sur la page d'accueil des Outils pour les webmasters, cliquez sur le site de votre choix.
Dans le tableau de bord, cliquez sur Configuration du site dans le menu de gauche.
Cliquez sur Accès du robot d'exploration, puis sur Supprimer URL.
Cliquez sur Nouvelle demande de suppression.
Saisissez l'URL de la page que vous souhaitez supprimer des résultats de recherche (et non l'URL de la page des résultats de recherche Google, ni de la page en cache), puis cliquez sur Continuer. Comment puis-je identifier l'URL de la page à supprimer des résultats de recherche Google ? Notez que l'URL est sensible à la casse. Vous devez donc utiliser exactement les mêmes caractères et mettre des majuscules si nécessaire.
Cliquez sur Supprimer la page des résultats de recherche et du cache
Cochez la case pour confirmer que vous avez suivi les instructions de cet article, puis cliquez sur Envoyer la demande de suppression.

< !-- pageAttribute: NotSearchable -- > ne sert que pour le module search.

Citation :Il me faut également pouvoir empêcher certaines pages de renvoyer des résultats si l'internaute ne s'est pas identifié comme membre.
Tu crées un custom search avec des restrictions pour le gabarit normal
Et un sans restriction dans le gabarit des pages custom.
Mais comme tu as suivi mes conseils en refusant l'indexation des pages comme écrit plus haut, google ne les trouvera pas. C'est donc, à mon humble avis, impossible. C'est tout ou rien.
#17

aouch... ca c'est des explications Big Grin

Jean le chauve, dans le cas ou ca solutionne le soucis, tu me la referrais pour le blog (fais les yeux doux)
#18

Nom de Zeus ! Merci ! Même beaucoup merci !

Je check tout ça et je reviens avec des nouvelles. (bonnes, on espère Wink )
#19

Ok, j'ai essayé, mais j'y arrive pas.

Après une recherche, l'adresse appelée est du genre :

http://www.coord21.ch/test_cmsms/index.php?q=droit (si je fais une recherche sur 'droit')

Dans le formulaire, j'ai déjà rajouté un '.' avant '/index.php?page=recherche', mais on dirait que ce qui se trouve après le '?' passe simplement à la trappe. À cause de la méthode GET ?
J'ai pensé pouvoir utiliser la méthode POST, mais j'y suis pas arrivé et je me dis qu'il doit bien y avoir une raison pour utiliser la méthode GET...

Par rapport à la méthode que j'avais trouvé sur le site de Google, on m'a aussi proposé d'utiliser des 'pretty url'. Qu'est-ce que vous en pensez ? Perso, je me suis pas du tout penché sur le look de mes adresses et j'y connais rien pour l'instant.
#20

Voilà ce que je vois dans ta page :
Code :
<form action="http://www.google.com/cse" id="cse-search-box">
    <input type="hidden" name="cx" value="005584578441396243232:epked-4geyy" />
    <input type="hidden" name="ie" value="UTF-8" />
    <input type="text" name="q" size="31" />
    <input type="submit" name="sa" value="Rechercher" />
    </form>
Ce qui n'est pas ce que j'ai expliqué.
#21

Effectivement, il faut le mod_rewrite.
#22

Je viens de tester et ça fonctionne parfaitement :
même si on réécrit une slasche en fin d'url :
http://www.menus-cmsms-madesimple.be/tes...erche.html
#23

Yes !
J'ai opté pour des pretty URLs et ajouté la clé de mon site dans la src du javascript et ça marche ! Mais il faut que je fasse des changements d'ordre esthétique parce que ça s'affiche trop bas... Qqn saurait me dire pourquoi ça s'affiche sous la colonne de gauche ?

Merci encore !

PS: C'est quand même dommage que cette méthode ne me laisse pas utiliser les options graphiques de l'éditeur de moteur de recherche. Mais avec la méthode Google, même avec les pretty URLs, il n'y a rien qui s'affiche...
#24

Ah excuse Jean, j'avais pas vu tes messages. Je m'explique : j'essayais la méthode google avec les pretty URLs.

J'ai regardé ton exemple (merci d'avoir pris le temps de faire ça !) et je vois que tes résultats à toi aussi s'affiche sous le menu. Saurais-tu quelle en est la raison ???
#25

Là, on sort de ta demande, c'est un problème de css.
Un petit conseil : nettoie d'abord le code de ton agenda :
Code :
<a href="http://www.coord21.ch/test_cmsms/calendar/112/14-S-minaire-sur-d-autres-trucs-importants/">Séminaire sur d'autres trucs importants</a></li><br/><li><a href="http://www.coord21.ch/test_cmsms/calendar/112/12-La-fête-de-la-grimace--Cheseaux/">
...
Pas de caractères accentués dans les alias. Il faut d'abord que ton code passe au validateur avant de commencer le design.

La soluce est dans le post suivant.
Sujet fermé


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)