Indholdsfortegnelse:

Slet de uønskede ITunes -sange fra din computer: 10 trin
Slet de uønskede ITunes -sange fra din computer: 10 trin

Video: Slet de uønskede ITunes -sange fra din computer: 10 trin

Video: Slet de uønskede ITunes -sange fra din computer: 10 trin
Video: Йога для начинающих дома с Алиной Anandee #2. Здоровое гибкое тело за 40 минут. Универсальная йога. 2024, Juli
Anonim
Slet de uønskede iTunes -sange fra din computer
Slet de uønskede iTunes -sange fra din computer

Hej, mine damer og herrer, dette er min første kodning, der kan instrueres, så lad venligst dine våben blive hjemme, når du kommenterer (knive er dog acceptable). Med fremkomsten af mp3 -afspillere har det været muligt for folk at bære hidtil usete mængder af musik rundt med dem i lommerne. Det er ikke ualmindeligt at høre om mennesker, der har samlinger på 5, 10, endda 15 tusinde sange (og nogle mennesker, endnu flere). Af mp3 -afspillere er ingen mere populære end Apples iPod og softwaren, der kører den, iTunes. Med så store musikbiblioteker kan det dog blive noget kedeligt at slippe af med de sange, der simpelthen ikke lyder gode eller appellerer til dig mere. Det kan tage aldre at gå spor for spor gennem din musiksamling i iTunes og slippe af med de sange, du ikke kan lide. Det er her, dette instruerbare kommer ind. I denne instruktive vil jeg vise dig en måde at automatisk slippe af med sange der er simpelthen ganske forfærdelige, med lidt hjælp fra min gode ven, Perl. Et godt grundlæggende kendskab til Perl er yderst nyttigt, når man forsøger at gentage dette instruerbare, men ikke påkrævet (du kan bestemt bare tage det færdige kodeprodukt og kopiere/indsætte det vil fungere fint). For dem, der er interesserede i Perl, anbefaler jeg stærkt bogen "Learning Perl" fra O'Reilly, det er en god læsning og en af de bedst skrevne bøger om Perl, jeg har haft chancen for at læse. VIGTIGT: Selvom metoderne præsenteret her vil fungere hvis det gøres korrekt, kan jeg og vil simpelthen ikke acceptere noget ansvar, hvis du gør noget dumt og sletter dine dyrebare sange. Overvej kraftigt at tage en sikkerhedskopi af dine musikfiler, før du forsøger at skrive eller udføre et script som det følgende. Bare tag fejl på siden af forsigtighed, så vi ikke får nogen følelser såret, hvis du ikke gør det, tak. Læs advarslen? (Ja, selv du, person der ikke læste advarslen) Fantastisk! Lad os komme i gang:-) Opdatering: Det ser ud til, at nogle perl-scriptere har været hårde i gang med at skrive iTunes-scripts. For en række iTunes-relaterede scripts, tjek Teridons Scripts.

Trin 1: Kom godt i gang

Kom godt i gang
Kom godt i gang

Som med alle andre ting er der en lille forberedelse, der skal udføres, før vi kan køre dette script. Så ting du skal bruge til automatisk at slette sange fra iTunes: 1) En computer (duh) 2) iTunes (dobbelt duh) 3) Perl (svært at køre et Perl -script uden Perl, vil du ikke sige?) 4) Din favoritredaktør (jeg er selv fortaler for vi og vim, men enhver tekstredaktør bør gøre tricket) 5) En iPod (ikke obligatorisk, men god at have af grunde, der vil blive gjort klart nok snart) Få Perl: Følg instruktionerne her, skal være enkle nok: https://www.perl.com/download.csp Når du har downloadet, installeret og klar til at gå i gang med Perl, vil vi have nogle baggrundsoplysninger om, hvad det er, vi gør. Det skal bemærkes, at scriptet oprindeligt blev udviklet til Mac OS X, selvom de samme metoder skulle fungere på ikke-Unix-baserede operativsystemer som f.eks. Windows. Tid til den kedelige, er, "uddannelsesmæssige" del af Instructable.

