Re: [AS] Piloter un script via url

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Daniel Varlet
Date:  
À: La liste AppleScript Francophone
Sujet: Re: [AS] Piloter un script via url

Le 20 mai 08 à 14:10, Dominique Isperian a écrit :

> Bonjour à tous !
>
> Question : est-il possible de passer un paramètre à un script via une
> url ?
>
> iCal permet d'inscrire une url qui, entre autres, ouvre un fichier,
> voire une application (file://localhost/Users/...)
> Puis-je passer un ou des paramètres au script que je déclencherais par
> ce moyen ?
>
> Voilà voilà ... et merci pour vos réponses !
> --
> Dominique



C'est tout à fait faisable de lancer un script avec en plus des
paramètres par URL. D'ailleurs on peut lancer n'importe quoi par URL +
arguments sous Mac OS X.
Dans iCal je ne vois pas trop l'intérêt, j'ai dû louper quelque chose,
mais peu importe.
Ceci est faisable avec un type (protocole) d'URL quelconque.
(J’éviterais de surcharger (d'utiliser) les plus connus http, file,
mailto, etc..., mais je n'ai pas essayé). C''est valable pour tout
type d'application dans Mac OS X, pas seulement les applets.

Pour les applets, ça tombe bien, c'est décrit en détail à :

    <http://www.apple.com/applescript/linktrigger/index.html>

Avec en prime une implémentation de serveur de scripts (optionnelle).

En résumé:

1) Modifier le fichier Info.plist de l'applet, pour signaler au
système (LaunchServices je présume) le(s) type(s) d'URL géré/
accepté(s) par l'application.

2) Dans le code utiliser le handler (gestionnaire) AS qui va récupérer
l'URL:

on open location theURL
    -- parsage de l'URL et lancement des actions.
end open location

3) C'est tout.

Je viens d'essayer ceci (exemple de protocole fabriqué pour l'occasion)
    <x-toto://net.totor.testURL?action=1&action=2>
Testé avec open (Terminal), iCal, et ici dans Mail: ça marche sans
problème. J'ai bien un dialogue avec 1 et 2.

Extrait du fichier Info.plist:

...
    <key>CFBundleIdentifier</key>
    <string>net.totor.testURL</string>
...
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>x-toto URL</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>x-toto</string>
            </array>
        </dict>
    </array>
...

Le code AS:

[SCRIPT]
on open location u
    set zs to last item of tinkerText(u, "?")
    set zs to tinkerText(zs, "&")
    repeat with z in zs
        set {k, v} to tinkerText(z, "=")
        if k = "action" then
            doIt(v)
        end if
    end repeat
end open location

on doIt(z)
    activate
    display dialog z
end doIt

--mark (-
--mark Text tools<I<U!+
--=============================== Text tools
================================--
(* v1.2.2 *)
on tinkerText(z, d) (* bascule text <-> list *)
    try
        set _d to AppleScript's text item delimiters
        set AppleScript's text item delimiters to d
        considering case
            if class of z is list then
                set r to z as text
            else
                set r to text items of z
            end if
        end considering
        set AppleScript's text item delimiters to _d
        return r
    on error ert number ern from obj
        set AppleScript's text item delimiters to _d
        -- stampError(ert, ern, obj, "tinkerText()")
        error ert number ern
    end try
end tinkerText
--=============================== /Text tools
===============================--
[/SCRIPT]


Un petit truc: le Finder et Cie sont des feignasses, et parfois il
faut bouger l'applet d'un dossier à un autre (par exemple) pour qu'ils
prennent en considération les changements d’Info.plist.

Ton autre question: Pour récupérer une sélection (n'importe laquelle)
dans iCal, je ne vois pas non plus. Même par UI scripting, niet...

A+

-- 
Daniel


_______________________________________________
Applescript_fr mailing list
Applescript_fr@???
http://listes.patpro.net/mailman/listinfo/applescript_fr