Meta-Press.es

Moteur de recherche décentralisé & revue de presse automatisée

Documentation

1. De quoi s’agit-il ?

Meta-Press.es est un outil pour faire des recherches dans la presse en ligne (presse internationale de référence journaux grand public, revues spécialisées…). Il peut servir par exemple à faire la revue de presse d’une grande association ou même de la veille scientifique (via certaines sources spécialisées). Les recherches s’effectuent par mots clés et vous pouvez sélectionner finement les sources dans lesquelles vous voulez chercher (par type, par langue, par thème, par type de résultat…). L’utilisateur a ainsi une totale maîtrise des journaux dans lesquels la recherche est faite et il lui est même possible d’ajouter ses propres sources.

Il est également possible d’automatiser des recherches pour les répéter chaque jour, chaque mois…

Ce moteur de recherche se présente sous la forme d’une extension pour navigateur web (au format standard WebExtension). Le travail de recherche et de classement des résultats est fait par l’extension elle-même, sur l’ordinateur de l’utilisateur, ce qui permet de lui conférer un grand contrôle de l’outil.

Meta-Press.es indexe déjà des centaines de sources et leur nombre augmente régulièrement.

Avec Meta-Press.es il n’y a pas de serveur central qui surveille et profile les utilisateurs pour adapter les résultats de recherche à leur profil et rajouter de la pub ciblée. Il n’y a donc pas d’effet de bulle comme c’est le cas avec les moteurs de recherche grand public et commerciaux.

Meta-Press.es fonctionne très bien avec le Tor Browser (qui a été conçu entre autre pour lire la presse de manière plus confidentielle qu’avec un navigateur web ordinaire).

Meta-Press.es est un logiciel libre au code source ouvert. Ceux qui connaissent HTML et JavaScript peuvent se l’approprier et l’adapter à leur usage (ou ajouter facilement de nouvelles sources).

Pour finir, Meta-Press.es est un outil efficace énergétiquement : pas besoin de datacenter au cercle polaire pour faire une recherche dans la presse…

1.1. Limites

Les limites de Meta-Press.es sont de ne chercher que dans les résultats récents (l’accès aux résultats anciens sera disponible prochainement), de ne classer les résultats que par ordre chronologique et de nécessiter d’installer une extension dans son navigateur !

2. Comment ça marche ?

Meta-Press.es est un méta-moteur de recherche qui vous permet d’interroger le moteur de recherche interne de chaque source (renseignée et sélectionnée).

Vous obtenez alors le nombre total de résultats que les sources annoncent avoir sur le sujet, ainsi que les derniers résultats publiés par chaque source.

À chaque requête, le site web des sources est parcouru et vous économisez ainsi le temps que les développeurs ont consacré à automatiser le processus :-)

Ce faisant Meta-Press.es n’active aucun système de suivi publicitaire des utilisateurs, protégeant votre vie privée. L’outil vous redonne par contre le choix de vos sources d’information et liste clairement dans quelles sources il a cherché.

Enfin, une fois votre recherche terminée, vous pouvez sélectionner des résultats et les exporter dans un format réutilisable (RSS, JSON, CSV…). Vous pourrez ainsi les réimporter dans Meta-Press.es ou les utiliser ailleurs (les envoyer par courriel à un ami par exemple, les importer dans un WordPress…).

3. Comment installer l’extension ?

Pour installer Meta-Press.es sur votre navigateur (Firefox ou dérivés, comme le Tor Browser) : ouvrir la page suivante addons.mozilla.org et cliquer sur le gros bouton bleu + Ajouter à Firefox.

4. Comment s’en servir ?

Une fois installée, l’extension crée un bouton dans la barre d’outils, avec l’icône de l’étoile filante de Meta-Press.es.

favicon metapress v2
Figure 1. bouton portant l’icône de Meta-Press.es

Un clic sur ce bouton ouvre un nouvel onglet sur l’interface du moteur de recherche.

Si l’icône n’est pas présente dans la barre d’outils, il se peut que vous n’ayez pas autorisé l’extension à fonctionner en mode "navigation privée" lors de l’installation alors que vous utilisez ce mode de navigation. Dans ce cas, il est toujours possible de donner cette autorisation en retrouvant Meta-Press.es dans la liste des addons du navigateur (accessible depuis son menu principal ou via l’adresse about:addons).

