Innehållsförteckning:

Ta bort de oönskade iTunes -låtarna från din dator: 10 steg
Ta bort de oönskade iTunes -låtarna från din dator: 10 steg

Video: Ta bort de oönskade iTunes -låtarna från din dator: 10 steg

Video: Ta bort de oönskade iTunes -låtarna från din dator: 10 steg
Video: Störig granne 2024, November
Anonim
Ta bort de oönskade iTunes -låtarna från din dator
Ta bort de oönskade iTunes -låtarna från din dator

Hej mina damer och herrar, det här är min första kodningsinstruerbara, så snälla, när du kommenterar, lämna dina vapen hemma (knivar är dock acceptabla). Med tillkomsten av mp3 -spelare har det blivit möjligt för människor att bära oöverträffade mängder av musik runt med dem i fickorna. Det är inte ovanligt att höra om människor som har samlingar av 5, 10, till och med 15 tusen låtar (och vissa människor, ännu fler). Av mp3 -spelarna är ingen mer populär än Apples iPod och programvaran som kör den, iTunes. Med så stora musikbibliotek kan det dock bli lite tråkigt att bli av med låtar som helt enkelt inte låter bra eller tilltalande för dig längre. Det kan ta evigheter att gå spår för spår genom din musiksamling i iTunes och bli av med de låtar du inte gillar. Det är där det här instruerbara kommer in. I det här instruerbara kommer jag att visa dig ett sätt att automatiskt bli av med låtar som helt enkelt är hemskt, med lite hjälp från min goda vän, Perl. En god grundläggande kunskap om Perl är oerhört hjälpsam när man försöker upprepa denna instruerbara, men inte nödvändig (du kan verkligen bara ta den färdiga kodprodukten och kopiera/klistra in det och det kommer att fungera bra). För dem som är intresserade av Perl rekommenderar jag starkt boken "Learning Perl" från O'Reilly, det är bra läsning och en av de bäst skrivna böckerna om Perl jag har haft chansen att läsa. VIKTIGT: Även om metoderna som presenteras här kommer att fungera om det görs korrekt kan jag inte och helt enkelt inte ta något ansvar om du gör något dumt och tar bort dina dyrbara låtar. Tänk starkt på att säkerhetskopiera dina musikfiler innan du försöker skriva eller köra ett skript som följande. Bara fel på sidan av försiktighet så att vi inte har några känslor skadade om du inte gör det, tack. Läs varningen? (Ja, även du, person som inte läste varningen) Bra! Låt oss komma igång:-) Uppdatering: Det verkar som om vissa perl-scripters har jobbat hårt med att skriva upp iTunes-skript. För en mängd olika iTunes-relaterade skript, kolla in Teridons skript.

Steg 1: Komma igång

Komma igång
Komma igång

Som med alla andra saker är det en liten förberedelse som måste göras innan vi kan köra detta skript. Så saker du behöver för att radera låtar automatiskt från iTunes: 1) En dator (duh) 2) iTunes (dubbel duh) 3) Perl (svårt att köra ett Perl -skript utan Perl, skulle du inte säga?) 4) Din favoritredaktör (jag är en förespråkare för vi och vim själv, men alla textredigerare borde göra susen) 5) En iPod (inte obligatorisk, men trevlig att ha av skäl som kommer att klargöras snart nog) Få Perl: Följ instruktionerna här, ska vara tillräckligt enkla: https://www.perl.com/download.cspNär du har laddat ner, installerat och redo att starta Perl vill vi ha lite bakgrundsinformation om vad vi gör. Det bör noteras att manuset ursprungligen utvecklades för Mac OS X, även om samma metoder borde fungera på icke-Unix-baserade operativsystem som Windows. Dags för den tråkiga, "pedagogiska" delen av Instructable.

Steg 2: Grundläggande skriptidé

iTunes innehåller ett 5-stjärnigt betygssystem för att låta användare betygsätta låtar. Låtar med 5-stjärnigt betyg anses vara de bästa låtarna medan låtar med 1-stjärnigt betyg antas vara några av de sämsta låtarna. För våra ändamål antar vi att varje låt som saknar betyg (aka 0 stjärnor) är en som användaren inte har haft en chans att betygsätta personligen. tycker att det förmodligen är tillräckligt illa för att det inte förtjänar det värdefulla hårddiskutrymme som låten tar upp. Därför kommer Perl-skriptet som jag kommer att presentera för dig i den här instruktionsboken att analysera genom iTunes-biblioteket och radera alla spår som har fått ett 1-stjärnigt betyg. Som en extra bonus kan låtarna rankas medan användaren är på språng använder en iPod. På så sätt kan du välja låtar som ska raderas när du är på språng helt enkelt genom att betygsätta dem, och de raderas automatiskt när du synkroniserar din iPod till din dator senare (om du automatiskt synkroniserar din iPod med din dator). Nu vet vi vad vi gör, låt oss se hur vi ska hämta låtinformation från iTunes för Perl Script.

