Hyperlien, Webloc

Gregoryen

Membre actif
Club iGen
16 Juin 2013
677
45
33
Arles
www.gregoryen.fr
Bonjour tout le monde !

Grâce à l'aide de @zeltron54 sur un autre sujet, nous avions pu créer un script pour ouvrir tous les webloc d'un dossier, et ça marche à merveille !

Voilà, j'ai plusieurs fichiers texte avec à l'intérieur, des liens hypertexte. Pour l'exemple j'ai créé celui-ci, mais j'en ai plusieurs avec quelques dizaines voir centaines de liens.
Screenshot 26-10-2021- à 15h50 10s - TextEdit - Vente.rtf.png

J'aimerais faire trois choses, mais qui ne se font pas spécialement ensemble, ça dépend du besoin.

1. Ouvrir tous ces liens en une seule fois sur Safari. J'ai essayé de le faire avec un workflow sur Automator, mais le problème, c’est l'hypertexte, ce ne sont pas de simples URLS.

2. Convertir les hypertextes en liens normaux. (Ça pourrait résoudre le problème numéro 1).

3. Créer un webloc de chaque hyperlien (ou liens). Pour cela il faut que je reste appuyé sur le lien en question et que je le glisse en dehors de la fenêtre. Mais imaginez en avoir plusieurs centaines...

Merci de votre aide !
 
Bonsoir,
@Gregoryen

D'après ta copie d'écran, je pense que ton fichier contenant les liens et les liens hypertexte est un fichier au format ".RTF"

Si c'est bien le cas, un petit applescript permettra de le scanner et d'en extraire tous les liens et de les enregistrer dans un dossier en tant que fichiers ".WEBLOC".

Ci-dessous le script qui te demande de sélectionner le fichier RTF à traiter, puis te demande de sélectionner un dossier vide pour accueillir les webloc, puis il fait le job et te préviens lorsqu'il a terminé.
Les fichier webloc sont nommés "lien 1", lien 2" lien 3 " etc...
J'attends le résultat de tes tests !

Bloc de code:
set monfichier to choose file with prompt "Sélectionnez le fichier contenant les hyperliens"
set Chemin to choose folder with prompt "Sélectionnez le dossier recvant les webloc"
open for access monfichier -- ouvre ce fichier en lecture
set vartoto to read monfichier -- lit le fichier et le met dans la variable vartoto
close access monfichier -- ferme le fichier

set hyp to "HYPERLINK"
set guil to (ASCII character 34)
set occu to hyp & " " & guil

set avant to "<?xml version=" & guil & "1.0" & guil & " encoding=" & guil & "UTF-8" & guil & "?>
<!DOCTYPE plist PUBLIC " & guil & "-//Apple//DTD PLIST 1.0//EN" & guil & " " & guil & "http://www.apple.com/DTDs/PropertyList-1.0.dtd" & guil & ">
<plist version=" & guil & "1.0" & guil & ">
<dict>
    <key>URL</key>
    <string>"

set apres to "</string>
</dict>
</plist>
"

set numero to 1
repeat
    set vartoto to vartoto as string
    set aa to offset of occu in vartoto
    if aa = 0 then exit repeat
    set nb to aa + 11
    set lelien to ""
    repeat while character nb of vartoto is not guil
      
        set lelien to lelien & character nb of vartoto
        set nb to nb + 1
    end repeat
    set vartoto to characters nb thru -1 of vartoto
    set ccc to vartoto as string
    set unlien to avant & lelien & apres
    tell application "TextEdit"
        set lenom to "lien " & numero & ".webloc"
        set chemindef to ((Chemin as text) & lenom) as text
        try
            set lefichier to open for access chemindef with write permission
            --set lefichier to open for access chemin with write permission
            set eof lefichier to 0 -- pour effacer le fichier existant
            write unlien & return to lefichier starting at eof
            close access lefichier
        on error e
            display dialog "Le fichier «lien X.webloc n'a pu être créé" & return & return & "Verifiez que le repertoire existe et qu'il a des droits en écriture" with icon 0 buttons "Annuler" default button 1
        end try
        set numero to numero + 1
    end tell
end repeat
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Dernière édition:
Oh yeah top !! Merci encore une fois @zeltron54 !!

Alors effectivement j'ai dû fourcher en écrivant (l'émotion), mais il s'agit bien d'un fichier RTF.