Profitez-en pour vérifier que les mises à jour automatiques sont activés pour bénéficier des dernières sources et fonctionnalités.

20210316 main page
Figure 2. interface du moteur de recherche

Sous le nom de l’extension dans cet onglet, les gros titres des journaux sélections sont chargés et défilent.

Vous pouvez saisir votre requête et choisir dans quels journaux chercher, grâce au mécanisme multi-critères de filtrage des sources.

Les résultats sont ensuite listés en dessous quand ils arrivent.

Chaque résultats comporte un titre, un lien vers l’article, sa source, sa date, et potentiellement un auteur et un extrait :

20191029 meta press result
Figure 3. détails d’un résultat

Les outils pour travailler sur ces résultats (tri, filtrage, sélection), apparaissent dans la colonne à droite des résultats.

20210316 results
Figure 4. nombre de résultats par source et filtrage par source, en cliquant sur le nom d’une source
20171216 meta press country
Figure 5. filtrage par date

Vous pouvez par exemple cliquer sur le lien "Toggle selection mode" pour faire apparaître une case à cocher pour chaque résultat et commencer à en sélectionner. Vous pouvez ensuite exporter cette sélection en différents formats (JSON, RSS, ATOM, et bientôt CSV).

20191029 meta press europe selection mode crop circles
Figure 6. mode de sélection pour export

Pour ré-importer les résultats d’une recherche exportés dans un fichier, cliquez sur le lien "Import JSON" (ou resp. RSS, ATOM) dans la barre horizontale turquoise tout en haut et sélectionnez le fichier en question sur votre disque dur.

4.1. Chercher dans une source précise

Il est possible de choisir une par une les sources dans lesquelles ont souhaite chercher.

Pour cela, il faut déplier le panneau de critères de filtrage des sources, en cliquant sur le [+] situé devant le titre. Une 2e ligne apparait alors, comportant une case nommée "Choisir les sources".

20210127 meta press.es capture filtres sources
Figure 7. Filtre source par source

Toutes les sources présentes sont listées là, et il est possible de sélectionner seulement celles qu’on veut.

4.2. Permaliens et marque-pages

Lorsqu’une recherche est terminée une ligne de statistiques apparait au dessus des premiers résultats. Cette ligne comporte une icône "maillons de chaîne" 🔗 en fin de ligne. Cette icône est un lien permettant de lancer cette recherche à nouveau.

20210128 permalink
Figure 8. Icône "maillons de chaîne" du permalien

Il est ainsi possible de créer un marque page sur sa recherche favorite, sans avoir à la configurer à chaque fois.

4.3. Recherches programmées

Une fois les termes de recherche saisis et la sélection des sources faites, vous pouvez sauver ces réglages et programmer la recherche pour plus tard au lieu de la lancer immédiatement. Il suffit pour ça de cliquer sur le bouton ⏰ Recherche programmée. Ce bouton ouvre l’onglet des réglages sur la partie réservée à la gestion des recherches programmées.

20210210 recherche automatique
Figure 9. Recherches programmées, avec interface en fond sombre

Ce tableau montre une ligne par recherche programmée. À sa création, une recherche programmée est "Désactivée", mais il suffit de régler la date et l’heure de sa prochaine exécution et de choisir sa périodicité pour qu’elle s’active.

Vous pouvez ainsi programmer une recherche quotidienne en quelques clics.

Des actions sont possibles sur chaque recherche :

  • le 1er bouton, avec un crayon ✏️, ouvre un onglet sur l’interface principale, configurée avec les paramètres de cette recherche (termes de recherche, choix des sources). Si vous modifiez ces réglages vous pouvez les sauver en cliquant sur le bouton de recherches programmées de l’interface principale ;

  • le 2e bouton, avec une icône copier/coller permet de cloner une recherche programmée pour en faire une deuxième, configurée différemment ;

  • le 3e bouton, avec une croix, permet de supprimer une recherche programmée ;

  • le 4e et dernier bouton permet de lancer manuellement la recherche en question.

5. Comment ajouter une source au moteur de recherche ?

Si vous êtes un programmeur, ajoutez simplement une entrée dans le fichier js/sources.json.

Pour tester votre travail avant de l’envoyer, vous pouvez importer vos propres sources depuis les paramètres de l’extension.