Steg 3: XML -biblioteket: ITunes 'Goto Guy

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

För att ta bort en låt från datorn baserat på dess betyg, kräver vi 2 delar information: låtens betyg och platsen för låten. Lyckligtvis för oss finns det en praktisk fil som vi kan få all information vi någonsin velat om iTunes från: iTunes Music Library XML -fil. XML -filen kallas "iTunes Music Library.xml" och bör finnas i din musikkatalog på din huvudsakliga hårddisk.

Om XML -filen: iTunes xml -filen är en slags databas som underhålls av iTunes och som alltid hålls uppdaterad. När en ändring görs i iTunes ändras motsvarande del av iTunes XML -filen för att notera denna ändring. Ett exempel från min iTunes-XML-fil ges nedan: 1218 Spår-ID1218 NamnTake On MeArtistA-HaGenre80'sKindMPEG-ljudfilSize3682382Total Time230138Date Modified2007-09-24T02: 11: 30ZDatum Tillagd2008-05-28T05: 00: 24ZBit100 DatumPlay8 Datum8Spel2002 DatumSpela 25T01: 26: 58ZRating40Album Rating40Album Rating ComputedPeristent ID9AC5DB9713240B44Track TypeFileLocationfile: //localhost/Volumes/HD1/iTunes%20Music/A-Ha/Unknown%20Album/Take%20On%20Me1Fil XML-filen består av värden som omges av taggar i HTML-stil. I skriptets syfte kommer vi att vara intresserade av spår -ID, namn, artist, betyg och platsbitar. Om du tittar på XML -filen kan du märka ovanifrån att den här låten har ett "betyg" på 40. iTunes tilldelar varje låt ett heltal, från 0 till 100, var 20: e poäng är en extra stjärna för betyget. Så betyget 20 motsvarar ett betyg på 1 stjärna, betyget 40 är ett 2-stjärnigt betyg och så vidare, varav 100 är ett 5-stjärnigt betyg. Så nu när vi vet om XML -filen, låt oss börja skripta

Steg 4: Din vän hash (även om du inte är i Amsterdam)

Din vän hash (även om du inte är i Amsterdam)
Din vän hash (även om du inte är i Amsterdam)

Innan vi kan eliminera filer behöver vi en fungerande databas som relaterar all låtinformation tillsammans. Även om mer sofistikerade datastrukturer, till exempel en rad hashningar eller hash -hashningar, kan användas, är detta skript tillräckligt enkelt för att förtjäna användningen av en enkel lista med hash. För de oinitierade är en hash ingenting annat än en array som indexeras av strängar, eller en blandad massa nyckel-/värdepar. Man kan tänka sig en hash som en stor fat med saker (värdena) i, och allt i det metaforiska fatet har en tagg (nycklarna) bifogade. Du kan dra ut alla föremål i fatet helt enkelt genom att hitta dess tagg. För mer information om hash, kan följande länk vara användbar: https://www.tutorialspoint.com/perl/perl_hashes.htmVi kan använda informationen som varje låt i iTunes XML -filen har ett unikt spår -ID för att hålla reda på sångerna. På grund av detta gör trackID en idealisk nyckel för hashningarna. Därför kan vi ställa in 4 hashningar för sångtitel, artist, betyg och plats. När dessa har fastställts kan vi skanna igenom filen och fylla vår hash -databas med några enkla reguljära uttryck, som kommer att visas härnäst.

Steg 5: En (mycket) kort lektion om reguljära uttryck

För att få tag på våra hashposter från XML -filen och också spara lite tid på att söka, kommer vi att vilja ta hjälp av en av Perls kraftfullare funktioner: det reguljära uttrycket. Jag kommer att göra en mycket kort lektion om reguljära uttryck, men för er som vill ha mer detaljerade förklaringar finns det många bra instruktioner för reguljära uttryck online. Kolla in https://perldoc.perl.org/perlretut.html för en bra tutorial för reguljära uttryck. Kort sagt, reguljära uttryck ger oss en uppsättning verktyg för att gå igenom strängar, ersätta en sträng med en annan sträng eller spara delar av en sträng för senare användning. Regelbundna uttryck tillhandahåller två funktioner, matchande (m //) och ersättnings (s //) operatörer, som kommer att användas för detta projekt. För att använda någon av dessa funktioner i ett uppdragskontext använder vi Perls bindningsoperator (= ~), som används för att binda ett mönster till en valfri strängvariabel.