Trin 2: Den grundlæggende scriptidé

iTunes inkluderer et 5-stjernet ratingsystem, der gør det muligt for brugere at vurdere sange. Sange med en 5-stjernet vurdering anses for at være de bedste sange, mens sange med en 1-stjernet vurdering antages at være nogle af de værste sange. Til vores formål antager vi, at enhver sang, der mangler en rating (aka 0 stjerner), er en, som brugeren ikke har haft mulighed for at bedømme endnu. synes det er nok slemt nok, at det ikke fortjener den dyrebare harddiskplads, som sangen fylder. Derfor vil Perl-scriptet, jeg vil præsentere for dig i denne instruktionsbog, analysere gennem iTunes-biblioteket og slette ethvert nummer, der er blevet tildelt en 1-stjernet rating. Som en ekstra bonus kan sangene vurderes, mens brugeren er på farten ved hjælp af en iPod. På denne måde kan du vælge sange til sletning, mens du er på farten, ved blot at bedømme dem, og de vil automatisk blive slettet, når du senere synkroniserer din iPod til din computer (hvis du automatisk synkroniserer din iPod med din computer). Nu ved vi, hvad vi gør, lad os se, hvordan vi skal trække sangoplysninger fra iTunes til Perl Script.

Trin 3: XML -biblioteket: ITunes 'Goto Guy

XML -biblioteket: ITunes 'Goto Guy
XML -biblioteket: ITunes 'Goto Guy

For at slette en sang fra computeren baseret på dens rating, kræver vi 2 oplysninger: sangens vurdering og placeringen af sangen. Heldigvis for os er der en praktisk fil, som vi kan få alle de oplysninger, vi nogensinde har ønsket om iTunes fra: iTunes Music Library XML -fil. XML -filen kaldes "iTunes Music Library.xml" og skal være placeret i dit musikmappe på din primære harddisk.

Om XML -filen: iTunes xml -filen er en slags database, der vedligeholdes af iTunes og altid holdes opdateret. Når der foretages en ændring i iTunes, ændres den tilsvarende del af iTunes XML -filen for at bemærke denne ændring. En prøvepost fra min iTunes XML-fil er angivet nedenfor: 1218 Spor-ID1218 NavnTake On MeArtistA-HaGenre80'sKindMPEG-lydfilSize3682382Total Time230138Date Modified2007-09-24T02: 11: 30ZDate Added2008-05-28T05: 00: 24ZBit100Play82Perio8Perio8Perio8Perio8Perio8Perio8Perio128 25T01: 26: 58ZRating40Album Rating40Album Rating ComputedPersistent ID9AC5DB9713240B44Track TypeFileLocationfile: //localhost/Volumes/HD1/iTunes%20Music/A-Ha/Unknown%20Album/Take%20On%20Me1p3 XML-filen består af værdier omgivet af tags i HTML-stil. Med henblik på scriptet vil vi være interesserede i spor -id, navn, kunstner, bedømmelse og lokalitet. Hvis du kigger på XML -filen, kan du bemærke ovenfra, at denne sang har en "rating" på 40. iTunes tildeler hver sang et helt tal, der spænder fra 0 til 100, hvor hvert 20 point er en ekstra stjerne for bedømmelsen. Så en rating på 20 svarer til en 1-stjerneklassificering, en rating på 40 er en 2-stjernet rating og så videre, hvor 100 er en 5-stjernet rating. Så nu hvor vi kender til XML -filen, lad os starte scripting

Trin 4: Din ven hash (selvom du ikke er i Amsterdam)

Din ven hash (selvom du ikke er i Amsterdam)
Din ven hash (selvom du ikke er i Amsterdam)

