Πίνακας περιεχομένων:
- Βήμα 1: Ξεκινώντας
- Βήμα 2: Η βασική ιδέα σεναρίου
- Βήμα 3: Η βιβλιοθήκη XML: Goto Guy του ITunes
- Βήμα 4: Your Friend the Hash (ακόμα κι αν δεν βρίσκεστε στο Άμστερνταμ)
- Βήμα 5: Ένα (πολύ) σύντομο μάθημα για τις τακτικές εκφράσεις
- Βήμα 6: Εφαρμογή τακτικών εκφράσεων στο σενάριο ITunes
- Βήμα 7: Εντοπισμός και διαγραφή αυτών των κομματιών 1 αστέρι
- Βήμα 8: Το URI Escapes and How to Get Around Them
- Βήμα 9: Προσθήκη συμβατότητας σεναρίων στα Windows
- Βήμα 10: Το ολοκληρωμένο σενάριο
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Γεια σας κυρίες και κύριοι, αυτή είναι η πρώτη μου κωδικοποίηση που διδάσκεται, οπότε παρακαλώ, όταν σχολιάζετε, αφήστε τα όπλα σας στο σπίτι (τα μαχαίρια είναι αποδεκτά, ωστόσο). Με την έλευση των mp3 players, έγινε δυνατό για τους ανθρώπους να μεταφέρουν πρωτόγνωρα ποσά της μουσικής μαζί τους στις τσέπες τους. Δεν είναι ασυνήθιστο να ακούμε ανθρώπους που έχουν συλλογές 5, 10, ακόμη και 15 χιλιάδων τραγουδιών (και μερικοί άνθρωποι, ακόμη περισσότερο). Από τα προγράμματα αναπαραγωγής mp3, κανένα δεν είναι πιο δημοφιλές από το iPod της Apple και το λογισμικό που το τρέχει, το iTunes. Ωστόσο, με τόσο μεγάλες βιβλιοθήκες μουσικής, μπορεί να γίνει κάπως κουραστικό να απαλλαγούμε από τα τραγούδια που απλά δεν ακούγονται καλά ή ελκυστικά εσύ πια Μπορεί να χρειαστούν ηλικίες για να παρακολουθήσετε κομμάτι μέσω μουσικής συλλογής στο iTunes και να απαλλαγείτε από τα τραγούδια που δεν σας αρέσουν. Εκεί έρχεται αυτό το διδακτικό. Σε αυτό το διδακτικό, θα σας δείξω έναν τρόπο για να απαλλαγείτε αυτόματα από τα τραγούδια που είναι απλά απαίσια, με κάποια βοήθεια από τον καλό μου φίλο, Perl. Μια καλή βασική γνώση του Perl είναι εξαιρετικά χρήσιμη όταν προσπαθείτε να επαναλάβετε αυτό το διδακτικό, αν και δεν απαιτείται (σίγουρα θα μπορούσατε απλά να πάρετε το τελικό προϊόν κώδικα και να αντιγράψετε/επικολλήσετε και θα λειτουργήσει μια χαρά). Σε όσους ενδιαφέρονται για το Perl, προτείνω ανεπιφύλακτα το βιβλίο "Learning Perl" από τον O'Reilly, είναι ένα καλό διάβασμα και ένα από τα καλύτερα γραμμένα βιβλία για το Perl είχα την ευκαιρία να διαβάσω. ΣΗΜΑΝΤΙΚΟ: Ενώ οι μέθοδοι που παρουσιάζονται εδώ θα λειτουργήσουν αν γίνει σωστά, δεν μπορώ και απλά δεν θα αναλάβω καμία ευθύνη εάν κάνετε κάτι ηλίθιο και διαγράψετε τα πολύτιμα τραγούδια σας. Παρακαλούμε σκεφτείτε έντονα τη δημιουργία αντιγράφων ασφαλείας των αρχείων μουσικής σας πριν επιχειρήσετε να γράψετε ή να εκτελέσετε ένα σενάριο όπως το παρακάτω. Λάθος απλώς από την πλευρά της προσοχής, ώστε να μην πληγώσουμε συναισθήματα αν δεν το κάνετε, ευχαριστώ. Διαβάσατε την προειδοποίηση; (Ναι, ακόμη και εσείς, άτομο που δεν διάβασε την προειδοποίηση) Τέλεια! Ας ξεκινήσουμε:-) Ενημέρωση: Φαίνεται ότι ορισμένοι σεναριογράφοι perl δούλεψαν σκληρά για να γράψουν σενάρια iTunes. Για μια ποικιλία σεναρίων που σχετίζονται με το iTunes, ανατρέξτε στα Scripts του Teridon.
Βήμα 1: Ξεκινώντας
Όπως συμβαίνει με όλα τα πράγματα, υπάρχει μια μικρή προετοιμασία που πρέπει να γίνει πριν μπορέσουμε να τρέξουμε αυτό το σενάριο. Έτσι, πράγματα που θα χρειαστείτε για να διαγράψετε αυτόματα τραγούδια από το iTunes: 1) Ένας υπολογιστής (duh) 2) iTunes (διπλό duh) 3) Perl (δύσκολο να εκτελέσετε ένα σενάριο Perl χωρίς Perl, δεν θα λέγατε;) 4) Το δικό σας αγαπημένος συντάκτης (είμαι ο ίδιος υποστηρικτής του vi και του vim, αλλά κάθε επεξεργαστής κειμένου πρέπει να κάνει το κόλπο) 5) Ένα iPod (δεν είναι υποχρεωτικό, αλλά ωραίο να υπάρχει για λόγους που θα γίνουν σαφείς σύντομα) Getting Perl: Ακολουθήστε το Οι οδηγίες εδώ, θα πρέπει να είναι αρκετά απλές: https://www.perl.com/download.csp Μόλις κατεβάσετε, εγκαταστήσετε και είστε έτοιμοι να ξεκινήσετε το Perl, θα θέλουμε κάποιες πληροφορίες παρασκηνίου για το τι κάνουμε. Θα πρέπει να σημειωθεί ότι το σενάριο αναπτύχθηκε αρχικά για Mac OS X, αν και οι ίδιες μέθοδοι θα πρέπει να λειτουργούν σε λειτουργικά συστήματα που δεν βασίζονται σε Unix, όπως τα Windows. Timeρα για το βαρετό, «εκπαιδευτικό» μέρος του Διδάσκοντος.
Βήμα 2: Η βασική ιδέα σεναρίου
Το iTunes περιλαμβάνει σύστημα αξιολόγησης 5 αστέρων που επιτρέπει στους χρήστες να βαθμολογούν τραγούδια. Τραγούδια με βαθμολογία 5 αστέρων θεωρούνται τα καλύτερα τραγούδια ενώ τραγούδια με βαθμολογία 1 αστέρι θεωρούνται από τα χειρότερα. Για τους σκοπούς μας, θα υποθέσουμε ότι κάθε τραγούδι που στερείται βαθμολογίας (γνωστό και ως 0 αστέρια) είναι αυτό που ο χρήστης δεν είχε την ευκαιρία να βαθμολογήσει ακόμα. Προσωπικά, όταν βαθμολογείτε τραγούδια, εάν ένα τραγούδι έχει βαθμολογία 1 αστέρι, I διαπιστώστε ότι είναι μάλλον αρκετά κακό που δεν αξίζει τον πολύτιμο χώρο στο σκληρό δίσκο που καταλαμβάνει το τραγούδι. Ως εκ τούτου, το Perl Script που θα σας παρουσιάσω σε αυτό το Instructable θα αναλύσει τη βιβλιοθήκη iTunes και θα διαγράψει οποιοδήποτε κομμάτι έχει λάβει βαθμολογία 1 αστέρι. Ως πρόσθετο μπόνους, τα τραγούδια μπορούν να βαθμολογηθούν ενώ ο χρήστης είναι εν κινήσει χρησιμοποιώντας ένα iPod. Με αυτόν τον τρόπο, μπορείτε να επιλέξετε τραγούδια για διαγραφή ενώ βρίσκεστε εν κινήσει απλά βαθμολογώντας τα και θα διαγραφούν αυτόματα όταν συγχρονίσετε το iPod στον υπολογιστή σας αργότερα (εάν συγχρονίσετε αυτόματα το iPod με τον υπολογιστή σας). Τώρα γνωρίζουμε τι κάνουμε, ας δούμε πώς θα τραβήξουμε πληροφορίες τραγουδιού από το iTunes για το Perl Script.
Βήμα 3: Η βιβλιοθήκη XML: Goto Guy του ITunes
Για να διαγράψουμε ένα τραγούδι από τον υπολογιστή με βάση τη βαθμολογία του, απαιτούμε 2 κομμάτια πληροφοριών: τη βαθμολογία του τραγουδιού και τη θέση του τραγουδιού. Ευτυχώς για εμάς υπάρχει ένα εύχρηστο αρχείο από το οποίο μπορούμε να πάρουμε όλες τις πληροφορίες που θέλαμε ποτέ για το iTunes: το αρχείο XML της Βιβλιοθήκης Μουσικής iTunes. Το αρχείο XML ονομάζεται "iTunes Music Library.xml" και πρέπει να βρίσκεται στον κατάλογο Μουσικής στον κύριο σκληρό σας δίσκο.
Σχετικά με το αρχείο XML: Το αρχείο iTunes xml είναι ένα είδος βάσης δεδομένων που διατηρείται από το iTunes και διατηρείται πάντα ενημερωμένο. Όταν γίνεται τροποποίηση στο iTunes, το αντίστοιχο τμήμα του αρχείου iTunes XML τροποποιείται για να σημειωθεί αυτή η αλλαγή. Δείγμα καταχώρισης από το αρχείο iTunes XML μου δίνεται παρακάτω: 25T01: 26: 58ZRating40Album Rating40Album Rating ComputedPististent ID9AC5DB9713240B44Track TypeFileLocationfile: //localhost/Volumes/HD1/iTunes%20Music/A-Ha/Unknown%20Album3Take%20er το αρχείο XML αποτελείται από τιμές που περιβάλλονται από ετικέτες τύπου HTML. Για τους σκοπούς του σεναρίου, θα μας ενδιαφέρουν τα κομμάτια πληροφοριών Track ID, Name, Artist, Rating και Location. Αν κοιτάτε το αρχείο XML, μπορεί να παρατηρήσετε από πάνω ότι αυτό το τραγούδι έχει "βαθμολογία" 40. Το iTunes εκχωρεί σε κάθε τραγούδι έναν ακέραιο, που κυμαίνεται από 0 έως 100, με κάθε 20 πόντους να είναι ένα επιπλέον αστέρι για την αξιολόγηση. Έτσι, η βαθμολογία 20 αντιστοιχεί σε βαθμολογία 1 αστέρι, η βαθμολογία 40 είναι βαθμολογία 2 αστέρων και ούτω καθεξής, με 100 να είναι βαθμολογία 5 αστέρων. Έτσι, τώρα που γνωρίζουμε για το αρχείο XML, ας ξεκινήσουμε τη δέσμη ενεργειών
Βήμα 4: Your Friend the Hash (ακόμα κι αν δεν βρίσκεστε στο Άμστερνταμ)
Πριν μπορέσουμε να εξαλείψουμε αρχεία, χρειαζόμαστε μια λειτουργική βάση δεδομένων που να συνδέει όλες τις πληροφορίες του τραγουδιού μαζί. Ενώ θα μπορούσαν να χρησιμοποιηθούν πιο εξελιγμένες δομές δεδομένων, όπως μια σειρά από κατακερματισμούς ή κατακερματισμό, αυτό το σενάριο είναι αρκετά απλό για να αξίζει τη χρήση μιας απλής λίστας κατακερματισμών. Για τους μη μυημένους, ένα hash δεν είναι παρά ένας πίνακας που ευρετηριάζεται με συμβολοσειρές ή μια συγχωνευμένη μάζα ζευγών κλειδιού/τιμής. Κάποιος μπορεί να σκεφτεί ένα hash ως ένα μεγάλο βαρέλι με αντικείμενα (τις τιμές) σε αυτό και όλα στο μεταφορικό βαρέλι έχουν μια ετικέτα (τα κλειδιά) προσαρτημένη. Μπορείτε να τραβήξετε οποιοδήποτε αντικείμενο στο βαρέλι απλά βρίσκοντας την ετικέτα του. Για περισσότερες πληροφορίες σχετικά με τους κατακερματισμούς, ο ακόλουθος σύνδεσμος μπορεί να είναι χρήσιμος: https://www.tutorialspoint.com/perl/perl_hashes.htmΜπορούμε να χρησιμοποιήσουμε τις πληροφορίες ότι σε κάθε τραγούδι του αρχείου XML iTunes αποδίδεται ένα μοναδικό αναγνωριστικό κομματιού για να παρακολουθεί τα τραγούδια. Εξαιτίας αυτού, το trackID δημιουργεί ένα ιδανικό κλειδί για τα hashes. Ως εκ τούτου, μπορούμε να ορίσουμε 4 κατακερματισμούς για τον τίτλο του τραγουδιού, τον καλλιτέχνη, τη βαθμολογία και την τοποθεσία. Μόλις καθοριστούν αυτά, μπορούμε να σαρώσουμε το αρχείο και να γεμίσουμε τη βάση δεδομένων κατακερματισμού χρησιμοποιώντας μερικές απλές κανονικές εκφράσεις, οι οποίες θα εμφανιστούν στη συνέχεια.
Βήμα 5: Ένα (πολύ) σύντομο μάθημα για τις τακτικές εκφράσεις
Προκειμένου να αρπάξουμε τις καταχωρήσεις κατακερματισμού μας από το αρχείο XML και επίσης να εξοικονομήσουμε λίγο χρόνο αναζήτησης, θα θελήσουμε να ζητήσουμε τη βοήθεια ενός από τα πιο ισχυρά χαρακτηριστικά του Perl: την κανονική έκφραση. Θα κάνω ένα πολύ σύντομο μάθημα σχετικά με τις κανονικές εκφράσεις, αλλά για εσάς που θέλετε πιο λεπτομερείς εξηγήσεις, υπάρχουν πολλά καλά σεμινάρια τακτικής έκφρασης στο διαδίκτυο. Ρίξτε μια ματιά στο https://perldoc.perl.org/perlretut.html για ένα καλό σεμινάριο κανονικής έκφρασης. Εν ολίγοις, οι κανονικές εκφράσεις μας παρέχουν ένα σύνολο εργαλείων για να περάσουμε από συμβολοσειρές, αντικαθιστώντας μια συμβολοσειρά με άλλη συμβολοσειρά ή αποθηκεύοντας τμήματα μια συμβολοσειρά για μεταγενέστερη χρήση. Οι κανονικές εκφράσεις παρέχουν 2 συναρτήσεις, τους αντιστοιχισμένους (m //) και τους τελεστές αντικατάστασης (s //), που πρόκειται να χρησιμοποιηθούν για αυτό το έργο. Για να χρησιμοποιήσουμε οποιαδήποτε από αυτές τις συναρτήσεις σε περιβάλλον εκχώρησης, θα χρησιμοποιήσουμε τον τελεστή σύνδεσης του Perl (= ~), ο οποίος χρησιμοποιείται για τη σύνδεση ενός μοτίβου σε μια μεταβλητή συμβολοσειράς της επιλογής μας. Παραδείγματα:
$ comment = ~ /Purduecer /; #επιστρέφει true αν η συμβολοσειρά $ comment περιέχει φράση "Purduecer" s/[a-z]/[A-Z]/; #πάρτε όλα τα πεζά γράμματα σε συμβολοσειρά και γράψτε τα με κεφαλαιοποίηση σε $ _ stringΈνα δεύτερο χρήσιμο χαρακτηριστικό των κανονικών εκφράσεων είναι αυτό των μεταβλητών μνήμης. Σε κανονικές εκφράσεις, μπορείτε να τοποθετήσετε ορισμένα στοιχεία σε παρένθεση και, στη συνέχεια, να χρησιμοποιήσετε τις ειδικές μεταβλητές μνήμης αντιστοίχισης μοτίβου $ 1, $ 2, κ.λπ. για να αποκτήσετε πρόσβαση στα τμήματα των συμβολοσειρών που αντιστοιχούν σε αυτά τα μέρη αργότερα. Παραδείγματα
/(Instructables) Robot/; #Ταιριάξτε οποιαδήποτε γραμμή με τη φράση "Instructables Robot" $ website = $ 1; #Αποθήκευση αποτελέσματος επιτυχούς αντιστοίχισης μοτίβου που περιέχεται στο πρώτο σύνολο parens #(σε αυτήν την περίπτωση, η μεταβλητή $ 1 περιέχει "Instructables")Τέλος, σε τακτικές εκφράσεις, υπάρχουν ορισμένοι χαρακτήρες που εξυπηρετούν έναν ειδικό σκοπό. Αυτές είναι οι αποδράσεις με ανάστροφη αναστροφή (όλες θα πρέπει να φαίνονται οικείες στους προγραμματιστές C), κλάσεις χαρακτήρων και μεταχαρακτήρες. Για παράδειγμα, για να ταιριάξουμε μεμονωμένο γράμμα που έχει καρτέλα και στις δύο πλευρές, θα μπορούσαμε να πούμε
/\ t [a-zA-Z] t/Αυτές οι τετράγωνες αγκύλες χρησιμοποιούνται σε κανονικές εκφράσεις για να ορίσουν μια κατηγορία χαρακτήρων. Ας υποθέσουμε, ωστόσο, ότι θέλαμε να βρούμε κείμενο κλειστό σε αγκύλες στη γραμμή. Δεν θα μπορούσαμε απλά να το γράψουμε όπως είναι, όπως φαίνεται παρακάτω
/
/
Βήμα 6: Εφαρμογή τακτικών εκφράσεων στο σενάριο ITunes
Τώρα που ελπίζουμε να έχουμε κάποια γνώση για τις βασικές υποκείμενες έννοιες που τροφοδοτούν τις κανονικές εκφράσεις, ήρθε η ώρα να τις εφαρμόσουμε στο σενάριο iTunes. Κατά την ανάγνωση του κώδικα xml, ορισμένοι χαρακτήρες, όπως η μπροστινή κάθετο, συναντώνται αρκετά συχνά. Επομένως, θα εκμεταλλευτούμε το γεγονός ότι ο τελεστής m // σας επιτρέπει να επιλέξετε όποια οριοθέτηση θέλετε στον κώδικα (θα χρησιμοποιήσουμε τετράγωνες αγκύλες, αν και σίγουρα θα λειτουργήσουν και άλλοι οριοθετητές) Αρχικά, χρειάζεται μόνο να διαβάσουμε ένα τμήμα το πλήρες αρχείο iTunes XML. Τμήματα του αρχείου που περιέχουν πληροφορίες όπως λίστες αναπαραγωγής κ.λπ. δεν είναι απαραίτητα. Η πρώτη γραμμή της ενότητας λίστες αναπαραγωγής, η οποία έρχεται μετά τις πληροφορίες του τραγουδιού, μοιάζει με την ακόλουθη: Λίστες αναπαραγωγής Επομένως, σε λίγο βρόχο, μπορούμε να προσθέσουμε σε μια δήλωση που μεταβαίνει στο τέλος της ανάγνωσης του αρχείου εάν συναντηθεί αυτή η γραμμή.
while () {#loop_instructions_here last if ($ _ = ~ m [Playlists])}Στη συνέχεια, για τη δημιουργία των αναγνωριστικών κατακερματισμού, μπορούμε να χρησιμοποιήσουμε ένα δέντρο if-elsif για να δημιουργήσουμε τους κατακερματισμούς της βάσης δεδομένων μας, χρησιμοποιώντας τις μεταβλητές αντιστοίχισης μνήμης που μάθαμε στο προηγούμενο βήμα για να αποθηκεύσουμε τιμές στα hashes
εάν ($ _ = ~ m [(d+)]) {$ id = $ 1; } elsif ($ _ = ~ m [Βαθμολογία (d+)]) {$ rate_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Όνομα (.+)]) {$ name_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Καλλιτέχνης (.+)])) {$ art_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Locationfile: // localhost (.*)]) {$ loc_hash {$ id} = $ 1; }Τώρα που έχουμε δημιουργήσει τη βάση της βάσης δεδομένων κατακερματισμού μας, θα καλύψουμε τον εντοπισμό και την αφαίρεση αρχείων 1 αστέρων, για να συνεχίσουμε στο επόμενο βήμα!
Βήμα 7: Εντοπισμός και διαγραφή αυτών των κομματιών 1 αστέρι
Τώρα που έχουμε δημιουργήσει τη βάση δεδομένων μας, ήρθε η ώρα να αναζητήσουμε κομμάτια 1 αστέρων, ώστε να μπορούμε να τα διαγράψουμε. Το Perl παρέχει μια χρήσιμη δομή βρόχου που ονομάζεται βρόχος foreach που μπορεί να χρησιμοποιηθεί για να επαναληφθεί σε όλα τα κλειδιά των hashes μας. Θα πρέπει να σημειωθεί ότι όχι κάθε κομμάτι στη βιβλιοθήκη iTunes σας θα έχει μια καταχώριση στο hash των βαθμολογιών. Αυτό οφείλεται στο γεγονός ότι τα τραγούδια που δεν έχουν βαθμολογία δεν λαμβάνουν γραμμή βαθμολογίας κομματιού στο αρχείο iTunes XML. Επομένως, όταν κάνουμε βρόχο στους κατακερματισμούς, θα θέλουμε να χρησιμοποιήσουμε την ακόλουθη κατασκευή:
foreach $ id (ταξινόμηση κλειδιών %rate_hash) { #… εισαγωγή κωδικού βρόχου εδώ}Μετά από αυτό, είναι τόσο απλό όσο η ακόλουθη πρόταση
αποσυνδέστε $ loc_hash {$ id} αν $ rate_hash {$ id} == 20;Η λειτουργία αποσύνδεσης που χρησιμοποιείται στο παραπάνω δείγμα κώδικα είναι ο τρόπος διαγραφής αρχείων του Perl. Μπορεί να μπείτε στον πειρασμό να χρησιμοποιήσετε μια κλήση συστήματος στη λειτουργία διαγραφής του λειτουργικού σας συστήματος, αλλά για λόγους φορητότητας ο κώδικας που έχω γράψει δεν χρησιμοποιεί την κλήση συστήματος. Έχουμε τώρα τη βασική δομή για τον κωδικό μας. Στα επόμενα βήματα, θα κάνουμε ορισμένες βελτιώσεις στον κώδικα, ώστε να μπορείτε να έχετε ένα πλήρες, λειτουργικό σενάριο για να απαλλαγείτε από αυτά τα ενοχλητικά 1 αστέρια.
Βήμα 8: Το URI Escapes and How to Get Around Them
Εάν προσπαθήσετε να εκτελέσετε το σενάριο ως έχει, θα αντιμετωπίσετε πολλά σφάλματα από το λειτουργικό σας σύστημα και αν κοιτάξετε τις διαδρομές αρχείων που προσπαθείτε να διαγράψετε, ενδέχεται να βρείτε ασυνήθιστους χαρακτήρες ενσωματωμένους στις διαδρομές που είναι ανεπιθύμητοι. Υπάρχει μια πολύ καλή πιθανότητα αυτές οι διαδρομές να περιέχουν χαρακτήρες διαφυγής URI. Τι είναι οι αποδράσεις URI; Σε HTML και XML, οι χαρακτήρες διαφυγής URI (γνωστοί και ως αποδράσεις URI) είναι ειδικοί μεταχαρακτήρες που χρησιμοποιούνται για την αναζήτηση κυριολεκτικών εμφανίσεων αυτού του χαρακτήρα. Για παράδειγμα, δεν θα δείτε ποτέ ένα απλό κενό διάστημα σε μια συμβολοσειρά χαρακτήρων XML. Ωστόσο, θα δείτε την αναπαράσταση XML ενός απλού λευκού χώρου, %20. (Σίγουρα έχετε δει αυτά στη γραμμή URL στο πρόγραμμα περιήγησής σας και αναρωτηθήκατε τι ήταν. Λοιπόν, τώρα ξέρετε) Μια διαφυγή URI αποτελείται από ένα σύμβολο % ακολουθούμενη από έναν διψήφιο δεκαεξαδικό κωδικό που αντιπροσωπεύει την τιμή ASCII του χαρακτήρα. σημείο, θα μπορούσατε να γράψετε μια ολόκληρη δέσμη δηλώσεων αντικατάστασης στον κατακερματισμό τοποθεσίας για να αντικαταστήσετε κάθε πιθανό μεταχαρακτήρα που συναντάτε (π.χ. $ loc_hash {$ id} = s/%20//; και ούτω καθεξής). Ευτυχώς, όμως, το Perl παρέχει έναν καλύτερο τρόπο για τη φροντίδα αυτών των πραγμάτων. Το Perl συνοδεύεται από μια μονάδα που ονομάζεται URI:: Escape, η οποία έχει μια ενσωματωμένη λειτουργία, uri_unescape, που θα κάνει τη δουλειά της εξάλειψης των αποδράσεων URI για εμάς Το Για να χρησιμοποιήσετε τη μονάδα, απλώς προσθέστε την ακόλουθη γραμμή στο επάνω μέρος του κώδικα:
χρήση URI:: Escape. Τώρα, αφού εκχωρήσουμε τον πίνακα $ loc_hash {$ id} στον βρόχο αρχείου XML, μπορούμε να προσθέσουμε την ακόλουθη γραμμή στη συνέχεια
uri_unescape ($ loc_hash {$ id});Η παραπάνω γραμμή διαγράφει αυτόματα τυχόν χαρακτήρες διαφυγής URI. Ως πρόσθετο μπόνους, μεταφράζει επίσης μερικούς διεθνείς χαρακτήρες. Έτρεξα το σενάριο με μερικές διαδρομές αρχείων που είχαν ιαπωνικό konji μέσα τους και η συνάρτηση uri_unescape μετέφρασε τις μορφές XML αυτών των χαρακτήρων στους αρχικούς χαρακτήρες τους, έτσι ώστε η αποσύνδεση να μπορεί να διαγράψει με επιτυχία το αρχείο. Πριν προχωρήσουμε, πρέπει να γίνει ένα επιπλέον βήμα Το Για λόγους που δεν καταλαβαίνω πλήρως, το iTunes κωδικοποιεί το σύμβολο ampersand (&) ως & στις συμβολοσειρές του. Αν κάποιος γνωρίζει γιατί συμβαίνει αυτό, παρακαλώ ενημερώστε με. Εν τω μεταξύ, εξαλείφουμε αυτό το ζήτημα προσθέτοντας την ακόλουθη γραμμή κάτω από τη γραμμή uri_unescape
$ loc_hash {$ id} = ~ s//&/;Τώρα το σενάριο θα έχει διαδρομές αρχείων χωρίς περίεργους χαρακτήρες και η λειτουργία αποσύνδεσης θα μπορεί να βρίσκει αρχεία στις κατάλληλες θέσεις τους για να τα διαγράψει. Λοιπόν, θα συμβεί εάν χρησιμοποιείτε Mac OSX (και πιθανώς και τα περισσότερα άλλα λειτουργικά συστήματα που βασίζονται σε Unix επίσης). Διαβάστε παρακάτω για να κάνετε το σενάριο συμβατό με άλλα λειτουργικά συστήματα (συγκεκριμένα, Windows).
Βήμα 9: Προσθήκη συμβατότητας σεναρίων στα Windows
Το σενάριο, όπως γράφτηκε μέχρι τώρα, αφαιρεί αποτελεσματικά κομμάτια σε λειτουργικά συστήματα που βασίζονται σε Unix. Για να λειτουργήσει στα Windows, απαιτείται μια μικρή προσθήκη. Σε αντίθεση με το Mac και άλλα λειτουργικά συστήματα που βασίζονται σε Unix, τα Windows δεν υποστηρίζουν την έννοια ενός μοναδικού καταλόγου ρίζας. Επομένως, όλα τα ονόματα διαδρομών ξεκινούν με έναν τόμο (C: ή E: ή οποιοδήποτε άλλο γράμμα μπορείτε να σκεφτείτε, εν αντιθέσει με τον βασικό κατάλογο (/). Ευτυχώς για εμάς, το Perl έχει μια ειδική μεταβλητή, $O (αυτό είναι κεφαλαίο o, όχι μηδέν), που μας λέει τι λειτουργικό σύστημα χρησιμοποιούμε αυτήν τη στιγμή. Επομένως, εάν η τιμή που είναι αποθηκευμένη σε αυτήν τη μεταβλητή περιέχει "Win", θα θέλουμε να καταργήσουμε την κύρια κάθετη γραμμή στη διαδρομή αρχείου τοποθεσίας XML. Αυτό μπορεί να γίνει με την ακόλουθη γραμμή κώδικα (προστέθηκε αφού αναλύσουμε με επιτυχία τη θέση ενός κομματιού από το αρχείο XML):
$ loc_hash {$ id} = substr ($ loc_hash {$ id}, 1) αν $^O = ~ /Win /i;Τώρα, το σενάριο θα λειτουργήσει είτε εκτελείται σε OS X είτε σε Windows.
Βήμα 10: Το ολοκληρωμένο σενάριο
Επισυνάπτεται η δική μου έκδοση του ολοκληρωμένου σεναρίου αυτόματης διαγραφής του iTunes, για εσάς που απλά θέλατε το τελικό προϊόν και όχι την εξήγηση για το πώς λειτουργεί.
Για να χρησιμοποιήσετε το σενάριο, θα θέλετε να αποθηκεύσετε το αρχείο ως αρχείο perl (.pl επέκταση) και στη συνέχεια να το κάνετε εκτελέσιμο (chmod 751 στο Unix, δεν είστε σίγουροι τι είναι για συστήματα Windows).