$ kommentar = ~ /Purduecer /; #returns true om $ comment string innehåller frasen "Purduecer" s/[a-z]/[A-Z]/; #ta alla små bokstäver i sträng och versera dem i $ _ strängEn andra användbar egenskap hos reguljära uttryck är minnesvariabler. I reguljära uttryck kan du placera vissa objekt inom parentes och sedan använda de speciella mönstermatchningsminnesvariablerna $ 1, $ 2, etc. för att komma åt delarna av strängarna som matchade dessa delar senare.

/(Instructables) Robot/; #Matcha alla rader med frasen "Instructables Robot" $ webbplats = $ 1; #Spara resultatet av en lyckad mönstermatchning i den första uppsättningen parens #(i det här fallet innehåller variabel $ 1 "Instructables")Slutligen, i reguljära uttryck, finns det vissa karaktärer som tjänar ett speciellt syfte. Det här är flykt från backslash (som alla borde se bekanta ut för C -programmerare), teckenklasser och metatecken. Till exempel, för att matcha alla enskilda bokstäver som har en flik på vardera sidan, kan vi säga

/\ t [a-zA-Z] t/Dessa hakparenteser används i reguljära uttryck för att definiera en teckenklass. Anta emellertid att vi ville hitta text innesluten inom hakparenteser på raden. Vi kunde inte helt enkelt skriva det som det är, som visas nedan

/

/

Steg 6: Tillämpa vanliga uttryck på ITunes -skriptet

Tillämpa vanliga uttryck på ITunes -skriptet
Tillämpa vanliga uttryck på ITunes -skriptet

Nu när vi förhoppningsvis har lite kunskap om de grundläggande underliggande begreppen som driver reguljära uttryck, är det dags att tillämpa dessa på iTunes -skriptet. När du läser xml -kod stöter du på vissa tecken, till exempel snedstrecket, ganska ofta. Därför kommer vi att dra nytta av det faktum att operatören m // låter dig välja vilka avgränsare du vill ha i koden (vi kommer att använda hakparenteser, även om andra avgränsare säkert kommer att fungera) Först behöver vi bara läsa en del av hela iTunes XML -filen. Delar av filen som innehåller information som spellistor etc. är inte nödvändiga. Den första raden i spellistavsnittet, som kommer efter låtinformationen, ser ut som följande: Spellistor Därför kan vi i en stundslinga lägga till ett uttalande som hoppar till slutet av filläsningen om den raden påträffas.