Inden vi kan fjerne filer, har vi brug for en fungerende database, der relaterer alle sangoplysninger sammen. Selvom mere sofistikerede datastrukturer, såsom en række hash eller hash af hash, kan bruges, er dette script simpelt nok til at fortjene brug af en simpel liste med hash. For de uindviede er en hash ikke andet end en matrix, som er indekseret af strenge eller en blandet masse af nøgle/værdipar. Man kan tænke på en hash som en stor tønde med ting (værdierne) i, og alt i den metaforiske tønde har et mærke (nøglerne) vedhæftet. Du kan trække ethvert element i tønden ud ved blot at finde dets mærke. For mere information om hash, kan følgende link være nyttigt: https://www.tutorialspoint.com/perl/perl_hashes.htmVi kan bruge oplysningerne om, at hver sang i iTunes XML -filen er tildelt et unikt spor -id til at holde styr på sangene. På grund af dette gør trackID en ideel nøgle til hash. Derfor kan vi oprette 4 hash for sangtitel, artist, rating og placering. Når disse er blevet etableret, kan vi scanne gennem filen og udfylde vores hash -database ved hjælp af nogle enkle regulære udtryk, som derefter vil blive vist.

Trin 5: En (meget) kort lektion om regulære udtryk

For at få fat i vores hashposter fra XML -filen og også spare lidt tid på at søge, vil vi have brug for hjælp fra en af Perls mere kraftfulde funktioner: det regulære udtryk. Jeg vil lave en meget kort lektion om regulære udtryk, men for dem af jer, der ønsker mere detaljerede forklaringer, er der masser af gode regulære udtryksstudier online. Tjek https://perldoc.perl.org/perlretut.html for en god tutorial om regulært udtryk. Kort sagt giver regulære udtryk os et sæt værktøjer til at gennemgå strenge, udskifte en streng med en anden streng eller gemme dele af en streng til senere brug. Regelmæssige udtryk giver 2 funktioner, de matchende (m //) og udskiftning (s //) operatører, der skal bruges til dette projekt. For at bruge en af disse funktioner i en opgavekontekst vil vi bruge Perls bindingsoperator (= ~), som bruges til at binde et mønster til en valgfri strengvariabel. Eksempler:

$ kommentar = ~ /Purduecer /; #returns true, hvis $ comment string indeholder sætningen "Purduecer" s/[a-z]/[A-Z]/; #tag alle små bogstaver i streng og store dem i $ _ strengEn anden nyttig egenskab ved regulære udtryk er hukommelsesvariabler. I regulære udtryk kan du placere bestemte elementer i parentes og derefter bruge de specielle mønstermatch -hukommelsesvariabler $ 1, $ 2 osv. For at få adgang til de dele af strengene, der matchede disse dele senere.

/(Instructables) Robot/; #Match enhver linje med sætningen "Instructables Robot" $ website = $ 1; #Gem resultat af vellykket mønstermatch i første sæt parens #(i dette tilfælde indeholder variabel $ 1 "Instructables")Endelig er der i almindelige udtryk visse tegn, der tjener et særligt formål. Disse er undslipninger (som alle burde se velkendte ud for C -programmører), karakterklasser og metategn. For eksempel, for at matche ethvert enkelt bogstav, der har en fane på hver side, kan vi sige

/\ t [a-zA-Z] t/Disse firkantede parenteser bruges i regulære udtryk til at definere en tegnklasse. Antag dog, at vi ønskede at finde tekst omsluttet af firkantede parenteser på linjen. Vi kunne ikke bare skrive det som det er, som det er vist nedenfor

/

/

Trin 6: Anvendelse af regulære udtryk til ITunes -scriptet

Anvendelse af almindelige udtryk til ITunes -scriptet
Anvendelse af almindelige udtryk til ITunes -scriptet

