Archives par mot-clef : Google

Publier un billet sur Dotclear via Google Documents avec XML/RPC

Catégorie : Dotclear | Un commentaire

Sur Dotclear (et d’autres blogs), il est possible de publier un billet sans passer par l’interface d’administration. J’ai découvert cette fonctionnalité assez magique il y a quelques temps, et j’avoue ne pas m’en servir souvent, mais par exemple, aujourd’hui j’écris ce billet à partir de Google Documents ! Si, si, c’est vrai ! J’ai coché une petite case sur Dotclear, j’ai configuré Google Documents comme il faut, et ça marche.
Ce petit miracle, est possible grâce à XML/RPC. C’est un protocole RPC (Remote Procedure Call) qui permet en gros d’utiliser du XML pour faire dialoguer mon blog Dotclear et Google Documents.

Mode d’emploi

Il faut tout d’abord aller dans l’interface d’administration de Dotclear (Tableau de bord > Paramètre du blog) et dans Configuration du blog, cocher : Activer l’interface XML/RPC.

Le petit lien plus d’informations nous mène en bas de la page et fournit toutes les infos pour configurer Google Documents (ou autre).

Maintenant, il faut se rendre sur Google Documents. On créé un document texte classique, et on écrit ce que l’on souhaite dedans.
Reste ensuite à publier le document sur un blog. Pour cela, il faut cliquer sur Partager > Publier en tant que page Web …. Cela nous mène à la page suivante :

Avant de publier le billet, il va falloir paramétrer l’envoi.

Rien de bien compliqué, il suffit de suivre les informations fournies par Dotclear.
En cliquant sur Envoyer dans mon blog, le billet est automatiquement publié ! Magie !

Dans le cas de Google Documents, le corps du billet est le corps du document, et le titre correspond aux premiers mots de la première ligne. L’inclusion du titre du document lors de l’envoi ne fonctionne pas. Et je n’arrive pas à préciser la catégorie. Bref, ce n’est pas ce qui se fait de plus pratique, mais si on a quelque chose d’écrit sur Google Documents et que sur un coup de tête on décide de le publier sur son blog, ça peut servir.
Petit avantage/désavantage tout de même, les images sont stockés chez Google. ça peut être pratique si vous avez peu d’espace disque, mais c’est quand même mieux d’avoir tout chez soit !

Pour aller plus loin

Je fournis à Google Documents le script XML/RPC sur mon blog qui se charge de publier un billet. Ce script demande un mot de passe à Google, je le luis fournis, et je lui dis aussi quel billet envoyer. Google Documents transforme tout ça au format XML qui va bien, Dotclear re-transforme ça au format qui lui va bien, et c’est gagné !
Si je saisis bien, XML/RPC est l’ancêtre du SOAP (Simple Object Access Protocol) qui est plus couramment employé aujourd’hui.

Google indexerait-il si rapidement ?

Catégorie : Geekeries | 4 commentaires