J'ai testé le script qui fonctionne à merveille, j'ai fait un test avec un groupe de 4 liens. Seuls 2 liens n'ont pas fonctionné, j'ai donc ouvert le webloc pour les comparer à ceux qui fonctionnent.

Aucun changement, on vois bien l'URL s'afficher, seulement lorsque j'ouvre le webloc, il m'affiche une page vide. Cependant j'ai remarqué qu'il s'agissait de deux recherches Google, est-ce que ce serait lié ?

Et je voudrais savoir s'il était possible d'avoir l'URL du site comme titre webloc à la placette "lien". Ça permettrait de copier les webloc et les coller en brut dans une TextEdit pour y récupérer les liens purs en prenant soin de supprimer l'extension à la fin.

Sinon un grand merci !


PS: J'ai fait un test, je suis allé sur Google pour mettre ne recherche. J'ai copié l'URL sur Note, qui m'a donné un Hyperlien. J'ai fait un glissé déposé sur le bureau pour obtenir le webloc. Lorsque je clique sur celui-ci, il s'ouvre avec la recherche.

Si j'essaie le webloc du script, il affiche une page vide, alors voici le contenu des deux fichiers, et l’on voit une différence (il manque "amp;").

Le webloc qui fonctionne :
ok.png
Le webloc du script qui s'affiche vide :
pas ok.png
 
Dernière édition:
Bonjour,

Effectivement, cela ne fonctionnait pas sur des liens de recherche, je viens de modifier, et j'ai remplacé le nom du fichier par son le nom de son lien en enlevant le début (http://).
Fais des essais ! et dis moi si cela fonctionne chez toi, et si ça te convient.

Bloc de code:
set monfichier to choose file with prompt "Sélectionnez le fichier contenant les hyperliens"
set Chemin to choose folder with prompt "Sélectionnez le dossier recvant les webloc"
open for access monfichier -- ouvre ce fichier en lecture
set vartoto to read monfichier -- lit le fichier et le met dans la variable vartoto
close access monfichier -- ferme le fichier

set hyp to "HYPERLINK"
set guil to (ASCII character 34)
set occu to hyp & " " & guil

set avant to "<?xml version=" & guil & "1.0" & guil & " encoding=" & guil & "UTF-8" & guil & "?>
<!DOCTYPE plist PUBLIC " & guil & "-//Apple//DTD PLIST 1.0//EN" & guil & " " & guil & "http://www.apple.com/DTDs/PropertyList-1.0.dtd" & guil & ">
<plist version=" & guil & "1.0" & guil & ">
<dict>
    <key>URL</key>
    <string>"

set apres to "</string>
</dict>
</plist>
"
repeat
    set vartoto to vartoto as string
    set aa to offset of occu in vartoto
    if aa = 0 then exit repeat
    set nb to aa + 11
    set lelien to ""
    repeat while character nb of vartoto is not guil
        set lelien to lelien & character nb of vartoto
        set nb to nb + 1
    end repeat
    
    set aaa to 0
    set cherch to "-b-d&"
    set aaa to offset of cherch in lelien
    if aaa is not 0 then
        set lelien to (characters 1 thru (aaa + 4) of lelien & "amp;" & characters (aaa + 5) thru -1 of lelien) as string
    end if
    
    set vartoto to characters nb thru -1 of vartoto
    set ccc to vartoto as string
    set unlien to avant & lelien & apres
    set lenom to characters 9 thru -1 of lelien as string
    tell application "TextEdit"
        set lenom to lenom & ".webloc"
        set chemindef to ((Chemin as text) & lenom) as text
        try
            set lefichier to open for access chemindef with write permission
            set eof lefichier to 0 -- pour effacer le fichier existant
            write unlien & return to lefichier starting at eof
            close access lefichier
        on error e
            display dialog "Le fichier «lien X.webloc n'a pu être créé" & return & return & "Verifiez que le repertoire existe et qu'il a des droits en écriture" with icon 0 buttons "Annuler" default button 1
        end try
    end tell
end repeat
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
OUP'S !

Le script ci-dessus est fait pour firefox comme navigateur par défaut.
Il faut que je regarde pour le modifier pour safari comme navigateur... Dés que j'ai un peu de temps !!!
 
Voila le nouveau script qui prend en compte les liens de recherche créés par Firefox et Safari