Voici quelques exemples utiles, listés en haut du fichier js/sources.json :

  • Mediapart.fr/en est un bon exemple, de source "normale" utilisant des sélecteurs CSS

  • New Europe est un exemple de source fournissant ses résultats au format RSS

  • New Europe Greece étend la définition de source New Europe

  • The Washingtown Post fourni ses résultats en JSON

  • The Japan News utilise la méthode HTTP POST

  • Helsinky Times a besoin de sélecteurs XPaths pour récupérer certains champs

5.1. Méthodologie

  • Tout d’abord, charger la page de la source et noter l’adresse, si possible en HTTPS ;

  • Puis, tester la fonctionnalité de recherche :

    • Vérifier si les résultats sont accessibles en RSS (ou ATOM) en utilisant les outils de Développeurs de Firefox (touche F12, onglet par défaut Inspecteur, rechercher "rss") cela économiserait 2/3 du travail d’intégration

      • si c’est le cas : il n’est pas nécessaire de préciser le fuseau horaire ("tz") de la source dans les tags

    • vérifier que cette URL fourni des résultats triés du plus récent au plus ancien, ou chercher à obtenir ce tri, sinon la source est dite incompatible, voir l’encart ci-dessous

    • si l’URL des résultats ne comporte pas vos termes de cherche, c’est que cette source utilise la méthode HTTP POST, vous pouvez alors vous inspirer de la source The Japan News

    • essayer de faire une recherche sur plusieurs termes et d’obtenir des résultats contenant l’ensemble de vos termes (alors liés par un "et" logique). Il est sinon possible d’ajouter des guillemets autour du groupe de termes pour obtenir une recherche exacte. S’il n’est pas possible d’obtenir un "et" logique entre les termes, il faudra préciser le tag "or" dans les tags techniques.

    • noter une recherche donnant des résultats. Les termes de recherche par défaut sont "quadrature du net" mais "gilets jaunes" ou "yellow vests" complètent bien quand il y a besoin.

    • vérifier si cette source peut fournir des résultats de différent types (text, image, video, audio), si c’est le cas, il est possible de créer une source par type de résultat (ce qui est rapide en étendant la première définition).

  • Chercher le flux RSS principal de la source.

  • Chercher le favicon de la source (la plus petite version disponible, idéalement 32px de large)

Si quelques chose se passe mal, comme par exemple :

  • pas de fonctionnalité de recherche

  • pas de date sur les résultats

  • pas de tri par date

Il est important de contacter la source en question pour lui proposer de faire évoluer sa fonctionnalité de recherche, puis de lister la source parmi les sources incompatibles où l’on peut également noter l’état d’avancement de sa tentative de retour utilisateur auprès de la source.

Il est également possible de contacter les sources n’ayant pas encore été contactées, et n’ayant donc pas encore d’information concernant le statu du retour utilisateur à leur formuler.

Une fois ces premiers tests effectués, vous pouvez vous lancer sereinement dans la rédaction de votre définition de source. Il y a 4 sortes d’informations à fournir :

  • informations générales : le nom, le fuseau horaire, la langue et autres à la fin ;

  • gros titres : une entrée pointant vers le flux RSS principal de la source ;

  • recherche : l’URL du moteur de recherche de la source ;

  • analyse des résultats : 5 entrées pour décrire les champs des résultats (les deux dernières étant facultatives) :

    • titre : r_h1

    • lien : r_url

    • date : r_dt

    • extrait : r_txt

    • auteur : r_by

Chacune que ces entrées peut être suivie d’une entrée du même nom mais suffixée _attr ou _re, afin de préciser un attribut de balise HTML (ou un attribut JavaScript de node HTML [1]) à lire, ou effectuer un remplacement du texte pointé par motif d’expression rationnelle (via la fonction .replace() du JavaScript). La version _re doit donc définir une liste de deux éléments : le premier est la chaîne de caractère permettant de créer l’expression rationelle (RegEx) en question, et le second est le motif de remplacement (il y a des exemples un peu plus bas).

Il est encore possible de donner une entrée suffixée par _xpath pour utiliser un sélecteur XPath au lieu d’un sélecteur CSS.

5.2. Documentations sur CSS, RegEx et XPath

5.2.1. JSON