Il y a quelques minutes j’ai écris un billet sur [CONCAT en MYSQL|/post/2009/Mysql-et-la-recherche-sur-plusieurs-champs-avec-concat-ou-concat_ws], et comme à mon habitude, j’ai tapé  »mysql concat concat_ws rétrolien » pour trouver d’éventuels billets de blogs auxquels je pourrai envoyer un rétrolien. Mais qu’elle ne fut pas ma surprise en voyant un lien vers le billet que je venais juste d’écrire dans les résultats de Google : [((/public/Divers/.google-dingue_m.jpg|Google crawl en moins de 12 minutes|C|Google crawl en moins de 12 minutes, oct. 2009))|/public/Divers/google-dingue.jpg] Google a indexé une page que je venais de créer il y a seulement 12 minutes… J’avoue ne pas comprendre comment cela est possible ! C’est dingue. J’imagine que c’est grâce au Ping-o-Matic! et Google Blog Search de Dotclear. Je n’ai jamais vraiment compris à quoi servent ces trucs, ni comment ils fonctionnent, mais je crois qu’il va falloir que je m’y penche sérieusement. Ou alors c’est dû au nouveau système [Google Social Search|http://www.zorgloob.com/2009/10/google-social-search-votre-reseau-la.asp] qui cherche dans les contenus très récent. Dans tous les cas, c’est très surprenant ! (et je suis un peu deçu d’avoir changé l’url de ma page depuis ces 12 minutes, parce que pour le coup, le lien de Google mène vers une jolie page 404) %%% Allez savoir… Au fait, Google a un système pour voir les résultats d’une recherche sur ce qui a été indexé il y a moins de 3 jours, 2 jours, … moins d’1h ! Et mon précédent billet apparait bien (avec le bon url en prime). Bref, dingue ! [Exemple avec le mot clef "Google"|http://www.google.fr/search?hl=fr&q=google&as_qdr=h&btnG=Rechercher&meta=&aq=f&oq=]

Problème SEO Dotclear : pages archives – pages billets

Catégorie : Dotclear | Laisser un commentaire

((/public/Dotclear/calendrier.png|Calendrier 30minparjour|L|Calendrier 30minparjour, oct. 2009))L’autre jour je surfais un peu sur mon site (on s’ennuie toujours quand on s’ennuie. Je me console en me disant que ça me permet de trouver des bugs ou des fautes de frappes) et en utilisant les liens du calendrier, je me suis fait la réflexion suivante : Sur mon blog, en général, j’écris au maximum 1 billet par jour. (et parfois aucun ^^) Par conséquent, le contenu d’une page billet ([exemple|/post/2009/Chercher-des-retroliens-Dotclear]) est pesque le même que le contenu d’une page archive du même jour. ([exemple|/archive/2009/10/15]) La question est donc : __n’y a-t-il pas un risque que Google et ses comparses prennent cela comme du duplicate content (+ de 70-75% de similitude entre 2 pages) et ralentissent le scrawling de mon site ?__ %%% %%% %%% %%% %%% %%% %%% %%% %%% %%% Pour répondre à cette question, voici quelques points à savoir : * heureusement pour ma part, le très bon plugin relatedPosts me permet d’afficher des liens vers les billets suivants, précédents, et connexes, sur les pages billets, ce qui ajoute du contenu différent. Et s’il y a des commentaires ou des rétroliens, c’est encore mieux ! * les liens vers les pages archives n’apparaissent pas dans les sitemaps. Heureusement pour l’instant, mais pour ma part, j’aimerai bien qu’ils puissent y être. Mais ces liens apparaissent sur le site et ne sont pas en nofollow. * les pages catégories ou tags peuvent aussi avoir un contenu à peu près similaire. (de même pour les « recherches » que j’aimerai créer) Voici donc quelques réflexions et quelques idées pour améliorer tout ça : * n’afficher que des extraits de billets sur les pages archives. J’aime pas trop ça, mais c’est surement la meilleure solution. * ajouter un petit paragraphe d’information sur le jour (qu’on récupère sur le Web, ex : Lundi 19 mars c’était la saint machin, et il s’est passé tatati, tatata…) C’est la solution la plus cute. Et dans ce cas on met une bonne description pour les pages catégories. * Avoir un max de visiteurs qui postent un max de commentaires et de rétroliens ce qui élimine tout problèmes !!! Bon, je crois que j’ai encore besoin d’y réfléchir !

Parlons de sitemaps

Catégorie : XML | Laisser un commentaire

A vrai dire il y a 2 types de sitemaps, puisque 2 utilisations possible des dites sitemaps : * La sitemap pour les visiteurs, plus communément appelée « Plan du Site ». Son but est d’aider le visiteur à se repèrer, elle doit donc être jolie, bien mise en forme, et ne pas contenir trop de liens. Google n’aime pas quand le nombre d’urls sur une page approche les 100, donc une sitemap ne doit afficher que les liens importants, et à la rigueur les articles en vues. * La sitemap pour les robots, comme les robots de moteur de recherche. Son but est d’aider les moteurs de recherche à indexer plus rapidement toutes les pages d’un site Internet. Qu’importe la beauté, c’est donc la structure du fichier qui compte puisqu’un protocole a été mise en place pour standardiser tout ça. Une sitemap peut contenir autant d’url que l’on veut, tant que l’on s’y prend bien. (puisqu’en fait on peut créer plusieurs sitemaps que l’on liste avec une sitemapindex) Je vais m’attarder un tout petit peu sur le deuxième type de sitemaps puisque j’ai dû générer la sitemaps d’un site de plus de 3 millions de pages, ce qui m’a un peu forcé à me pencher sur la question. (j’étais bien guidé cela dit !) !!!Le protocole Sitemap !!Sitemap classique Deux choix pour les sitemaps classiques * Un fichier texte avec tous les urls à la ligne. Pas top. * Un fichier XML bien mis en page avec possibilité de spécifier certaines options. Bien mieux ! C’est là dessus que je vais m’attarder. Voici la tête d’une petite sitemap XML avec 3 urls : /// http://la-bnbox.fr/cahier.html 2009-07-10 weekly 0.8 http://la-bnbox.fr/t18-francais.cahier 2009-07-25 weekly 0.7 http://la-bnbox.fr/554-Prepa-PSI–Penser-l-Histoire—Introduction.cahier 2009-07-25 yearly 0.5 /// L’entête est assez classique, mais on peut noter que l’encodage est en UTF-8 et qu’il faut qu’il soit en UTF-8.%%% Et on peut résumer un bloc pour un url de cette manière : /// http://lien-de-la-page.fr/ AAAA-MM-JJ always/hourly/daily/weekly/monthly/yearly/never 0.0 à 1.0. Le priorité par défaut étant 0.5 /// * __loc__ : l’url de la page, seul paramètre obligatoire * __lastmod__ : date de la dernière modification du contenu de la page. Cette date doit être au format [date et heure du W3C|http://www.w3.org/TR/NOTE-datetime]. Si la page change souvent, il peut être utile de préciser les heures et les minutes : AAAA-MM-JJThh:mm:ss+01:00 * __changefreq__ : donne une idée de la fréquence de mise à jour de cette page. * __priority__ : priorité de l’url par rapport aux autres urls de la sitemap. Bien sur, ces informations sont à titre d’information. Vous ne forcerez par Google à crawler votre site tous les jours en mettant toutes vos pages en changefreq always. (héhé)%%% Attention aussi, on est dans un fichier XML donc vous allez devoir remplacer vos @@&@@ par @@&@@, vos apostrophe par @@'@@ , les guillemets doubles par @@"@@, @@>@@ par @@>@@, @@<@@ par @@<@@. Un petit parsage des accents avec htmlentities ne ferait pas de mal non plus. (mais en changeant bien les @@&@@ dans @@és;@@ par @@&@@ donc @@&eacute;@@) Une sitemap ne doit pas contenir plus de 50 000 urls et ne doit pas dépasser 10mo. (vous pouvez la compresser, mais elle doit peser moins de 10mo décompressée) Un conseil : restez bien en dessous ! Mais comment faire lorsqu'on a 3 millions de pages... éh bien c'est assez simple, il suffit de séparer sa sitemap en plusieurs petites sitemaps et de créer une sitemap qui répertorie les urls de ces sitemaps, une sitemapindex quoi ! !!Sitemap Index En voici la structure : /// http://url-site-map.xml AAAA-MM-JJ /// Cette fois-ci @@lastmod@@ correspond à la date de dernière modification de la sitemap. (et non des pages qu’elle répertorie, même si en théorie cela va de paire)%%% A nouveau une sitemapindex ne peut contenir plus de 50 000 liens et ne doit pas dépasser 10mo. Et si on a besoin de plus de 50 000 liens ? 50 000*50 000=2 500 000 000, changez de métier, devenez apiculteur. Donc on résume : * Une sitemapindex répertoriant les sitemaps * Plusieurs sitemaps répertoriant toutes les pages du site Tous ces fichiers doivent être des fichiers XML et on se fiche de leur nom, et ils ne peuvent répertorier des fichiers se trouvant dans un répertoire inférieur que le leur. En gros vos sitemaps doivent se retrouver à la racine de votre site Web. Eh ouais. !!Donner à manger aux moteurs de recherches Pour donner des sitemaps à manger aux moteurs de recherches, [il y a plusieurs méthodes possibles|http://www.sitemaps.org/fr/protocol.php#informing], mais le plus simple est surement de rajouter une ligne au fichier robots.txt se trouvant à la racine de votre site : ///[apache] Sitemap: http://www.example.com/sitemap.xml /// Vous précisez ainsi le chemin vers votre sitemap, ou votre sitemapindex. Il est possible de préciser plusieurs sitemaps en ajoutant une nouvelle ligne @@Sitemap: …@@, ce qui évite de faire une sitemapindex pour 2 pauvres sitemaps ! !!Bien comprendre le protocole C’est a priori Google qui en est à l’origine du protocole sur les sitemaps ! Cela dit, c’est le site officiel du protocole, disponible en plusieurs langues, qui est une vraie mine d’or pour bien comprendre comment créer une sitemap aux normes. * [Protocole Sitemaps|http://www.sitemaps.org/fr/protocol.php] !!!Générer des sitemaps De manière générale, pour un site un peu gros, générer des sitemaps à la main, c’est malsain ! Surtout quand il est si simple de créer une classe PHP qui fait ça rapidement. Un exemple d’une méthode de ma classe PHP SiteMapGenerator : /// function buildSiteMap(&$sitemapindex_items) { /* Boucle sur les sitesmaps */ for($i=0;$i<4000;($i=($i+2000))) { $a_kw = mysql_query( 'SELECT cle_kw FROM `motclef` ORDER BY `cle_idt` ASC LIMIT '.$i.',2000' ) ; /* Ouverture du fichier */ $nomFichier = 'msitemap-'.$i.''.($i+2000).'.xml'; $fp = fopen($nomFichier, 'w') ; fputs($fp , ' ‘) ; /* Boucle sur les mots clefs */ while($kw = mysql_fetch_array($a_kw)) { fputs($fp, ‘ ‘.$this->base_front_url.$kw['cle_kw'].’.html ‘.date(‘Y-m-d’).’ ‘.$this->defaultChangeFreq.’ ‘.$this->defaultPriority.’ ‘); } /* Pour la sitemapindex */ $sitemapindex_items[] = array( ‘loc’ => $this->baseFrontUrl.$nomFichier, ‘lastmod’ => date(‘Y-m-d’), ‘changefreq’ => $this->defaultChangeFreq, ‘priority’ => $this->defaultPriority, ); /* Fermeture du fichier */ fputs($fp, ‘‘) ; fclose($fp); } /* Construction de la sitemapindex */ $this->buildSitemapIndex($sitemapindex_items) ; } function buildSitemapIndex($sitemapindex_items) { $nomFichier = ‘sitemapindex.xml’; $fp = fopen($nomFichier, ‘w’) ; fputs($fp , ‘ ‘); foreach($sitemapindex_items as $sitemap) { fputs($fp, ‘ ‘.$sitemap['loc'].’ ‘.$sitemap['lastmod'].’ ‘); } fputs($fp , ‘‘) ; fclose($fp); } /// On pourrait paufiner et ne changer que les pages qui ont été modifié, et ajouter les nouvelles en fin de fichiers, mais après tout la date n’est pas si importe que ça et ça me demandait de me plonger franchement dans les parser XML ce que je n’ai pas encore le courage de faire ! !!!Conclusion J’ai envi de dire qu’il ne reste plus qu’à réfléchir et à générer.

Google Alertes

Catégorie : Référencement | Laisser un commentaire

Je viens de découvrir un outils qui peut être bien utile lorsque l’on s’intéresse à un sujet en particulier, ou plus pratiquement, si l’on souhaite surveiller les sites parlant d’un thème similaire au(x) sien(s) sur la Toile. Il s’agit de [Google alertes|http://www.google.fr/alerts/manage?hl=fr&gl=fr]. L’idée est toute simple : j’ai un site sur les brioches et je veux savoir l’actualité de la brioche sur le Web. J’inscris le mot clef « brioche » dans ma liste de termes recherchés de Google Alertes, et ce dernier m’indiquera au fil du temps par e-mail ou via un flux RSS (visible directement via [Google reader|http://www.google.fr/reader/view/]) les derniers sites qui en parle. Cela permet, par exemple, de faire des rétro-liens sur des billets intéressants parlant du même sujet que les siens, ou de donner des compléments d’informations, ou des remarques sur le forum ou les commentaires du site en question, avec un lien vers son propre site dans la signature. Bref, on n’arrête pas le progrès ! (et moi j’apprends de plus en plus de choses dans le domaine du référencement)

Etude SEO : Bible Ipsum

Catégorie : Référencement | Laisser un commentaire

Petite étude SEO ([Search engine optimization|http://fr.wikipedia.org/wiki/Seo]) pour le site [Bible Ipsum|http://bibleipsum.free.fr]. Le but ? Le faire remonter un peu sur Google pour y amener des visiteurs. Bon certes, je ferai peut-être mieux de commencer par coder le système pour aider à traduire le site facilement, et corriger 2-3 bugs aussi, voir ajouter quelques fonctionnalités. Mais bon… C’est ma première étude SEO. A ma connaissance ce n’est pas franchement une science, ça s’apprend sur le tas, en testant, en lisant des articles ou des livres, et en observant ceux dont c’est le métier. !!!Mots clefs à travailler (et leurs déclinaisons) : (26) * Bible Ipsum * Lorem Ipsum, lipsum, dolor sit amet * Texte d’attente, de remplissage, de production, de pré-production * Paragraphe d’attente, de remplissage, de production, de pré-production * Générateur de texte d’attente, de remplissage, de production, de pré-production * Générateur de paragraphes d’attente, de remplissage, de production, de pré-production * Générateur de lignes * Générateur de mots * générateur de texte aléatoire * Générateur * Bible * Psaumes + Psaumes n * Texte de remplissage dans votre langue, en latin * (optimiser) lecture sur écran !!Table motclef motclef(id, kw, titre, texte, type(1 normal, 2 psaumes n)) !!!Pages à créer : * Page mot clef : mot-clef.html -> méta, titre, descriptif, barre de génération, 3 paragraphes des Psaumes à faire tourner, 4 liens (Bible Ipsum, Nous contacter, Plan du site, Politique d’accessibilité), 4 liens mots clefs * Politique d’accessibilité (déjà créé dans « plan du site » + parler des designs) !!!Pages à re-travailler : * Les méta et title sur toutes les pages * MAJ de la sitemap (xml et php) -> [billet à ce sujet|http://30minparjour.la-bnbox.fr/post/2009/Parlons-de-sitemaps] !!!Outils à (mieux) utiliser * [Google analytics|http://www.google.com/intl/fr_ALL/analytics/] * [Outils Google pour lesWebmasters|https://www.google.com/webmasters/tools/home?hl=fr] * [Google Alerts|http://www.google.fr/alerts/manage?hl=fr&gl=fr] sur les mots clefs principaux * [Backlinkwatch|http://www.backlinkwatch.com/index.php] * [Générateur de mot clef|https://adwords.google.fr/select/KeywordToolExternal] Je pense avoir défriché le gros du travail. Dès que je prend le temps, je me mets au développement et je retournerai ensuite à la phase de réflexion.

Traduction instantannée avec BabelFish

Catégorie : PHP objet | Laisser un commentaire

Parce qu’il faut bien mettre un petit peu en pratique de temps en temps, je me suis amusé à créer une class qui implémente un module de traduction à l’aide de [BabelFish|http://fr.babelfish.yahoo.com/] (le système de traduction de [Yahoo|http://fr.yahoo.com/]). En résumé, j’ai plusieurs attributs qui déterminent les différents paramètres de la classe (url de la page de retour, url de BabelFish, langue du message à traduire, langue de la traduction), le constructeur permet de définir ces deux derniers, puisque ce sont les seules succeptible de changer assez souvent ! (pour pouvoir faire du Espagnol -> Anglais ou Grec -> Chinois) L’url pour traduire une phrase avec BabelFish se décompose de la manière suivante ; * http://fr.babelfish.yahoo.com/translate_txt : base de l’url * lp : langues à utiliser (ex : fr_en) * trtext : chaine de caractères à traduire. Les caractères accentués sont bien traités, mais les guillements et les espaces posent un problème. Il faut remplacer les espaces par des + ou des %20, quant aux guillements, bah je n’arrive pas à savoir par quoi il fut les transformer, donc pour l’instant je bloque. Et voilà, il n’y a plus qu’à faire un petit @@file_get_contents@@ pour récupèrer la page chargée par cet url, et une petite regex pour ne récupèrer que la traduction : et le tour est joué ! /// langueIn = $langueIn; $this->langueOut = $langueOut; } // Mutator function setLangueIn($langueIn) { $this->langueIn = $langueIn; } function setLangueOut($langueOut) { $this->langueOut = $langueOut; } function setUrlGoogle($urlGoogle) { $this->urlGoogle = $urlGoogle; } function setUrlAction($urlAction) { $this->urlAction = $urlAction; } function afficherForm($aTraduire) { $form = ‘

Phrase à traduire
‘. »\n ».’
‘. »\n ».’
‘. »\n ».’

‘; echo $form; } function parse($string) { $string = str_replace(‘\ », ‘%27′, trim($string)); $string = str_replace(‘ ‘, ‘%20′, $string); return $string; } function traduire($aTraduire) { $url = $this->urlGoogle.$this->langueIn.’_’.$this->langueOut.’&trtext=’.$this->parse($aTraduire); $content = file_get_contents($url); $content = preg_replace(‘!^.*

(.*)

.*$!isU’, ‘$1′, $content); if (preg_match(‘!DOCTYPE!’, $content)) // Si on n’a pas réussi à traduire echo  »; echo ‘Traduction de « ‘.stripslashes($aTraduire).’ » : ‘.trim($content); } function main() { if (isset($_POST['translate']) && $_POST['translate']) $this->traduire($_POST['translate']); $this->afficherForm(@$_POST['translate']); } } $test = new TranslateGoogle(‘fr’, ‘en’); $test->main(); ?> /// Vous pouvez tester tout ça sur cette [page de test|/public/Test/ClassTranslateBabelFish.php]. Bon, là mon serveur ne semble pas trop apprécier @@file_get_contents@@, donc il va falloir que je modifie tout ça ^^ J’ai essayé d’utiliser Google qui fonctionnait bien mieux puisque l’on pouvait mettre n’importe quoi dans l’url, malheureusement ils font ça en Ajax du coup @@file_get_contents@@ renvoie la page chargé par le PHP (ou autre) mais ne s’occupe pas du Javascript, et donc on n’a pas la traduction… Dommage, l’url était joli : http://translate.google.fr/translate_t#fr|en|Phrase à traduire Quant à Voilà, l’url était aussi pas mal : http://trans.voila.fr/traduction_voila.php?isText=1&translationDirection=fe&stext=Phrase à traduire, mais il n’y avait trop de problème avec les caractères accentués. Voilà une petite class qui, une fois améliorée, devrait me servir pour un petit projet !