Dis-moi si c'est bon !

Bloc de code:
set monfichier to choose file with prompt "Sélectionnez le fichier contenant les hyperliens"
set Chemin to choose folder with prompt "Sélectionnez le dossier recvant les webloc"
open for access monfichier -- ouvre ce fichier en lecture
set vartoto to read monfichier -- lit le fichier et le met dans la variable vartoto
close access monfichier -- ferme le fichier

set hyp to "HYPERLINK"
set guil to (ASCII character 34)
set occu to hyp & " " & guil

set avant to "<?xml version=" & guil & "1.0" & guil & " encoding=" & guil & "UTF-8" & guil & "?>
<!DOCTYPE plist PUBLIC " & guil & "-//Apple//DTD PLIST 1.0//EN" & guil & " " & guil & "http://www.apple.com/DTDs/PropertyList-1.0.dtd" & guil & ">
<plist version=" & guil & "1.0" & guil & ">
<dict>
    <key>URL</key>
    <string>"

set apres to "</string>
</dict>
</plist>
"
repeat
    set vartoto to vartoto as string
    set aa to offset of occu in vartoto
    if aa = 0 then exit repeat
    set nb to aa + 11
    set lelien to ""
    repeat while character nb of vartoto is not guil
        set lelien to lelien & character nb of vartoto
        set nb to nb + 1
    end repeat
   
    -- test si recherche creer avec firefox
    set aaa to 0
    set cherch to "-b-d&"
    set aaa to offset of cherch in lelien
    if aaa is not 0 then
        set lelien to (characters 1 thru (aaa + 4) of lelien & "amp;" & characters (aaa + 5) thru -1 of lelien) as string
    end if
   
    --test si recherche creer avec safari
    set aaa to 0
    set cherch to "safari"
    set aaa to offset of cherch in lelien
   
    if aaa is not 0 then
        set lelien to (characters 1 thru (aaa + 6) of lelien & "amp;" & characters (aaa + 7) thru -1 of lelien) as string
        set lelien to (characters 1 thru (aaa + 17) of lelien & "amp;" & characters (aaa + 18) thru -1 of lelien) as string
       
        set cherch to "ie=UTF"
        set aaa to offset of cherch in lelien
        if aaa is not 0 then
            set lelien to (characters 1 thru (aaa - 1) of lelien & "amp;ie=UTF-8&amp;oe=UTF-8") as string
        end if
    end if
   
    set vartoto to characters nb thru -1 of vartoto
    set ccc to vartoto as string
    set unlien to avant & lelien & apres
    set lenom to characters 9 thru -1 of lelien as string
    tell application "TextEdit"
        set lenom to lenom & ".webloc"
        set chemindef to ((Chemin as text) & lenom) as text
        try
            set lefichier to open for access chemindef with write permission
            set eof lefichier to 0 -- pour effacer le fichier existant
            write unlien & return to lefichier starting at eof
            close access lefichier
        on error e
            display dialog "Le fichier «lien X.webloc n'a pu être créé" & return & return & "Verifiez que le repertoire existe et qu'il a des droits en écriture" with icon 0 buttons "Annuler" default button 1
        end try
    end tell
end repeat
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Un nouveau script ! qui prend en compte les liens des recherches créés avec : Firefox, Safari, Chrome et Opéra.

C'est tous les navigateurs qui sont sur ma machine !

vérifies et dis moi si c'est bon pour toi !

Bloc de code:
set monfichier to choose file with prompt "Sélectionnez le fichier contenant les hyperliens"
set Chemin to choose folder with prompt "Sélectionnez le dossier recvant les webloc"
open for access monfichier -- ouvre ce fichier en lecture
set vartoto to read monfichier -- lit le fichier et le met dans la variable vartoto
close access monfichier -- ferme le fichier

set hyp to "HYPERLINK"
set guil to (ASCII character 34)
set occu to hyp & " " & guil

set avant to "<?xml version=" & guil & "1.0" & guil & " encoding=" & guil & "UTF-8" & guil & "?>
<!DOCTYPE plist PUBLIC " & guil & "-//Apple//DTD PLIST 1.0//EN" & guil & " " & guil & "http://www.apple.com/DTDs/PropertyList-1.0.dtd" & guil & ">
<plist version=" & guil & "1.0" & guil & ">
<dict>
    <key>URL</key>
    <string>"