medan () {#loop_instructions_here varar om ($ _ = ~ m [spellistor])}För att sedan bygga hash-ID: erna kan vi använda ett if-elsif-träd för att bygga våra databas-hashar, med hjälp av minnesmatchningsvariablerna som vi lärde oss om i föregående steg för att spara värden i hasharna

if ($ _ = ~ m [( d+)]) {$ id = $ 1; } elsif ($ _ = ~ m [Betyg ( d+)]) {$ rate_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Namn (.+)]) {$ name_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Artist (.+)]) {$ art_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Locationfile: // localhost (.*)]) {$ loc_hash {$ id} = $ 1; }Nu när vi har konstruerat grunden för vår hash-databas kommer vi att täcka lokalisering och borttagning av 1-stjärniga filer, så vidare till nästa steg!

Steg 7: Hitta och ta bort dessa 1-stjärniga spår

Hitta och ta bort dessa 1-stjärniga spår
Hitta och ta bort dessa 1-stjärniga spår

Nu när vi har vår databas inrättad är det dags att leta efter de 1-stjärniga spåren, så att vi kan ta bort dem. Perl tillhandahåller en användbar looping -konstruktion som kallas en foreach -loop som kan användas för att iterera över alla nycklar i våra hash -filer. Det bör noteras att inte alla spår i ditt iTunes -bibliotek kommer att ha en post i betygshashen. Detta beror på att låtar som inte har betyg inte ges en spårbetygsrad i iTunes XML -filen. Därför kommer vi att vilja använda följande konstruktion när vi går igenom hascherna:

för varje $ id (sortera nycklar %rate_hash) { #… infoga looping -kod här}Efter det är det lika enkelt som att använda följande uttalande

ta bort länken $ loc_hash {$ id} om $ rate_hash {$ id} == 20;Avlänkningsfunktionen som används i exempelkoden ovan är Perls sätt att ta bort filer. Du kan bli frestad att använda ett systemanrop till ditt operativsystems raderingsfunktion, men av bärbarhetsskäl använder inte koden jag har skrivit systemsamtalet. Vi har nu grundstrukturen för vår kod. I de följande stegen kommer vi att göra några förbättringar av koden så att du kan få ett komplett och funktionellt manus för att bli av med de irriterande 1-stjärnorna.

Steg 8: URI flyr och hur man tar sig runt dem

Om du försöker köra skriptet som det är kommer du att stöta på många fel från ditt operativsystem, och om du tittar på filvägarna du försöker ta bort kan du hitta ovanliga tecken inbäddade i vägarna som är oönskade. Det finns en ganska god chans att dessa vägar innehåller URI -escape -tecken. Vad är URI -rymningar? I HTML och XML är URI -Escape -tecken (aka URI -Escape) speciella metatecken som används för att söka efter bokstavliga instanser av det tecknet. Till exempel kommer du aldrig att se en enkel blankyta i en XML -teckensträng. Du kommer dock att se XML -representationen för en enkel blankyta, %20. (Visst har du sett dessa i URL-fältet i din webbläsare och undrat vad de var. Tja, nu vet du) En URI-escape består av ett % -tecken följt av en tvåsiffrig hexadecimal kod som representerar karaktärens ASCII-värde. punkt, du kan skriva en hel massa ersättningsuttalanden på platshashen för att ersätta alla möjliga metatecken som du stöter på (dvs $ loc_hash {$ id} = ~ s/%20//; och så vidare). Men lyckligtvis ger Perl ett bättre sätt att ta hand om dessa saker. Perl levereras med en modul som heter URI:: Escape, som har en inbyggd funktion, uri_unescape, som kommer att göra jobbet med att eliminera URI-flykten för oss. För att använda modulen, lägg till följande rad högst upp i koden:

använd URI:: Escape;Nu när vi har tilldelat $ loc_hash {$ id} -matrisen i XML -filslingan kan vi lägga till följande rad efteråt

uri_unescape ($ loc_hash {$ id});Ovanstående rad eliminerar automatiskt alla URI -escape -tecken. Som en extra bonus översätter den också några internationella karaktärer. Jag körde skriptet med några filbanor som hade japansk konji i, och uri_unescape -funktionen översatte XML -formaten för dessa tecken till deras ursprungliga tecken så att länken lyckades ta bort filen. Innan vi går vidare måste ytterligare ett steg tas. Av skäl som jag inte helt förstår kodar iTunes symbolen för ampersand (&) som & i strängarna. Om någon vet varför det är så berätta det för mig. Under tiden eliminerar vi detta problem genom att lägga till följande rad under uri_unescape -raden

$ loc_hash {$ id} = ~ s/&#/&/;Nu kommer manuset att ha filbanor rensade för konstiga tecken, och funktionen för att ta bort länken kommer att kunna hitta filer på rätt plats för att ta bort dem. Det kommer det att göra om du använder Mac OSX (och förmodligen de flesta andra Unix-baserade operativsystem också). Läs vidare för att göra skriptet kompatibelt på andra operativsystem (nämligen Windows).

Steg 9: Lägga till skriptkompatibilitet till Windows

Lägga till skriptkompatibilitet till Windows
Lägga till skriptkompatibilitet till Windows

Skriptet, som det har skrivits hittills, tar effektivt bort spår på Unix-baserade operativsystem. För att få det att fungera på Windows behövs ett mindre tillägg. Till skillnad från Mac och andra Unix-baserade operativsystem stöder Windows inte konceptet med en enda rotkatalog. Därför börjar alla sökvägnamn med en volym (C: eller E: eller någon annan bokstav du kan tänka dig för den delen) i motsats till rotkatalogen (/). Tyckligt för oss har Perl en speciell variabel, $O (det är ett stort o, inte en nolla), som berättar vilket operativsystem vi för närvarande använder. Så om värdet som lagras i den variabeln innehåller "Win" kommer vi att vilja ta bort det ledande snedstrecket på vår XML -platsfilväg. Detta kan göras med följande kodrad (läggs till efter att vi har analyserat platsen för ett spår från XML -filen):

$ loc_hash {$ id} = substr ($ loc_hash {$ id}, 1) om $^O = ~ /Win /i;Nu fungerar skriptet oavsett om det körs på OS X eller Windows.

Steg 10: Det slutförda skriptet

Det färdiga skriptet
Det färdiga skriptet

Bifogad är min version av det färdiga iTunes autodeletion -skriptet, för dig som bara ville ha slutprodukten och inte förklaringen om hur det fungerar.

För att använda skriptet vill du spara filen som en perl -fil (.pl -tillägg) och sedan göra den körbar (chmod 751 i Unix, inte säker på vad det är för Windows -system).

Rekommenderad: