Guide utilisateur
Principe de base
Les scripts utilisent le langage XojoScript, complété par un ensemble de fonctions permettant de dialoguer avec l’application de recherche sur Internet.
La recherche sur Internet s’effectue en 4 phases :
- Envoi d’une requête de recherche
- Analyse de la page de réponse, récupération des titres et des identifiants
- Envoi d’une requête de détail
- Analyse de la page de réponse, récupération des informations sur le film
Chaque script est donc constitué de 4 parties qui reprennent les 4 phases.
L’interface permet donc de renseigner ces éléments, ainsi que d’indiquer des informations complémentaires sur le script (auteur, versions, site concerné, …)
Le langage XojoScript étant compilé à la volée, l’interface permet de précompiler le script afin de vérifier sa syntaxe. Si le script est correct, il est alors possible de le tester à l’aide d’une fenêtre de recherche similaire à celle de Filmotech.
Interface de l’éditeur
Fenêtre principale
L’interface est constituée d’une barre d’icône permettant d’accéder aux fonctions de l’éditeur, d’un bandeau de paramétrage sur la gauche, d’une fenêtre de saisie principale sur la droite et d’une barre d’état en bas de la fenêtre.
Nous allons maintenant voir en détail les différents éléments de cette interface.
La barre d’icônes
Icône | Utilisation |
---|---|
Ouvre la fenêtre de recherche Internet et permet de tester le script. | |
Compile les 4 parties du script et signale les erreurs. | |
Créé un nouveau script. | |
Ouvre un script existant. | |
Enregistre le script en cours. | |
Enregistre le script en cours sous un nouveau nom. | |
Recherche de texte dans le texte en cours d’édition. | |
Affiche l’aide. | |
Réglage des préférences de l’éditeur. | |
Quitte l’éditeur de scripts. |
La barre latérale
Informations sur le script
Champ | Commentaire | |
---|---|---|
Auteur | Auteur du script (informatif) | |
Date | Date de mise à jour du script. L’icône calendrier renseigne la date du jour. | |
Version du script | Version actuelle du script (Majeur.Mineur.Bug). La mise à jour d’un script doit toujours incrémenter ce compteur. | |
Version minimum de Filmotech | Indique la version minimale de Filmotech pour utiliser le script. | |
Langue de recherche | Précise la langue de recherche du script. Dans Filmotech, cette valeur permet d’afficher le script dans la bonne catégorie. | |
Commentaire | Commentaire sur le script (informatif) |
Informations sur le site
Champ | Commentaire | |
---|---|---|
Nom | Nom du site. C’est celui qui est affiché dans Filmotech, dans les préférences et dans la fenêtre de recherche. | |
URL | Adresse du site. Depuis Filmotech, on accède au site en cliquant sur l’icône |
Aide à la saisie
Champ | Commentaire | |
---|---|---|
Insérer une fonction | Insère la fonction fmt_ sélectionnée à la position courante du curseur dans la fenêtre d’édition. | |
Indenter le texte | Permet de ré-indenter le texte, si nécessaire. | |
Afficher les caractères invisibles | Affiche les caractères invisibles, tels que les retour à la ligne par exemple. |
Zone de saisie
La zone de saisie possède en haut 5 boutons permettant d’afficher les différentes parties du script et le résultat de la compilation. En dessous de ces boutons se situe la zone de saisie de l’éditeur ou de résultat de la compilation.
Champ | Commentaire | |
---|---|---|
Requête des titres | Affichage du script de préparation de la requête de recherche des titres. | |
Analyse des titres | Affichage du script d’analyse de la liste des titres. | |
Requête du détail | Affichage du script d’analyse du détail d’un titre. | |
Analyse du détail | Affichage du script d’analyse de la page de détail du film. | |
Compilation | Affichage du résultat de la précompilation. | |
Editeur | Zone de saisie de l’éditeur |
Barre d’état
Zone de saisie
Cette barre est affiché en bas de la fenêtre, à gauche et à droite.
Champ | Commentaire | |
---|---|---|
Message | Affichage des messages d’état du fichier. | |
Compteur | Positionnés en bas à droite, les compteurs indiquent le numéro de la ligne et de la colonne sur laquelle est positionné le curseur dans la zone de saisie du script. Entre parenthèse est affiché la longueur de la sélection. |
Recherche de texte
Si vous souhaitez recherche du texte dans la partie code de l’éditeur, cliquez sur l’icône Rechercher . Vous pouvez préciser si vous souhaitez effectuer une recherche en tenant compte des majuscules et si vous souhaitez que la recherche s’effectue en boucle sur le texte.
Préférences de l’application
La fenêtre de préférences permet d’indiquer la taille et la police de caractères à utiliser dans la zone d’édition. Elle permet également de définir le nom par défaut pour l’auteur du script, ainsi que de définir un proxy si la connexion au réseau le nécessite.
Développement d’un script
Echanges entre les scripts et Filmotech
Les échanges entre les scripts et la fenêtre de recherche Internet de Filmotech se font à l’aide d’un ensemble de fonctions. Elles sont toutes préfixés par fmt_ et vous en trouverez la liste détaillés dans le chapitre suivant.
Analyse des pages HTML reçues
Lorsqu’une page HTML est reçue, elle est alors découpée en ligne, chaque balise HTML étant séparée. Ainsi, pour la page suivante :
<html> <head> <title>Titre de la page</title> </head> <body> <h1>Titre principal</h1> <p>Voici un mot <strong>en gras</strong></p> </body> </html>
On va récupérer via le dialogue avec Filmotech :
<html> <head> <title> Titre de la page </title> </head> <body> <h1> Titre principal </h1> <p> Voici un mot <strong> en gras </strong> </p> </body> </html>
La fonction fmt_ligne permet de récupérer chacune des lignes de la page reçue. Ainsi découpée, l’analyse de la page sera plus facile.
Lors de l’exécution du script, ScriptEdit affiche une fenêtre contenant le code HTML analysé. Cette fenêtre permet de recherche un texte dans la page, ou un numéro de ligne, afin de faciliter la mise au point du script.
Enchaînement des actions
Lors de la recherche sur Internet, l’utilisateur saisi les mots-clés. Ceux-ci sont alors récupéré par le premier script “Requête des titres” à l’aide de la fonction fmt_MotsCles. En utilisant ce paramètre, la requête de recherche peut être envoyé sur le site à l’aide de la fonction fmt_RequeteListe. Le site renvoi alors une page de liste, qui est découpée selon le mode décrit ci- dessus. Le script “Analyse des titres” est alors exécuté. En analysant la page reçue, on peut alors récupérer la liste des titres et les identifiants permettant d’accéder au détail d’un film. La fonction fmt_MemoriseTitre sers alors à remplir la liste des films. Il est également possible, si une page suivante est détectée, de relancer une requête de recherche de titre sur la page suivante à l’aide de la fonction fmt_RequetePageSuivanteListe.
Lorsque l’utilisateur clique sur un nom de film dans la liste, l’identifiant est récupéré est le script de “Requête du détail” est lancé. Celui-ci lance alors une seconde requête vers le site à l’aide de la fonction fmt_RequeteDetail. Une fois que le serveur à retourné la page HTML de détail, le script “Analyse du détail” est alors déclenché. Il ne reste plus qu’à analyser le résultat et à remplir les différentes zones à l’aide de la fonction fmt_MemoriseValeur. Lorsque l’adresse de l’affiche est identifié, un appel à la fonction fmt_RequeteImage en lancera le téléchargement.
Nous allons voir dans le chapitre suivant un exemple complet de recherche.
Pré-compiler
Exemple de script
Comme exemple nous allons prendre le cas de la recherche sur le site Filmstarts.
Requête de titre
dim chaine as string chaine = "http://www.filmstarts.de/suche/1/?q=" + ReplaceAll(fmt_MotsCles," ","+") fmt_EncodagePage ("UTF8") fmt_RequeteListe( "GET", chaine )
Analyse des titres
dim i,j,k,l,m,n as integer dim strSearch as string dim strRef, strFilm as String dim startLink as boolean for i=0 to fmt_NombreLignes - 1 strSearch = "href='/kritiken/" j = instr( fmt_ValeurLigne( i) , strSearch ) if j<> 0 then k = instr( fmt_ValeurLigne( i+1) , "img src=" ) l = instr( fmt_ValeurLigne( i+1) , "alt=" ) if k<>0 and l<>0 then strRef = NthField( NthField( fmt_ValeurLigne( i ), "'" , 2 ), "/", 3) strRef = Left(strRef, len( strRef) -5) strFilm = "" startLink = false for m = i+2 to fmt_NombreLignes - 1 if not startLink and instr( fmt_ValeurLigne( m) , "a href=" ) <> 0 then startLink = true end if if startLink and instr( fmt_ValeurLigne( m) , "<" ) = 0 then strFilm = strFilm + fmt_ValeurLigne( m) end if if startLink and instr( fmt_ValeurLigne( m) , "</a>" ) <> 0 then exit end if next fmt_MemoriseTitre ( strRef , strFilm ) end if end if next
Requête de détail
dim chaine as string chaine = "http://www.filmstarts.de/kritiken/" + fmt_IdentifiantDetail + ".html" fmt_RequeteDetail( "GET", chaine )
Analyse du détail
dim chaine, chaine2, chaine3, text as string dim i, j, k, l, indice, debut_1, fin_1 as integer dim minRun as double indice = 0 'Title/Year for i=0 to fmt_NombreLignes - 1 chaine = "<title>" j = instr( fmt_ValeurLigne( i ) , chaine ) if j<>0 then text = left( fmt_ValeurLigne( i+1 ), len(fmt_ValeurLigne( i+1 )) - 28 ) text = trim(text) fmt_MemoriseValeur( "TitreVF" , text ) text = mid( fmt_ValeurLigne( i+1 ), len(fmt_ValeurLigne( i+1 ))- 20, 4 ) text = trim(text) fmt_MemoriseValeur( "Annee" , text ) indice = i exit end if next 'Cover text = "" for i=indice to fmt_NombreLignes - 1 chaine = "<img src=" j = instr( fmt_ValeurLigne( i ) , chaine ) if j<>0 then text = NthField( fmt_ValeurLigne( i ) , "'" , 2 ) fmt_RequeteImage( "GET" , text ) indice = i exit end if next 'Duration text = "" for i=indice to fmt_NombreLignes - 1 chaine = "itemprop=""duration" j = instr( fmt_ValeurLigne( i ) , chaine ) if j<>0 then text = NthField( fmt_ValeurLigne( i ) , """" , 4 ) text = Replace(text,"PT","") text = Replace(text,"M","") minRun = 0 if instr(text, "H") <> 0 then minRun = 60 * Val( NthField( text, "H" , 1 )) minRun = minRun + Val( NthField( text, "H" , 2 )) else minRun = minRun + Val( text) end if indice = i exit end if next fmt_MemoriseValeur( "Duree" , Str(minRun ))
Quelques explications sur l’analyse
On s’aperçoit que l’analyse est assez simple. On boucle sur toutes les lignes de la page. On repère une chaîne de caractères indiquant le début de la zone à rechercher, on repère la fin de la zone de recherche, et si on trouve, on détecte les éléments à récupérer, on mémorise et on continue. Ensuite on repart de là où on était arrêté. Les fonctions de traitement de chaîne de caractères de XojoScript permettent de faire cela facilement (même s’il y a probablement des façons plus élégantes d’écrire la chose… )
Par contre il faut faire attention de ne pas faire de boucles infinies, car il n’y a pas de moyens d’interrompre un script en cours d’exécution (sauf à tuer la tâche).
Les fonctions fmt_
fmt_AfficheMessage
Affiche un message dans une fenêtre d’alerte.
Syntaxe
fmt_AfficheMessage( msg )
Variable | Type | Description |
---|---|---|
msg | String | Le message à afficher |
Exemple
fmt_AfficheMessage( "Erreur" )
fmt_DebugMsg
Affiche un message dans la fenêtre de Debug lors de l’exécution du script.
Syntaxe
fmt_DebugMsg( msg , niveau )
Variable | Type | Description |
---|---|---|
msg | String | Le message à afficher |
niveau | Integer | Le niveau du message (optionnel) |
Les différents niveau
Niveau | Icône | Commentaire |
---|---|---|
0 | (Pas d’icône) | Message simple (par défaut) |
1 | OK | |
2 | Erreur | |
3 | Information | |
4 | Avertissement |
Exemple
fmt_DebugMsg "Message d'erreur niveau 0" , 0 fmt_DebugMsg "Message d'erreur niveau 1" , 1 fmt_DebugMsg "Message d'erreur niveau 2" , 2 fmt_DebugMsg "Message d'erreur niveau 3" , 3 fmt_DebugMsg "Message d'erreur niveau 4" , 4
Affichage dans la fenêtre de Debug :
fmt_DernierTitre
Retourne le dernier titre entré dans la liste. Peut-être utilisé pour ajouter par exemple une information complémentaire.
Syntaxe
result = fmt_DernierTitre
Variable | Type | Description |
---|---|---|
result | String | Le dernier titre mémorisé |
Exemple
dim dernier_titre as String dernier_titre = fmt_DernierTitre
fmt_EncodagePage
Permet de définir l’encodage de la page HTML renvoyée par le site. Actuellement les paramètres possibles sont ISOLATIN1 et UTF8.
Syntaxe
fmt_EncodagePage( encoding )
Variable | Type | Description |
---|---|---|
encoding | String | Le format d’encodage, ISOLATIN1 ou UTF8 |
Exemple
fmt_EncodagePage("UTF8")
fmt_EncodeURL
Encode les composants URL de la chaine passée en paramètre.
Syntaxe
result = fmt_EncodeURL( url_a_encoder )
Variable | Type | Description |
---|---|---|
result | String | URL encodée |
url_a_encoder | String | URL à encoder |
Exemple
Dim url_encodee as string url_encodee = fmt_EncodeURL("www.Bob&Ray.com") // retourne "www.bob%26ray.com"
fmt_HeaderDetail
Renseigne les champs de l’entête HTTP avant l’envoi de la requête de détail.
Syntaxe
fmt_HeaderDetail( champ , valeur )
Variable | Type | Description |
---|---|---|
champ | String | Le nom du champ de l’entête HTTP |
valeur | String | La valeur du champ |
Exemple
fmt_HeaderDetail( "Accept-Language" , "fr" )
fmt_HeaderListe
Renseigne les champs de l’entête HTTP avant l’envoi de la requête de liste.
Syntaxe
fmt_HeaderListe( champ , valeur )
Variable | Type | Description |
---|---|---|
champ | String | Le nom du champ de l’entête HTTP |
valeur | String | La valeur du champ |
Exemple
fmt_HeaderListe( "Accept-Language" , "fr" )
fmt_IdentifiantDetail
Renvoi l’identifiant du film sélectionné par l’utilisateur dans la liste.
Syntaxe
result = fmt_IdentifiantDetail
Variable | Type | Description |
---|---|---|
result | String | Valeur de l’identifiant sélectionné |
Exemple
dim ID as string ID = "http://www.filmstarts.de/kritiken/" + fmt_IdentifiantDetail + ".html"
fmt_MemoriseDernierTitre
Modifie le dernier titre mémorisé dans la liste. Peut-être utilisé par exemple pour compléter un titre déjà ajouté dans la liste avec la fonction fmt_MemoriseTitre.
Syntaxe
fmt_MemoriseDernierTitre( valeur )
Variable | Type | Description |
---|---|---|
valeur | String | La valeur du champ |
Exemple
dim titre as String = trim(fmt_DernierTitre) fmt_MemoriseDernierTitre ( titre + " " + trim(fmt_ValeurLigne(i+1)))
fmt_MemoriseTitre
Mémorise le titre et son identifiant.
Syntaxe
fmt_MemoriseTitre( identifiant , titre )
Variable | Type | Description |
---|---|---|
identifiant | String | L’identifiant du film |
titre | String | le tire du film |
Exemple
dim identifiant as string dim titre as string identifiant = mid( fmt_ValeurLigne(i), j+len(chaine), 6 ) titre = (trim(fmt_ValeurLigne(i+1))) + " (" + trim((fmt_ValeurLigne(i+5))) + ")" fmt_MemoriseTitre( identifiant, titre )
fmt_MemoriseValeur
Mémorise la valer d’un champ de la base.
Syntaxe
fmt_MemoriseValeur( champ , valeur )
Variable | Type | Description |
---|---|---|
champ | String | Le nom du champ de la base Filmotech |
titre | String | la valeur du champ |
Liste des champs mémorisables
Champ | Commentaire |
---|---|
TitreVF | Le titre en français |
TitreVO | Le titre original |
Edition | L’édition du DVD ou Blueray |
Pays | Le(s) pays séparés par des – ou des / |
Genre | Le(s) genre(s) séparés par des – ou des / |
Annee | L’année |
Duree | La durée (en minutes) |
Acteurs | La liste des acteurs séparés par des CHR(13) |
Realisateurs | La liste des réalisateurs séparés par des CHR(13) |
Synopsis | Le synopsis. Les sauts de lignes sont des CHR(13) |
Bonus | Le bonus. Les sauts de lignes sont des CHR(13) |
Langues | Les langues séparées par des , |
Sous-Titres | Les sous-titres, séparés par des , |
Audio | Les pistes audio, séparées par des , |
BandeAnnonce | L’URL vers la (les) bande(s)-annonce(s) |
Commentaires | Les commentaires. Les sauts de lignes sont des CHR(13) |
Exemple
dim titre as string = fmt_ValeurLigne(i+1) fmt_MemoriseValeur( "TitreVF" , titre )
fmt_MotsCles
Retourne la liste des mots-clés saisis par l’utilisateur.
Syntaxe
result = fmt_MotsCles
Variable | Type | Description |
---|---|---|
result | String | Liste des mots-clés |
Exemple
dim keywords as string keywords = "http://www.filmstarts.de/suche/1/?q=" + ReplaceAll(fmt_MotsCles," ","+")
fmt_NombreLignes
Retourne le nombre de ligne de la page HTML analysée.
Syntaxe
result = fmt_NombreLignes
Variable | Type | Description |
---|---|---|
result | Integer | Nombre de lignes |
Exemple
dim i as integer for i=0 to fmt_NombreLignes - 1 fmt_DebugMsg "Ligne " + str(i) next
fmt_RequeteDetail
Envoi au site la requête de détail d’un film selon la méthode définie.
Remarque : Actuellement seule la méthode GET est gérée.
Syntaxe
fmt_RequeteDetail( methode, requete )
Variable | Type | Description |
---|---|---|
methode | String | Méthode de l’appel : GET |
requete | String | URL de la page |
Exemple
dim url as string url = "http://www.filmstarts.de/kritiken/" + fmt_IdentifiantDetail + ".html" fmt_RequeteDetail( "GET", url )
fmt_RequeteImage
Envoi au site la requête de recherche de l’affiche d’un film selon la méthode définie.
Remarque : Actuellement seule la méthode GET est gérée.
Syntaxe
fmt_RequeteImage( methode, requete )
Variable | Type | Description |
---|---|---|
methode | String | Méthode de l’appel : GET |
requete | String | URL de l’image |
Exemple
dim url_image as string = fmt_ValeurLigne( i ) fmt_RequeteImage( "GET" , NthField( url_image , """" , 2 ) )
fmt_RequeteListe
Envoi au site la requête de recherche de la liste des films selon la méthode définie.
Remarque : Actuellement seule la méthode GET est gérée.
Syntaxe
fmt_RequeteListe( methode, requete )
Variable | Type | Description |
---|---|---|
methode | String | Méthode de l’appel : GET |
requete | String | URL de la page |
Exemple
dim url as string url = "http://www.filmstarts.de/suche/1/?q=" + ReplaceAll(fmt_MotsCles," ","+") fmt_EncodagePage ("UTF8") fmt_RequeteListe( "GET", url )
fmt_RequetePageSuivanteListe
Envoi au site la requête de recherche d’un numéro de page de la liste des films selon la méthode définie.
Remarque : Actuellement seule la méthode GET est gérée.
Syntaxe
fmt_RequetePageSuivanteListe( methode, requete, numero_page )
Variable | Type | Description |
---|---|---|
methode | String | Méthode de l’appel : GET |
requete | String | URL de la page |
num_page | String | Numéro de la page |
Exemple
dim url_page as string url_page = "http://www.allocine.fr" + NthField(fmt_ValeurLigne( i-1 ),"""",2) fmt_RequetePageSuivanteListe( "GET", url_page , url_page(chemin,1) )
fmt_Valeur
Retourne la valeur déjà renseignée de l’élément. Permet par exemple de renseigner les langues au fur et à mesure.
Syntaxe
fmt_Valeur( champ , valeur )
Variable | Type | Description |
---|---|---|
champ | String | Le nom du champ de la base Filmotech |
valeur | String | la valeur du champ |
Liste des champs gérés
Champ | Commentaire |
---|---|
Langues | Les langues séparées par des , |
Exemple
dim langues as string langues = langues + " " + NthField( fmt_Valeur( "Langues" ) , "," , 1 )
fmt_ValeurLigne
Retourne la ligne de la page HTML analysée et découpée, selon la méthode décrite plus haut.
Syntaxe
result = fmt_ValeurLigne( numero_ligne )
Variable | Type | Description |
---|---|---|
result | String | Valeur de la ligne |
numero_ligne | Integer | Numéro de la ligne |
Exemple
j = instr( fmt_ValeurLigne( i ) , chaine )
Annexes
Module CustomEditField
La coloration syntaxique de Filmotech ScriptEdit utilise le module CustomEditField.
Ce module est utilisé sous licence MIT.