Filemaker : Extraire un nom de domaine d'une URL

vendredi 13 août 2010

Filemaker ne dispose, hélas, d'aucun mécanisme natif permettant d'analyser des chaînes de texte selon un motif précis. Pas d'expression régulière dans Filemaker, à moins d'installer un plug-in comme RegexPlugin ou 360Works Patterns, ou de créer un ensemble complexe de fonctions personnalisées. Comment, dès lors, extraire dans un calcul un nom de domaine à partir d'une adresse URL ?

Filemaker ne dispose, hélas, d’aucun mécanisme natif permettant d’analyser des chaînes de texte selon un motif précis. Pas d’expression régulière dans Filemaker, à moins d’installer un plug-in comme RegexPlugin ou 360Works Patterns, ou de créer un ensemble complexe de fonctions personnalisées. Comment, dès lors, extraire dans un calcul un nom de domaine à partir d’une adresse URL ?

Voici un calcul qui permet d’extraire un nom de domaine depuis une adresse URL. Il requiert une rubrique de type Texte, appelée URL, et il doit être inséré dans une rubrique de type Calcul renvoyant un résultat de type Texte.

/*
Format : http://www.domaine.com/index.html => domaine.com

L’adresse a plusieurs blocs : [http://] [domaine.tld] [/index.html]
Il faut isoler le bloc du milieu, qui se situe :
- après le 2ème slash (‘/’)
- avant le 3ème slash
*/

Definir ( $fulldomain =
   Definir ([
     /* la deuxième occurrence de ‘/’ /
     debut = Position ( URL ; «/» ; 1 ; 2 ) ;
     /
la troisième occurrence de ‘/’ */
     fin = Position ( URL ; «/» ; 1 ; 3 )
     ];
     Extrait ( URL ; debut + 1 ; fin - debut - 1 )
   )
;

/*
On a isolé la partie du milieu, avant le 2ème et après le 3ème slash.
Cette partie peut, à son tour, être composée de plusieurs membres et être formatée de diverses manières :
- [sous-domaine.] [domaine] [.tld] => www.cnn.com
- [domaine] [.tld] => linuxfr.org (sans le «www»)
- [sous-domaine.][sous-domaine.][…] [domaine] [.tld]

On peut traiter les deux premier cas en comptant le nombre de points dans l’adresse :
- 2 points : il y a 1 sous domaine («www» ou autre)
- 1 point : pas de sous-domaine (http://domaine.tld)

Le 3ème cas est problématique, car on ne peut pas savoir combien de points il y a. Exemple : cyber.law.harvard.edu
On le traite en retournant l’ensemble du domaine et de ses sous-domaines. Heureusement, cette hypothèse est très rare.
*/

  Cas (
    /* Format domaine.com (1 seul point dans l’adresse) */
     Occurrences ( $fulldomain ; «.» ) = 1
     ; $fulldomain

     /* Format www.domaine.com ou sous-domaine.domaine.com (2 points dans l’adresse, p. ex. del.icio.us) /
     ; Occurrences ( $fulldomain ; «.» ) = 2
     ; Definir ([
         premier = Position ( $fulldomain ; «.» ; 1 ; 1 ) ;
         second = Position ( $fulldomain ; «.» ; 1 ; 2 )
         ];
         Extrait ( $fulldomain ; premier + 1 ; second ) /
Retourne ce qui est après le premier point : www.domaine.com => domaine.com /
     /
Pour n’avoir que le domaine, sans l’extension, remplacer «second» par «second - premier - 1» */
     )

     /* Résultat par défaut (domaines complexes, p. ex. cyber.law.harvard.edu) */
     ; $fulldomain
     )
)