La syntaxe JSON chez Mozilla ou json.org : gardez juste en tête qu’il faut utiliser des guillemets doubles et ne pas laisser de virgules trainantes.

5.2.2. Sélecteurs CSS

Documentation Mozilla concernant les sélecteur CSS

Une seconde doc. sur le sujet CSS selectors complète et bien illustrée, mais en anglais sur medium.com

5.2.3. RegEx : expressions rationelles

Expressions Régulières, par Mozilla.

Vue d’ensemble en anglais.

5.2.4. XPath

Documentations Mozilla en français.

XPath vision d’ensemble, en anglais

5.3. Exemples

5.3.1. Définition de source basée RSS

{
	"https://www.neweurope.eu": {
		"favicon_url": "https://www.neweurope.eu/wp-content/uploads/2019/07/NE-16.jpg",
		"news_rss_url": "https://www.neweurope.eu/feed/",
		"search_url": "https://www.neweurope.eu/search/{}/feed/rss2/", (1)
		"search_url_web": "https://www.neweurope.eu/?s={}", (2)
		"type": "XML", (3)
		"tags": {  } (4)
	}
}
1 Dans cette URL, Meta-Press.es remplacera le jeton {} par vos termes de recherche.
2 Cette 2e URL permet de renvoyer les utilisateurs vers la page web de leur recherche, pour approfondir leur recherche sur une source donnée.
3 Quand il n’y a pas de type défini pour une source, les résultats de la source sont traités comme étant du HTML. Ici, on précise que la source répond en XML mais ça pourrait encore être du JSON.
4 Les tags sont expliqués plus bas

5.3.2. Extension de vos propres définitions de source

	"https://www.neweurope.gr": {
		"extends": "https://www.neweurope.eu", (1)
		"favicon_url": "https://www.neweurope.gr/wp-content/uploads/2019/07/favicongr-16.jpg",
		"new_rss_url": "https://www.neweurope.gr/feed/",
		"search_url": "https://www.neweurope.gr/search/{}/feed/rss2/",
		"search_url_web": "https://www.neweurope.gr/?s={}",
		"tags": {  }
	}
1 Ici "https://www.neweurope.eu" est la clé de la source à étendre, la première chaîne de caractère d’une source.

Dans ce cas, on part de de la source à étendre https://www.neweurope.eu et on redéfinit certaines entrées "localement" pour https://www.neweurope.gr.

Si vous avez besoin de retirer un élément fournit par la source étendue, vous pouvez le déclarer dans la nouvelle source et lui attribuer la valeur null. L’élément ne sera pas considéré par Meta-Press.es

5.3.3. Définition de source basées sur JSON

Pour diagnostiquer un cas de chargement des résultats via une requête AJAX et travailler sur l’objet JSON correspondant il est possible de s’appuyer sur les outils développeurs de Firefox. La touche F12 permet d’ouvrir la fenêtre correspondante, puis se rendre dans la console JavaScript. Les requêtes XHR qui ont lieu après le chargement initial de la page inspectée y apparaissent. Une fois la requête repérée, l’outil permet de déplier les informations associées, dont le contenu de la réponse reçue (ici c’est donc un objet JSON) de parcourir ce contenu voire effectuer des recherches dedans.

