Passer au contenu principal

Outils du moteur de gabarit (tools)

Dans le moteur de gabarits Template Toolkit, une variable globale $tools est disponible. Elle contient un ensemble d'outils accessibles dans n'importe quel gabarit ainsi qu'à l'intérieur des scrapers JS. Il existe également une variable $tools.error qui contient la description des erreurs si elles surviennent lors de l'utilisation de ces outils.

Ajout de requêtes $tools.query.*

Cet outil permet d'ajouter des requêtes à celles déjà existantes directement pendant l'exécution d'une tâche, en les formant sur la base des résultats déjà collectés. Il peut être utilisé comme alternative à la fonction Parser jusqu'au niveau / Parse to level dans les scrapers où elle n'est pas implémentée. Il existe 2 méthodes :

  • [% tools.query.add(query, maxLevel) %] - ajoute une requête unique
  • [% tools.query.addAll(array, item, maxLevel) %] - ajoute un tableau de requêtes

Le paramètre maxLevel indique jusqu'à quel niveau ajouter les requêtes et est facultatif : s'il est omis, le scraper ajoutera de nouvelles requêtes tant qu'il y en aura. Il est également recommandé d'activer l'option Unique queries (Requêtes uniques) pour éviter les boucles infinies et le travail superflu du scraper.

Il est possible de définir un niveau arbitraire pour les sous-requêtes. Cela peut être utilisé pour distribuer la logique, c'est-à-dire quand chaque niveau correspond à une fonctionnalité distincte.

exemple :

  • [% tools.query.add({query => query, lvl => 1}) %] - ajoute une requête à un niveau spécifique.

exemple pour JS :

this.query.add({
query: "some query",
lvl: 1,
})
Exemple

Résultat du fonctionnement de la présélection sur la capture d'écran :

scraper :
parser
what is parsing in programming
parsing in compiler
compiler and parser development
what is syntax analysis
difference between lexical analysis and syntax analysis
syntax analyzer
parser programming language
parser:
parser definition
xml parser
parser generator
parser swtor
parser c++
ffxiv parser
html parser
parser java
what is parsing in programming:
parse wikipedia
parser compiler
what is a parser
parsing programming languages
definition of parser
parsing c++
parser define
parsing java
html parser:
online html parser
html parser php
html parser java
...

Analyse de structures JSON $tools.parseJSON()

Cet outil permet de désérialiser des données au format JSON en variables (objet) accessibles dans le moteur de gabarits. Exemple d'utilisation :

[% tools.parseJSON(data) %]

Après la désérialisation, les clés de l'objet obtenu peuvent être manipulées comme des variables et des tableaux ordinaires. Si une chaîne avec un JSON invalide est passée en argument, le scraper enregistrera l'erreur dans $tools.error.

Exemple

Sortie en CSV $tools.CSVline

Cet outil convertit automatiquement les valeurs au format CSV et ajoute un saut de ligne. Ainsi, dans le format de résultat, il suffit d'énumérer les variables souhaitées pour obtenir en sortie un fichier CSV valide, prêt à être importé dans Google Docs / Excel / etc.

Exemple d'utilisation :

[% tools.CSVline(query, p1.serp.0.link, p2.title) %]

Vidéo utilisant $tools.CSVline() :

Travail avec la base de données SQLite $tools.sqlite.*

Cet outil permet de travailler facilement et pleinement avec des bases de données SQLite. Il existe trois méthodes :

  • $tools.sqlite.get() - méthode permettant d'obtenir une information unique de la BD via SELECT, par exemple :
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
  • $tools.sqlite.run() - méthode permettant d'exécuter des opérations sur la BD (INSERT, DROP, etc.), par exemple :
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
  • $tools.sqlite.all() - méthode permettant d'afficher toutes les données d'une table, par exemple :
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]

Substitution de l'user-agent $tools.ua.*

Cet outil est conçu pour remplacer le user-agent dans les scrapers qui l'utilisent (par exemple, Net::HTTPNet::HTTP). Il existe deux méthodes :

  • $tools.ua.list() - contient la liste complète des user-agents disponibles.
  • $tools.ua.random() - affiche un user-agent aléatoire parmi ceux disponibles.

Exemple d'utilisation :

Exemple
astuce

La liste de tous les user-agents est stockée dans le fichier files/tools/user-agents.txt, qui peut être édité si nécessaire.

note

Lors de l'utilisation de cet outil pour le paramètre User agent dans les scrapers, il est nécessaire de l'indiquer explicitement :

[% tools.ua.random() %]

Support de JS dans tools $tools.js.*

Cet outil permet d'ajouter vos propres fonctions JS et de les utiliser directement dans le moteur de gabarits. L'utilisation des modules Node.js est également supportée. Les fonctions sont ajoutées dans Tools (Outils) -> JavaScript Editor (Éditeur JavaScript)

Travail avec base64 $tools.base64.*

Cet outil permet de travailler avec le base64 directement dans le scraper. Cet outil possède 2 méthodes :

  • $tools.base64.encode() - encode le texte en base64
  • $tools.base64.decode() - décode une chaîne base64 en texte

Exemple d'utilisation :

Exemple

Répertoire de données $tools.data.*

Cet outil est essentiellement un objet contenant une grande quantité d'informations prédéfinies : langues, régions, domaines pour les moteurs de recherche, etc. Liste complète des éléments (susceptible de changer à l'avenir) :

"YandexWordStatRegions", "TopDomains", "CountryCodes", "YahooLocalDomains", "GoogleDomains", "BingTranslatorLangs", "Top1000Words", "GoogleLangs", "GoogleInterfaceLangs", "EnglishMonths", "GoogleTrendsCountries"

Chacun de ces éléments est un tableau ou un hash de données ; vous pouvez visualiser le contenu en affichant les données, par exemple, en JSON :

[% tools.data.GoogleDomains.json() %]

Stockage de données en mémoire $tools.memory.*

Un simple stockage clé/valeur en mémoire, commun à toutes les tâches, requêtes API, etc., réinitialisé lors du redémarrage du scraper. Il existe trois méthodes :

  • [% tools.memory.set(key, value) %] - définit la valeur value pour la clé key
  • [% tools.memory.get(key) %] - retourne la valeur correspondant à la clé key
  • [% tools.memory.delete(key) %] - supprime de la mémoire l'entrée correspondant à la clé key

Obtention d'informations sur la version d'A-Parser $tools.aparser.version()

Cet outil permet d'obtenir des informations sur la version d'A-Parser et de les afficher dans le résultat.

Exemple d'utilisation :

[% tools.aparser.version() %]

Obtention de l'ID de la tâche et du nombre de threads $tools.task.*

Cet outil permet d'obtenir des informations sur l'ID de la tâche et d'afficher le nombre de threads. Il existe deux méthodes :

  • [% tools.task.id %] - retourne l'ID de la tâche
  • [% tools.task.threadsCount %] - retourne le nombre de threads utilisés dans la tâche

Arrêt de la tâche $tools.task.stop()

Cet outil permet d'arrêter l'exécution de la tâche à tout moment. Une chaîne de caractères doit être passée en argument pour indiquer la raison de l'arrêt de la tâche.

Exemple d'utilisation :

[% IF query.num == 3;
tools.task.stop('Stop after 3 queries');
END %]