set apres to "</string>
</dict>
</plist>
"
repeat
    set vartoto to vartoto as string
    set aa to offset of occu in vartoto
    if aa = 0 then exit repeat
    set nb to aa + 11
    set lelien to ""
    repeat while character nb of vartoto is not guil
        set lelien to lelien & character nb of vartoto
        set nb to nb + 1
    end repeat
    
    -- test si recherche creer avec firefox
    set aaa to 0
    set cherch to "Firefox" --"-b-d&"
    set aaa to offset of cherch in lelien
    if aaa is not 0 then
        set lelien to (characters 1 thru (aaa + 11) of lelien & "amp;" & characters (aaa + 12) thru -1 of lelien) as string
        
    else
        --test si recherche creer avec autre que firefox
        set aaa to 0
        set adres to ""
        set cherch to "q="
        set aaa to offset of cherch in lelien
        if aaa is not 0 then
            set aaa to aaa + 2
            repeat while character aaa of lelien is not "&"
                set adres to adres & character aaa of lelien
                set aaa to aaa + 1
            end repeat
            set lelien to "https://www.google.com/search?client=safari&amp;rls=en&amp;q=" & adres & "&amp;ie=UTF-8&amp;oe=UTF-8" as string
        end if
    end if
    
    set vartoto to characters nb thru -1 of vartoto
    set ccc to vartoto as string
    set unlien to avant & lelien & apres
    set lenom to characters 9 thru -1 of lelien as string
    tell application "TextEdit"
        set lenom to lenom & ".webloc"
        set chemindef to ((Chemin as text) & lenom) as text
        try
            set lefichier to open for access chemindef with write permission
            set eof lefichier to 0 -- pour effacer le fichier existant
            write unlien & return to lefichier starting at eof
            close access lefichier
        on error e
            display dialog "Le fichier «lien X.webloc n'a pu être créé" & return & return & "Verifiez que le repertoire existe et qu'il a des droits en écriture" with icon 0 buttons "Annuler" default button 1
        end try
    end tell
end repeat
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Alors j'ai fait un test, j'avais une liste avec 12 liens, dont des recherches Google. Tout s'est ouvert sauf un lien en direction d'un forum Free...
J'ai modifié mon fichier texte pour y mettre l'URL brute et pas l'hyperlien et cela a marché.

Voici l'intérieur du webloc qui n'a pas fonctionné :


Capture d’écran 2021-10-27 à 21.40.23.png
J'en profite pour faire une pierre deux coups. Si la liste n'était pas des hyperliens, mais des URLS brutes, ça aurait tendance à fonctionner.

Ne pourrait-on pas dans le script, créer un fichier texte (qui serait dans le même dossier que les webloc), contenant toutes les URLS brutes, et se baser sur ce fichier pour créer les webloc ?

D'autant plus que je cherche aussi à créer un fichier texte avec les URLS brutes donc ça me serait très pratique de tout faire d'un coup ;-)
 
Bonsoir,
je ne comprend pas ! J´ai recopié ta copie d´écran et cela fonctionne sans problème ! Surtout que la il ne s’agit pas d’une recherche…

Ta demande ne me paraît pas réalisable, car les URL , qu´elles soient brutes ou en hyperlien, ne sont pas du texte mais sont incluses dans un champ! Les écrire en tant que texte ne peut pas les rendre cliquable !
 
Dernière édition:
Oui je trouve ça bizarre, il ne s'agit pas d'une recherche, mais le webloc généré me donne une page vide.

Voici le message que me dit le script que l'on avait fait sur l'autre post pour ouvrir les webloc.
Si je l'ouvre manuellement, j'ai une page vide. Je te passes la copie de mon webloc sur ce lien.

Capture d’écran 2021-10-28 à 05.17.53.png

PS: Je ne sais pas si ça te le fait, mais en plus d'ouvrir une page web vide, le fichier étant sur le bureau, il m'ouvre une fenêtre Finder de son emplacement, donc le bureau. Ça ne me le fait pas pour les autre webloc.
 
Dernière édition:
Après analyse, l'adresse dans le webloc que tu m'a envoyé est incomplète.
le contenu du webloc devrait être:
Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>URL</key>
    <string>https://freebox.toosurtoo.com/forum/viewtopic.php?f=115&amp;t=26353</string>