Nu hvor vi forhåbentlig har lidt viden om de grundlæggende underliggende begreber, der driver regulære udtryk, er det tid til at anvende disse på iTunes -scriptet. Når man læser xml -kode, stammer visse tegn, f.eks. Skråstregen, temmelig ofte. Derfor vil vi drage fordel af det faktum, at operatøren m // lader dig vælge de afgrænsere, du vil have i koden (vi vil bruge firkantede parenteser, selvom andre afgrænsere bestemt vil fungere) Først skal vi kun læse en del af hele iTunes XML -filen. Dele af filen, der indeholder oplysninger som afspilningslister osv., Er ikke nødvendige. Den første linje i afspilningslisteafsnittet, der kommer efter sangoplysningerne, ligner følgende: Afspilningslister Derfor kan vi i et stykke tid loop tilføje en erklæring, der springer til slutningen af fillæsningen, hvis den linje stødes på.

mens () {#loop_instructions_here varer if ($ _ = ~ m [Playlists])}For derefter at opbygge hash-id'erne kan vi bruge et if-elsif-træ til at opbygge vores database-hash ved hjælp af de variabler til hukommelsesmatch, vi lærte om i det foregående trin for at gemme værdier i hash

hvis ($ _ = ~ m [(d+)]) {$ id = $ 1; } elsif ($ _ = ~ m [Rating (d+)]) {$ rate_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Navn (.+)]) {$ name_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Kunstner (.+)]) {$ art_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Locationfile: // localhost (.*)]) {$ loc_hash {$ id} = $ 1; }Nu hvor vi har konstrueret grundlaget for vores hash-database, vil vi dække lokalisering og fjernelse af 1-stjernede filer, så videre til næste trin!

Trin 7: Find og slet disse 1-stjernede spor

Find og slet disse 1-stjernede spor
Find og slet disse 1-stjernede spor

Nu hvor vi har oprettet vores has-database, er det tid til at jagte de 1-stjernede spor, så vi kan slette dem. Perl giver en nyttig looping -konstruktion kaldet en foreach -loop, der kan bruges til at gentage alle nøglerne i vores hash -filer. Det skal bemærkes, at ikke alle spor i dit iTunes -bibliotek vil have en post i ratings -hash. Dette skyldes, at sange, der ikke har en rating, ikke får en sporvurderingslinje i iTunes XML -filen. Derfor vil vi, når vi går gennem hashes, bruge følgende konstruktion:

foreach $ id (sorter nøgler %rate_hash) { #… indsæt looping -kode her}Derefter er det så enkelt som at bruge følgende erklæring

fjerne tilknytning til $ loc_hash {$ id}, hvis $ rate_hash {$ id} == 20;Frakoblingsfunktionen, der bruges i eksempelkoden ovenfor, er Perls måde at slette filer. Du kan blive fristet til at bruge et systemopkald til dit operativsystems slettefunktion, men af overførselshensyn bruger koden, jeg har skrevet, ikke systemopkaldet. Vi har nu den grundlæggende struktur for vores kode. I de følgende trin foretager vi nogle forbedringer af koden, så du kan få et fuldt funktionelt script til at slippe af med de irriterende 1-stjerner.

Trin 8: URI undslipper og hvordan man kommer rundt om dem

Hvis du forsøger at køre scriptet som det er, vil du støde på mange fejl fra dit operativsystem, og hvis du ser på de filstier, du forsøger at slette, kan du finde usædvanlige tegn indlejret i stierne, som er uønskede. Der er en ganske god chance for, at disse stier indeholder URI -flugtkarakterer. Hvad er URI -flugt? I HTML og XML er URI -escape -tegn (aka URI -escape) særlige metategn, der bruges til at søge efter bogstavelige forekomster af det tegn. For eksempel vil du aldrig se et simpelt mellemrum i en XML -tegnstreng. Du vil dog se XML -repræsentationen af et simpelt mellemrum, %20. (Du har sikkert set disse i URL-linjen i din browser og spekuleret på, hvad de var. Nå, nu ved du det) En URI-flugt består af et % -tegn efterfulgt af en 2-cifret hexadecimal kode, der repræsenterer karakterens ASCII-værdi. punkt, kan du skrive en hel masse erstatningssætninger på placeringshashen for at erstatte alle mulige metakarakterer, du støder på (dvs. $ loc_hash {$ id} = ~ s/%20//; og så videre). Heldigvis giver Perl dog en bedre måde at tage sig af disse ting på. Perl leveres sammen med et modul kaldet URI:: Escape, som har en indbygget funktion, uri_unescape, der vil gøre jobbet med at eliminere URI-undslippe for os. For at bruge modulet skal du blot tilføje følgende linje øverst i din kode:

brug URI:: Escape;Nu, efter at vi har tildelt arrayet $ loc_hash {$ id} i XML -filsløjfen, kan vi tilføje følgende linje bagefter

uri_unescape ($ loc_hash {$ id});Ovenstående linje eliminerer automatisk alle URI -flugttegn. Som en ekstra bonus oversætter det også nogle internationale karakterer. Jeg kørte scriptet med et par filbaner, der havde japansk konji i, og uri_unescape -funktionen oversatte XML -formaterne for disse tegn til deres originale tegn, så afkoblingen kunne slette filen. Inden vi går videre, skal der tages et ekstra trin. Af grunde, som jeg ikke helt forstår, koder iTunes for ampersand (&) symbolet som & i dets strenge. Hvis nogen ved hvorfor det er, så lad mig det vide. I mellemtiden eliminerer vi dette problem ved at tilføje følgende linje under linjen uri_unescape

$ loc_hash {$ id} = ~ s/&#/&/;Nu vil scriptet have filpaths fri for mærkelige tegn, og funktionen til fjernelse af link vil være i stand til at finde filer på deres rigtige placeringer for at slette dem. Det vil det gøre, hvis du bruger Mac OSX (og formodentlig også de fleste andre Unix-baserede operativsystemer). Læs videre for at gøre scriptet kompatibelt på andre operativsystemer (nemlig Windows).

Trin 9: Tilføjelse af scriptkompatibilitet til Windows

Tilføjelse af scriptkompatibilitet til Windows
Tilføjelse af scriptkompatibilitet til Windows

Scriptet, som det er skrevet hidtil, fjerner effektivt spor på Unix-baserede operativsystemer. For at få det til at fungere på Windows, er det nødvendigt med en mindre tilføjelse. I modsætning til Mac og andre Unix-baserede operativsystemer understøtter Windows ikke konceptet med en enkelt rodmappe. Derfor starter alle stiavne med et volumen (C: eller E: eller et andet bogstav, du kan tænke på, for den sags skyld) i modsætning til rodmappen (/). Heldigvis for os har Perl en særlig variabel, $O (det er en hovedstad o, ikke et nul), der fortæller os hvilket operativsystem vi i øjeblikket bruger. Så hvis værdien, der er gemt i den variabel indeholder "Win", vil vi fjerne det førende skråstreg på vores XML -placeringsfilbane. Dette kan gøres med følgende kodelinje (tilføjet efter at vi med succes har analyseret placeringen af et spor fra XML -filen):

$ loc_hash {$ id} = substr ($ loc_hash {$ id}, 1) hvis $^O = ~ /Win /i;Nu fungerer scriptet, uanset om det køres på OS X eller Windows.

Trin 10: Det færdige script

Det færdige script
Det færdige script

Vedhæftet er min version af det færdige iTunes autodeletion script, til dem af jer der bare ville have slutproduktet og ikke forklaringen på hvordan det fungerer.

Hvis du vil bruge scriptet, vil du gerne gemme filen som en perl -fil (.pl -udvidelse) og derefter gøre den eksekverbar (chmod 751 i Unix, ikke sikker på, hvad den er til Windows -systemer).

Anbefalede: