Applescript (PDF vers iTunes): Comment extraire et / ou écrire des métadonnées avec des caractères spéciaux? Aidez-moi, s'il vous plaît :-)

1

INTRODUCTION

Bonjour,

Comme toujours, je tiens à souligner que je ne suis pas un expert en script. Je ne suis même pas un codeur de base. J'essaie juste d'apprendre, petit à petit, à coder lorsque j'ai ces défis à relever. S'il vous plaît être assez à travers pour un mannequin!

PRÉCÉDENT

Je dois transférer les métadonnées de l'auteur d'un livre PDF vers la balise Author de ma bibliothèque iTunes. (Oui! Je me suis débarrassé d'iBooks et j'ai récupéré des livres dans iTunes)

Récemment, ici sur ce site, avec l’aide d’un des membres, un problème de script a été résolu. Ou en quelque sorte.

LE PROBLÈME

Je dis en quelque sorte, car même lorsque le script effectuera la tâche sans faille si aucun nom spécial ne figure dans le nom, le script a une énorme limitation: il ne lit pas, n'écrit pas ou les deux, un texte contenant des caractères spéciaux.

EXEMPLE:

Mercé Lamás del Jagüey Nuñez devient dans iTunes Merce \ U0301 Lama \ U0301s du Jagu \ U0308ey Nun \ U0303ez-

J'apprécie votre aide pour trouver une solution. J'ai besoin d'automatiser cette tâche pour gérer correctement les +4000 livres PDF de ma bibliothèque iTunes.

Je vous remercie!

SCRIPT EN DÉVELOPPEMENT

tell application "iTunes"

set sel to the selection

if sel is {} then display dialog "Please select something" buttons {"Cancel"}

repeat with i from 1 to count of sel

    set the_track to item i of sel

    set the_posix_path to POSIX path of (location of the_track as alias)

    set authorfield to paragraph 2 of (do shell script "mdls -name kMDItemAuthors " & quoted form of the_posix_path & "|  awk -F\\\" '{print $2'}")

    set artist of the_track to (authorfield & "-") as string
end repeat  
end tell

GRAPHIQUE

entrez la description de l'image ici

Jostma
la source

Réponses:

1

Vous pouvez utiliser perl pour convertir le caractère Unicode échappé du texte ASCII:

tell application "iTunes"
    set sel to the selection
    if sel is {} then display dialog "Please select something" buttons {"Cancel"}
    set tc to count sel
    repeat with i from 1 to tc
        tell (get item i of sel)
            set loc to location
            set authorfield to my getAuthors(loc)
            if authorfield is not "" then set artist to authorfield & "-"
        end tell
    end repeat
end tell

on getAuthors(f)
    do shell script "mdls -name kMDItemAuthors  " & (quoted form of POSIX path of f) & " | /usr/bin/perl -ne 'if (m/^ /) {s/^ +[\"]?|\"$//g;s/\\\\u([[:xdigit:]]{1,4})/chr(eval(\"0x$1\"))/egi;print}' "
end getAuthors

Ou python:

do shell script "export PYTHONIOENCODING=UTF-8; /usr/bin/python -c 'import sys; print (sys.argv[1].replace(\"\\U\",\"\\u\").decode(\"unicode-escape\"))' \"$(mdls -name kMDItemAuthors  " & (quoted form of POSIX path of f) & " |  sed -nE 's/\"$//;s/^ +[\"]?//p')\""
jackjr300
la source
Ah, la beauté d'un AppleScript perverti par ces commandes Unix barbares! J'espère qu'il y a une autre solution.
Nicolas Barbulesco
Puriste ou pas, cette solution fonctionne à merveille dans les deux cas!
Jostma
@ jackjr300: Wow! Merci beaucoup mon pote! Les deux types de mdls et de python fonctionnent parfaitement! J'apprécie beaucoup! Tu as fait ma journée. Je peux traiter mes livres +4000 pdf dans la bibliothèque iTunes de manière parfaite et en un rien de temps. Merci beaucoup!
Jostma
@ Jostma - Qu'est-ce que "les deux alternatives"?
Nicolas Barbulesco
0

A la fin de votre script, remplacez "en tant que chaîne" par "en tant que chaîne Unicode". Et essaye. Si cela ne résout pas votre problème, essayez avec "en tant que texte Unicode".

Nicolas Barbulesco
la source
La formule "en tant que chaîne Unicode" ne réussit même pas la tentative du compilateur: "Nom de classe attendu mais identificateur trouvé." --- le "texte Unicode en tant que" passe la compilation mais donne le même résultat incorrect: "Merce \ U0301 Lama \ U0301s del Jagu \ U0308ey Nun \ U0303ez- "
Jostma le
@Jostma - Alors, lire et écrire ne marchent pas correctement? Dans votre question, vous dites que lire et écrire ne fonctionnent pas. Je ne comprends pas.
Nicolas Barbulesco