</dict>
</plist>
Pour comprendre pourquoi il me faudrait le fichier RTF d'origine, avec le lien afin de l'analyser.

Si tu pouvais me le faire parvenir (si pas trop indiscret)...
 
Après analyse, l'adresse dans le webloc que tu m'a envoyé est incomplète.
le contenu du webloc devrait être:
Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>URL</key>
    <string>https://freebox.toosurtoo.com/forum/viewtopic.php?f=115&amp;t=26353</string>
</dict>
</plist>
Pour comprendre pourquoi il me faudrait le fichier RTF d'origine, avec le lien afin de l'analyser.

Si tu pouvais me le faire parvenir (si pas trop indiscret)...
Oui bien sûr :)
 
Bonjour,

Correction faite, avec en plus une réduction du nom à 200 caractères maxi.
J'attends ton retour !
Bloc de code:
set monfichier to choose file with prompt "Sélectionnez le fichier contenant les hyperliens"
set Chemin to choose folder with prompt "Sélectionnez le dossier recvant les webloc"
open for access monfichier -- ouvre ce fichier en lecture
set vartoto to read monfichier -- lit le fichier et le met dans la variable vartoto
close access monfichier -- ferme le fichier

set hyp to "HYPERLINK"
set guil to (ASCII character 34)
set occu to hyp & " " & guil

set avant to "<?xml version=" & guil & "1.0" & guil & " encoding=" & guil & "UTF-8" & guil & "?>
<!DOCTYPE plist PUBLIC " & guil & "-//Apple//DTD PLIST 1.0//EN" & guil & " " & guil & "http://www.apple.com/DTDs/PropertyList-1.0.dtd" & guil & ">
<plist version=" & guil & "1.0" & guil & ">
<dict>
    <key>URL</key>
    <string>"

set apres to "</string>
</dict>
</plist>
"
repeat
    set vartoto to vartoto as string
    set aa to offset of occu in vartoto
    if aa = 0 then exit repeat
    set nb to aa + 11
    set lelien to ""
    repeat while character nb of vartoto is not guil
        set lelien to lelien & character nb of vartoto
        if (character nb of vartoto) = "&" then
            set lelien to lelien & "amp;"
        end if
        set nb to nb + 1
    end repeat
    
    set vartoto to characters nb thru -1 of vartoto
    set ccc to vartoto as string
    set unlien to avant & lelien & apres
    set nbcaractere to count characters of lelien
    if nbcaractere > 200 then
        set lelien to characters 1 thru 200 of lelien as string
    end if
    set lenom to characters 9 thru -10 of lelien as string
    tell application "TextEdit"
        set lenom to lenom & ".webloc"
        set chemindef to ((Chemin as text) & lenom) as text
        try
            set lefichier to open for access chemindef with write permission
            set eof lefichier to 0 -- pour effacer le fichier existant
            write unlien & return to lefichier starting at eof
            close access lefichier
        on error e
            display dialog "Le fichier «lien X.webloc n'a pu être créé" & return & return & "Verifiez que le repertoire existe et qu'il a des droits en écriture" with icon 0 buttons "Annuler" default button 1
        end try
    end tell
end repeat
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
  • J’adore
Réactions: Gregoryen
J'essaie de faire une dernière chose, pouvoir copier dans le presse papier tous les webloc, coller le contenu dans TextEdit, et enregistrer le fichier dans le même dossier que ceux que j'ai choisi pour le webloc.
Ca aura pour fonction de me donner un fichier texte avec toutes les URLS brutes.

J'ai réussi à le faire avec Automator mais il s'agit d'une ligne de commande, et le problème réside que je ne sait pas comment lui dire qu'il faut qu'il recherche les webloc dans le dossier précédemment choisi lors de la première étape, et comment lui dire que je veux enregistrer le fichier texte au même endroit.
 
Je ne comprend pas ce que tu veux obtenir !
Que penses-tu obtenir en copiant les webloc. Un webloc est un fichier en faisant un copié tu copie le nom du fichier !

Au final tu veux obtenir quoi?
Un fichier RTF avec les liens (donc comme ton fichier de départ)
ou un fichier texte avec les liens en texte (mais ceux-ci ne seront pas cliquable puisque se seront du simple texte)

Dans tout les cas il ne s'agit pas d'un simple copié du contenu du fichier webloc (tu as vu son contenu dans tes copies d'écran)