Si la requête inspectée contient bien les résultats de notre recherche on dispose de son adresse et il reste à préciser les chemins d’accès à chaque information.

	"https://www.washingtonpost.com": {
		"favicon_url": "https://www.washingtonpost.com/favicon.ico",
		"type": "JSON",
		"search_url": "https://sitesearchapp.washingtonpost.com/sitesearch-api/v2/search.json?query={}&count={#}&sort=displaydatetime desc",  (1) (2)
		"search_url_web": "https://www.washingtonpost.com/newssearch/?query={}&btn-search=&sort=Date&datefilter=All%20Since%202005",
		"res_nb": "results.total", (3)
		"results": "results.documents", (4)
		"r_h1": "headline",
		"r_url": "contenturl",
		"r_dt": "pubdatetime",
		"r_txt": "blurb",
		"r_by": "authors", (5)
		"r_by_attr": "name", (5)
		"tags": {  }
1 Meta-Press.es remplacera le jeton {#} par le nombre maximum de résultats à lire depuis cette source. Cette valeur est configurable dans les paramètres de l’extension.
2 Pour cet exemple, l’URL a été coupée (car elle était trop longue) mais j’ai laissé le paramètre GET sort=displaydatetime desc car il est important d’obtenir des résultats triés les plus récents en premier
3 Lorsqu’on analyse un objet JSON, on peut préciser un chemin pour accéder à un sous élément (dans le plus pur style JavaScript de notation pointée)
4 Ce chemin mène à la liste des résultats, Meta-Press.es va la parcourir.
5 Ces deux lignes sont en fait tirée de la définition de source "https://www.arretsurimages.net". L’entrée r_by pointe une liste JSON et l’entrée r_by_attr désigne un attribut des objets de la liste. Meta-Press.es formera donc une chaîne de caractère en rassemblant l’attribut en question de chaque élément de la liste pointée. On récupère ici en pratique la liste complète des auteurs.
jsonp_to_json_re

Les résultats sont parfois servis en "jsonp". Cela signifie que les données au format JSON sont cachées dans un programme JavaScript normal.

Dans ce cas, il est possible de spécifier un motif de remplacement par expression rationnelle afin d’extraire la portion de JSON du reste du script (considéré comme une chaîne de caractères).

json_to_html

Les résultats peuvent également être envoyés sous forme de HTML valide embarqué dans un objet JSON.

Dans ce cas il est possible de préciser dans une entrée json_to_html un chemin JSON pointant vers la chaîne de caractère HTML à parser.

Pour l’instant un seul chemin est utilisable mais il se pourrait que la chose soit déclinée champs par champs (r_h1_html, r_url_html…).

5.3.4. Définition de source basées sur des sélecteurs CSS

	"https://www.mediapart.fr": {
		"favicon_url": "https://www.mediapart.fr/assets/front/favicon/journal/favicon-32x32.png",
		"news_rss_url": "https://www.mediapart.fr/articles/feed",
		"search_url": "https://www.mediapart.fr/search?search_word={}&sort=date&order=desc",
		"res_nb": ".sub-title",
		"res_nb_re": ["^(\\d+) ", "$1"], (1)
		"results": "ul.search > li", (2)
		"r_h1": "h2",
		"r_url": "h2 a",
		"r_url_attr": "href", (3)
		"r_dt": "span.author",
		"r_dt_fmt_1": [
			"\\s(\\d+)[erèm]* (.+) (\\d{4})",
			"$3-{$2}-$1"
		], (4)
		"r_txt": "p",
		"r_by": ".author a[rel=author]",
		"tags": {  }
	},
1 res_nb peut lui aussi être accompagné d’une entrée complémentaire _re, ici cela permet d’extraire le nombre de résultats au début d’une chaîne plus grande
2 C’est cette expression CSS qui permet d’extraire les résultats de la page, elle pointe directement vers les résultats, attrapés grâce un querySelectorAll(). Notons l’utilisation d’un sélecteur CSS strict (avec >) pour s’assurer qu’on n’attrapera pas des éléments indésirés éventuellement présents ailleurs sur la page
3 r_url_attr permet de cibler l’attribut href
4 r_dt_fmt_1 :
  • Ici nous capturons les différents éléments de la date pour les remettre dans l’ordre attendu par JavaScript. De plus le nom du mois est entouré d’accolades dans le motif de remplacement {$2} et il sera converti en son numéro de mois.

  • On peut noter que la barre oblique inversée (ou anti-slash) est le caractère d’échappement en JavaScript, et qu’il est du coup nécessaire de l’échapper lui-même pour l’encoder dans une chaîne de caractères, d’où les : \\s et \\d.

  • Enfin, comme le nom du champ le laisse supposer, il est possible de définir autant de format de date que nécessaire, dans le cas où la source en utilise plusieurs (notamment des formats de date relative pour les résultats récent : « il y a 1h » ou « hier » à traduire en anglais).

5.3.5. Définition de source basées sur la méthode HTTP POST

	"https://the-japan-news.com": {
		"favicon_url": "https://the-japan-news.com/favicon.ico",
		"method": "POST", (1)
		"body": "siteSearchInput={}&x=7&y=11&span=365", (2)
		"search_url": "https://the-japan-news.com/news/search",
		
		"r_dt": "time", (3)
		"r_dt_attr": "datetime", (3)
		
	}
1 En plus de l’habituel search_url, il y a ici besoin de l’entrée method positionnée à POST
2 Et d’un body pour la requête. C’est une chaîne de caractère l’équivallente à la query string des paramètres de requête GET. Ce format est nommé application/x-www-form-urlencoded. Les données doivent parfois être envoyée en JSON et il faut alors ajouter une entrée search_ctype contenant la chaîne 'application/json'.
3 On peut noter que quand une balise HTML <time datetime=""> est présente il est préférable de l’utiliser car elle évite d’avoir a reformater la date à l’aide d’un motif de remplacement, et aussi d’avoir à préciser le fuseau horaire de la source dans les tags.

5.3.6. Définition de source basée sur des chemins XPath

XPath est un language très puissant et peut être utilisé pour remplacer tous les sélecteurs CSS.

   "https://www.helsinkitimes.fi": {
		"favicon_url": "https://www.helsinkitimes.fi/templates/ja_teline_v/favicon.ico",
		"news_rss_url": "https://www.helsinkitimes.fi/?format=feed&type=rss",
		"search_url": "https://www.helsinkitimes.fi/search1332318146.html?searchword={}&ordering=newest&searchphrase=all&limit={#}", (1)
		"res_nb": ".searchintro .bagde",
		"results": ".result-title",
		"r_h1": "a",
		"r_url": "a",
		"r_url_attr": "href",
		"r_dt_xpath": "./following-sibling::dd[@class='result-created'][1]/strong", (2)
		"r_txt_xpath": "./following-sibling::dd[@class='result-text'][1]",
		"r_by_xpath": "./following-sibling::dd[@class='result-category'][1]/span",
		"tags": {  }
	}
1 Comme pour le WaPo et sa réponse en JSON, the Helsinky Times permet de préciser combien de résultats nous voulons en réponse à notre requête. Meta-Press.es remplacera le jeton {#} par le nombre de résultats voulus.
2 À la place d’une entrée r_dt normale, ici on a une entrée r_dt_xpath. Ce champs n’est donc pas défini par un sélecteur CSS mais par un sélecteur de chemin XPath. Dans ce cas précis, cela nous permet de désigner l’élément suivant relativement à l’élément courant, ce qui n’est pas possible en CSS.

On peut également noter que :

  • XPath permet d’atteindre l’élément parent de l’élément courant, ce qui n’est pas non plus possible en CSS.

  • XPath est également nécessaire pour désigner des balises XML dont le nom fait partie d’un espace de nommage, comme c’est le cas du champs Auteur de la plupart des flux RSS (étendus via la DTD Dublin Core).

5.4. Expressions Rationnelles

Les expressions rationnelles (ou régulières, RegEx) sont un sujet complexe. Voici à nouveau un peu de documentation à ce propos : Expressions Régulières.

Si vous avez déjà travaillé avec des RegEx voici un rappel des quelques points à garder en tête concernant l’usage qui en est fait avec Meta-Press.es :

  • les motifs de reconnaissance doivent être délimités de chaque côté pour attraper tout et non pas une partie seulement de ce que vous souhaitez, par exemple ici : "\\s(\\d+) " il y a n’importe quel blanc (\s espace ou tabulation) avant et après le groupe de chiffres à attraper.

  • vous aurez principalement besoin de : \\d+ \\w+ \\s+ (pour décrire des nombres, des mots et des blancs)

  • ensuite vous aurez principalement besoin de : () ()? (?:) pour extraire les motifs entre parenthèse, spécifier des motifs facultatifs suivit d’un ? et spécifier un motif à ne pas extraire, avec ?: au début de la parenthèse.

Les motifs à extraire sont ré-injectables dans le motif de remplacement via l’expression $1 pour le premier motif entre parenthèses, $2 pour le suivant…

5.5. Images

L’intégration des images dans les résultats de Meta-Press.es a été simplifié par l’ajout des champs : r_img, r_img_src, r_img_alt et r_img_title.

r_img permet de récupérer directement tous les champs d’une image. Il faut que le champs cible une balise HTML d’image <img … comportant l’attribut src et optionnellement un texte alternative dans l’attribut alt et un titre dans l’attribut title.

S’il faut aller chercher ces informations ailleurs (comme pour Euronews où les valeurs sont à retrouver dans les attributs data-src, data-alt et data-title, ou Die Press où les valeurs sont éparpillées entre plusieurs balises) il est possible de compléter la définition de l’image avec les champs r_img_src, r_img_alt et r_img_title, éventuellement suivis des champs r_img_src_attr, r_img_alt_attr et r_img_title_attr.

Pour les sources de type JSON qui ont des images (telles que La Croix ou Les Echos), r_img n’est pas inutilisable, r_img_src est obligatoire et il est recommandé d’ajouter r_img_alt et r_img_title s’il sont disponibles.

Il est tout à fait possible d’utiliser des expressions régulières sur ces champs avec re (ex. _El Mercurio(fotos)) ou des templates avec tpl (ex. _Les Echos).

5.6. Format de date

Meta-Press.es supporte tous les formats de date acceptés par l’instruction JavaScript : new Date("date_string") ainsi que les dates relatives anglaises comme 2 minutes ago, 8 hours ago et même today et yesterday.

5.6.1. Langues

Pour les sources d’autres langues, les dates doivent être converties dans l’un des formats supportés (c’est généralement le format ISO : aaaa/mm/jj hh:mm:ss tz qui est utilisé).

5.6.2. Date relatives

De plus de nombreuses sources utilisent un format qui varie en fonction de l’age des résultats. Il arrive ainsi que l’on rencontre un format de date relatif (« il y a 1h » « hier ») pour les dates proches et un format absolu (la date elle même) passé un certain temps. Pour faire face à tous les cas de figure il est possible de préciser plusieurs formats de date, numérotés ainsi : r_dt_fmt_1 r_dt_fmt_2

Ce "format" est tout simplement un motif de remplacement par expression rationnelle qui doit aboutir à un format supporté. Pour chaque résultat de la source en question, les formats de date seront essayés les uns après les autres en s’arrêtant au premier qui donne un résultat valide.

5.6.3. Fuseaux horaise

Concernant les fuseaux horaires, Meta-Press.es utilise la fonction timezoned_date() du fichiers js/BOM_utils.js, elle-même construite autour de la fonction toLocaleTimeString() pour créer des dates appartenant à un fuseau horaire précis (celui fourni par l’entrée "tz" des "tags" s’il n’est pas inclu dans le format de date attrapé). Une fonction native de l’API JavaScript serait bienvenue dans ce domaine.

5.6.4. Conversion des noms de mois

Comme signalé en commentaire de l' exemple à base de sélecteur CSS, il est possible de convertir un nom de mois en son numéro en le faisant apparaitre dans le format de sortie, entouré d’accolades : $3-{$2}-$1.

Toutefois, si votre date est en anglais dans un journal de japonais, il faudra préciser un date_locale dans les tags pour que la convertion des noms de mois fonctionn

Une date_locale est notamment mise en œuvre pour la version Espéranto du Monde Diplomatique.

5.7. Tags

Il est impératif de reproduire au moins l’ensemble suivant d’étiquettes de classement (ou tags) pour chaque source définie.

Les suivants sont ceux de la source 'Mediapart.fr/en' :

"tags": {
	"name": "Mediapart.fr",
	"lang": "pt", (1)
	"country": "br", (2)
	"themes": ["general", "politics"],
	"tech": ["one word", "fast"], (3)
	"src_type": ["Press", "Reference Press"],
	"res_type": ["text", "image"],
	"tz": "Europe/Paris", (4)
	"charset": "gb2312", (5)
	"date_locale": "en" (6)
}
1 Le digramme de la langue selon la norme ISO 639.
2 Le digramme du pays selon la norme ISO 3166.
3 Les étiquettes de l’entrée "tech" fonctionnent principalement par paires :
  • one word ou many words dépendent de la capacité de la source donner des résultats correspondant à un mot ou à tous les mots d’une recherche. Si même pour un seul mot la source renvoie des résultats non pertinents ou approximatifs, on lui attribue l’étiquette approx, ces sources sont généralement décevantes si on les interroge sur des sujets pour lesquels elles n’ont pas de contenu, mais restent pertinentes pour les sujets largement couverts par la presse. Si la source est configurée pour renvoyer des résultats correspondant exactement à l’expression recherchée (par exemple parce qu’elle est intégrée avec des guillemets autour des termes de recherche dans son URL) on l’étiquette exact.

  • fast ou slow dépend pour l’instant de la vitesse de chargement des résultats à froid sur le poste du développeur principal. Si les résultats mettent moins de 3s à arriver alors l’étiquette fast est attribuée. Il est prévu d’implémenter un test de vitesse à lancer sur le poste de chaque utilisateur afin d’avoir une meilleur répartition.

  • external search se réfère au moteur de recherche mis en œuvre par la source. Si la source utilise un prestataire externe (comme Google News) alors l’étiquette external search doit lui être attribuée. En pratique pour l’instant le développeur principal n’intègre pas de sources à recherche externe. C’est pourquoi le Guardian n’est pas encore disponible, mais on espère beaucoup qu’ils reprennent la souveraineté de leur moteur de recherche.

  • indep. : si une source ne fait pas partie d’un grand groupe sans activité journalistique, ni n’est détenue par un état ou un groupe coté en bourse, elle peut être définie comme indépendante via cette étiquette.

  • for kids les sources "pour enfants" sont les seules disponibles lorsque le "mode enfant" est activé. Vous êtes également encouragés à préciser l’une des deux étiquettes : for kids < 9 ou for kids > 9 pour affiner en fonction de l’age, le public cible de la source.

  • HTTPS / HTTP est une étiquette calculée automatiquement au chargement des sources. Elle permet de ne chercher par défaut que dans les sources offrant le niveau de confidentialité atteint par le chiffrement du protocole HTTPS.

  • l’étiquette broken permet d’éviter une source (par exemple si elle vient d’être rapportée comme étant défectueuse) elle n’est alors plus disponible.

4 Le fuseau horaire tz est une étiquette utile seulement si la date lisible dans les résultats ne comporte pas déjà cette information.
5 L’encodage des caractères (ou charset) n’est utile que pourles sources ne servant pas leurs page web en UTF8.
6 Préciser une locale spécifique aux dates n’est utile que si vous avez un nom de mois à convertir en son nombre et que la date n’est pas écrite dans la même langue que le reste du journal.

5.8. Rassembler plusieurs éléments mis en forme pour un champs

Dans le cas d’une recherche sur des sources donnant des résultats de type "image", il est intéressant d’afficher conjointement une photo et la description associée.

Pour faire ça, il est possible de définir une liste d’éléments (chemins JSON ou sélecteurs CSS…) pour le champs visé (exemple : r_txt) et d’ajouter une entrée r_txt_tpl, contenant une chaîne de caractère. Cette chaîne de caractère peut alors contenir des jetons de remplacement de la forme $1, $2 … correspondant à la valeur respective des éléments décrits dans la liste.

De plus, il est possible de définir un r_txt_attr avec une liste de nom d’attributs à récupérer sur les éléments pointés.

Enfin, si le dernier attribut est manquant dans la liste, c’est le textContent de l’élément qui sera récupéré.

Voir la source "El Mercurio (fotos)" ou "Midi Libre photos", ainsi que "Süddeutsche Zeitung" pour la liste incomplète d’attributs.

5.9. Redirections

Il arrive qu’une source ait besoin d’effectuer une redirection HTTP pour fournir ses résultats. S’il est possible de viser directement la 2e URL, ça reste le plus simple. Mais si ce n’est pas possible, comme avec le Daily Telegraph alors on peut ajouter un champs redir_url dans la définition de la source. Meta-Press.es demandera alors également la permission d’hôte pour cette URL.

5.10. Domaine

Si une source utilise des URL relatives dans ses attributs href, mais que ces URL ont besoin d’être complétées d’un préfix contenant le domaine et des sous-dossiers, vous pouvez ajouter un champs "domain_part" dans la définition de la source. Par exemple :

{
	
	"domain_part": "http://china.dailynk.com/chinese"
	
}

5.11. Assitance

Si vous avez des questions auxquelles cette documentation ne répond pas au sujet de l’ajout de nouvelles sources dans Meta-Press.es, vous pouvez les poser (par ordre de préférence) :

  • soit dans une "Issue" du dépôt de code Framagit de Meta-Press.es ;

  • soit sur IRC : #meta-press.es@geeknode.org (de préférence en semaine aux horaires de bureau) ;

  • soit par courriel : meta-press.es /\ d12s [] fr


1. Ce qui permet par exemple de préciser innerHTML afin de récupérer quelque chose dans le texte d’un commentaire HTML.