Innholdsfortegnelse:

Slett de uønskede iTunes -sangene fra datamaskinen: 10 trinn
Slett de uønskede iTunes -sangene fra datamaskinen: 10 trinn

Video: Slett de uønskede iTunes -sangene fra datamaskinen: 10 trinn

Video: Slett de uønskede iTunes -sangene fra datamaskinen: 10 trinn
Video: Возведение перегородок санузла из блоков. Все этапы. #4 2024, Juli
Anonim
Slett de uønskede iTunes -sangene fra datamaskinen
Slett de uønskede iTunes -sangene fra datamaskinen

Hei mine damer og herrer, dette er min første koding som kan instrueres, så vær så snill, når du kommenterer, la våpnene være hjemme (kniver er imidlertid akseptable). Med bruk av mp3 -spillere har det blitt mulig for folk å bære mengder uten sidestykke av musikk rundt med dem i lommene. Det er ikke uvanlig å høre om folk som har samlinger på 5, 10, til og med 15 tusen sanger (og noen mennesker, enda flere). Av mp3 -spillerne er ingen mer populære enn Apples iPod og programvaren som driver den, iTunes. Med så store musikkbiblioteker kan det imidlertid bli litt kjedelig å bli kvitt sangene som rett og slett ikke høres bra ut eller appellerer til deg lenger. Det kan ta evigheter å gå spor for spor gjennom musikksamlingen din i iTunes og bli kvitt sangene du ikke liker. Det er her dette kan komme inn. I denne instruktøren vil jeg vise deg en måte å bli kvitt sanger automatisk. som ganske enkelt er helt forferdelige, med litt hjelp fra min gode venn, Perl. En god grunnleggende kunnskap om Perl er ekstremt nyttig når du prøver å gjenta dette instruerbare, men ikke nødvendig (du kan absolutt bare ta det ferdige kodeproduktet og kopiere/lime inn det vil fungere helt fint). For de som er interessert i Perl, anbefaler jeg på det sterkeste boken "Learning Perl" fra O'Reilly, det er god lesning og en av de best skrevne bøkene om Perl jeg har hatt sjansen til å lese. VIKTIG: Selv om metodene som presenteres her vil fungere Hvis det gjøres riktig, kan jeg ikke og vil ikke ta noe ansvar hvis du gjør noe dumt og sletter dine dyrebare sanger. Vurder sterkt å ta sikkerhetskopi av musikkfilene dine før du prøver å skrive eller utføre et script som det følgende. Bare feil på siden av forsiktighet, slik at vi ikke får noen følelser skadet hvis du ikke gjør det, takk. Les advarselen? (Ja, selv du, person som ikke leste advarselen) Flott! La oss komme i gang:-) Oppdatering: Det ser ut til at noen perl-scriptere har jobbet hardt med å skrive opp iTunes-skript. For en rekke iTunes-relaterte skript, sjekk ut Teridons skript.

Trinn 1: Komme i gang

Starter
Starter

Som med alle ting, er det en liten forberedelse som må gjøres før vi kan kjøre dette skriptet. Så ting du trenger for å automatisk slette sanger fra iTunes: 1) En datamaskin (duh) 2) iTunes (dobbel duh) 3) Perl (vanskelig å kjøre et Perl -skript uten Perl, vil du ikke si?) 4) Din favorittredaktør (jeg er en forkjemper for vi og vim selv, men enhver tekstredigerer burde gjøre susen) 5) En iPod (ikke obligatorisk, men hyggelig å ha av grunner som vil bli gjort klart snart nok) Få Perl: Følg instruksjonene her, bør være enkle nok: https://www.perl.com/download.cspNår du har lastet ned Perl, installert og klar til å gå, vil vi ha litt bakgrunnsinformasjon om hva det er vi gjør. Det skal bemerkes at skriptet opprinnelig ble utviklet for Mac OS X, selv om de samme metodene skulle fungere på ikke-Unix-baserte operativsystemer som Windows. Tid for den kjedelige, lærerike delen av Instructable.

Trinn 2: Den grunnleggende skriptidéen

iTunes inkluderer et 5-stjerners rating system som lar brukerne vurdere sanger. Sanger med en 5-stjerners vurdering anses å være de beste sangene, mens sanger med en 1-stjerners vurdering antas å være noen av de verste sangene. For våre formål vil vi anta at en sang som mangler karakter (aka 0 stjerner) er en som brukeren ikke har hatt sjanse til å vurdere ennå. Personlig, når jeg vurderer sanger, hvis en sang har en 1-stjerners vurdering, synes det er sannsynligvis ille nok til at det ikke fortjener den dyrebare harddiskplassen som sangen tar opp. Derfor vil Perl-skriptet jeg vil presentere for deg i denne instruksjonsboken analysere gjennom iTunes-biblioteket og slette spor som har blitt tildelt en 1-stjerners rangering. Som en ekstra bonus kan sangene vurderes mens brukeren er på farten bruker en iPod. På denne måten kan du velge sanger som skal slettes mens du er på farten ved å rangere dem, og de blir automatisk slettet når du synkroniserer iPod til datamaskinen senere (hvis du automatisk synkroniserer iPod til datamaskinen). Nå vet vi hva vi gjør, la oss se hvordan vi skal hente sanginformasjon fra iTunes for Perl Script.

Trinn 3: XML -biblioteket: ITunes 'Goto Guy

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

For å slette en sang fra datamaskinen basert på dens vurdering, krever vi 2 opplysninger: sangens vurdering og plasseringen av sangen. Heldigvis for oss er det en praktisk fil som vi kan få all informasjonen vi noen gang ønsket om iTunes fra: XML -filen til iTunes Music Library. XML -filen kalles "iTunes Music Library.xml" og skal være plassert i musikkatalogen på harddisken.

Om XML -filen: iTunes xml -filen er en slags database som vedlikeholdes av iTunes og alltid holdes oppdatert. Når det gjøres en endring i iTunes, blir den tilsvarende delen av iTunes XML -filen endret for å merke denne endringen. En prøveoppføring fra min iTunes XML-fil er gitt nedenfor: 1218 Spor ID1218 NavnTake On MeArtistA-HaGenre80'sKindMPEG lydfilSize3682382Total Time230138Date Modified2007-09-24T02: 11: 30ZDate Added2008-05-28T05: 00: 24ZBit100Play8 Date08Perio8Perio8Perio8Perio8Perio8Perio8Perio8Perio128 25T01: 26: 58ZRating40Album Rating40Album Rating ComputedPersistent ID9AC5DB9713240B44Track TypeFileLocationfile: //localhost/Volumes/HD1/iTunes%20Music/A-Ha/Unknown%20Album/Take%20On%20Me.mp3 XML-filen består av verdier omgitt av tagger i HTML-stil. I forbindelse med manuset vil vi være interessert i spor -ID, navn, artist, vurdering og plassering av informasjon. Hvis du ser på XML -filen, kan du legge merke til ovenfra at denne sangen har en "rating" på 40. iTunes tilordner hver sang et heltall, som strekker seg fra 0 til 100, med hvert 20. punkt som en ekstra stjerne for vurderingen. Så, en vurdering på 20 tilsvarer en 1-stjerners vurdering, en vurdering på 40 er en 2-stjerners vurdering, og så videre, med 100 som en 5-stjerners vurdering. Så nå som vi vet om XML -filen, la oss starte skripting

Trinn 4: Din venn hasjen (selv om du ikke er i Amsterdam)

Din venn hasjen (selv om du ikke er i Amsterdam)
Din venn hasjen (selv om du ikke er i Amsterdam)

Før vi kan eliminere filer, trenger vi en fungerende database som relaterer all sanginformasjon sammen. Selv om mer sofistikerte datastrukturer, for eksempel en rekke hasher eller hash -hasher, kan brukes, er dette skriptet enkelt nok til å fortjene bruk av en enkel liste med hashes. For de uinnvidde er en hash ikke annet enn en matrise som er indeksert av strenger, eller en blandet masse nøkkel/verdi -par. Man kan tenke på en hash som en stor tønne med ting (verdiene) i, og alt i det metaforiske fatet har en tag (nøklene) festet. Du kan trekke ut alle elementene i fatet ved å finne etiketten. For mer informasjon om hashes, kan følgende lenke være nyttig: https://www.tutorialspoint.com/perl/perl_hashes.htmVi kan bruke informasjonen om at hver sang i iTunes XML -filen er tildelt en unik spor -ID for å holde styr på sangene. På grunn av dette er trackID en ideell nøkkel for hasjene. Derfor kan vi sette opp 4 hashes for sangtittel, artist, rangering og plassering. Når disse er etablert, kan vi skanne gjennom filen og fylle hash -databasen vår ved hjelp av noen enkle regulære uttrykk, som vil bli vist neste.

Trinn 5: En (veldig) kort leksjon om vanlige uttrykk

For å få tak i hash -oppføringene våre fra XML -filen og for å spare litt tid på å søke, vil vi få hjelp av en av Perls kraftigere funksjoner: det vanlige uttrykket. Jeg vil gjøre en veldig kort leksjon om vanlige uttrykk, men for de av dere som ønsker mer detaljerte forklaringer, er det mange gode opplæringsprogrammer for vanlige uttrykk online. Sjekk ut https://perldoc.perl.org/perlretut.html for en god opplæring i regulært uttrykk. Kort sagt gir regulære uttrykk oss et sett med verktøy for å gå gjennom strenger, erstatte en streng med en annen streng eller lagre deler av en streng for senere bruk. Regelmessige uttrykk gir 2 funksjoner, matchende (m //) og erstatning (er //) operatører, som skal brukes til dette prosjektet. For å bruke en av disse funksjonene i en oppgavekontekst, vil vi bruke Perls bindingsoperator (= ~), som brukes til å binde et mønster til en valgfri strengvariabel. Eksempler:

$ comment = ~ /Purduecer /; #returns true if $ comment string inneholder setningen "Purduecer" s/[a-z]/[A-Z]/; #t ta alle små bokstaver i streng og bruk dem som store i $ _ strengEn annen nyttig egenskap ved regulære uttrykk er minnevariabler. I vanlige uttrykk kan du plassere visse elementer i parentes, og deretter bruke de spesielle mønstermatchvariablene $ 1, $ 2, etc. for å få tilgang til delene av strengene som matchet disse delene senere.

/(Instructables) Robot/; #Match enhver linje med uttrykket "Instructables Robot" $ nettsted = $ 1; #Lagre resultatet av vellykket mønstermatch som finnes i første sett med parens #(i dette tilfellet inneholder variabelen $ 1 "Instructables")Til slutt, i vanlige uttrykk, er det visse tegn som tjener et spesielt formål. Dette er backslash -rømninger (som alle burde se kjent ut for C -programmerere), karakterklasser og metategn. For eksempel, for å matche en enkelt bokstav som har en fane på hver side, kan vi si

/\ t [a-zA-Z] t/Disse firkantede parentesene brukes i vanlige uttrykk for å definere en tegnklasse. Anta imidlertid at vi ønsket å finne tekst omsluttet av firkantede parenteser på linjen. Vi kunne ikke bare skrive det som det er, som vist nedenfor

/

/

Trinn 6: Bruke vanlige uttrykk til ITunes -skriptet

Bruke vanlige uttrykk til ITunes -skriptet
Bruke vanlige uttrykk til ITunes -skriptet

Nå som vi forhåpentligvis har litt innsikt i de grunnleggende underliggende konseptene som driver regulære uttrykk, er det på tide å bruke disse på iTunes -skriptet. Når du leser xml -kode, oppstår visse tegn, for eksempel skråstrek, ganske ofte. Derfor vil vi dra fordel av det faktum at operatøren m // lar deg velge hvilken avgrensning du vil ha i koden (vi bruker firkantede parenteser, selv om andre skilletegn sikkert vil fungere) Først trenger vi bare å lese en del av hele XML -filen til iTunes. Deler av filen som inneholder informasjon som spillelister, etc. er ikke nødvendig. Den første linjen i spillelisteseksjonen, som kommer etter sanginformasjonen, ser slik ut: Spillelister Derfor kan vi i et stykke løkke legge til et utsagn som hopper til slutten av fillesingen hvis den linjen oppstår.

mens () {#loop_instructions_here varer if ($ _ = ~ m [Spillelister])}For å bygge hash-ID-ene kan vi deretter bruke et if-elsif-tre for å bygge databaseabaserte hash-variabler ved å bruke minnematchvariablene vi lærte om i forrige trinn for å lagre verdier i hasjene

hvis ($ _ = ~ m [(d+)]) {$ id = $ 1; } elsif ($ _ = ~ m [Vurdering (d+)]) {$ rate_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Navn (.+)]) {$ name_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Artist (.+)]) {$ art_hash {$ id} = $ 1; } elsif ($ _ = ~ m [Locationfile: // localhost (.*)]) {$ loc_hash {$ id} = $ 1; }Nå som vi har konstruert grunnlaget for vår hash-database, vil vi dekke lokalisering og fjerning av 1-stjerners filer, så videre til neste trinn!

Trinn 7: Finne og slette disse 1-stjerners sporene

Finne og slette disse 1-stjerners sporene
Finne og slette disse 1-stjerners sporene

Nå som vi har konfigurert vår database, er det på tide å jakte på 1-stjerners sporene, slik at vi kan slette dem. Perl gir en nyttig looping -konstruksjon kalt en foreach -loop som kan brukes til å iterere over alle nøklene til hashene våre. Det bør bemerkes at ikke alle spor i iTunes -biblioteket ditt vil ha en oppføring i rangeringshashen. Dette er fordi sanger som ikke har en rangering ikke får en sporvurderingslinje i iTunes XML -filen. Derfor, når vi går gjennom hasjene, vil vi bruke følgende konstruksjon:

foreach $ id (sorteringsnøkler %rate_hash) { #… sett inn looping -kode her}Etter det er det så enkelt som å bruke følgende setning

koble fra $ loc_hash {$ id} hvis $ rate_hash {$ id} == 20;Oppkoblingsfunksjonen som brukes i eksempelkoden ovenfor er Perls måte å slette filer. Du kan bli fristet til å bruke et systemanrop til operativsystemets slettefunksjon, men av portabilitetshensyn bruker ikke koden jeg har skrevet systemanropet. Vi har nå den grunnleggende strukturen for koden vår. I de følgende trinnene vil vi gjøre noen forbedringer av koden, slik at du kan ha et funksjonelt manus for å bli kvitt de irriterende 1-stjernene.

Trinn 8: URI rømmer og hvordan du kommer deg rundt

Hvis du prøver å kjøre skriptet som det er, vil du støte på mange feil fra operativsystemet, og hvis du ser på filbanene du prøver å slette, kan du finne uvanlige tegn innebygd i banene. Det er en ganske god sjanse for at disse banene inneholder URI -fluktkarakterer. Hva er URI -rømninger? I HTML og XML er URI -flukttegn (aka URI -rømming) spesielle metategn som brukes til å søke etter bokstavelige forekomster av det tegnet. For eksempel vil du aldri se et enkelt mellomrom i en XML -tegnstreng. Du vil imidlertid se XML -representasjonen for et enkelt mellomrom, %20. (Sikkert du har sett disse i URL-linjen i nettleseren din og lurt på hva de var. Vel, nå vet du) En URI-flukt består av et % -tegn etterfulgt av en tosifret heksadesimal kode som representerer karakterens ASCII-verdi. poeng, du kan skrive en hel haug med erstatningssetninger på plasseringshashen for å erstatte alle mulige metakarakterene du støter på (dvs. $ loc_hash {$ id} = ~ s/%20//; og så videre). Heldigvis gir Perl imidlertid en bedre måte å ta seg av disse tingene på. Perl leveres med en modul som heter URI:: Escape, som har en innebygd funksjon, uri_unescape, som vil gjøre jobben med å eliminere URI-rømming for oss. For å bruke modulen, legg til følgende linje øverst i koden:

bruk URI:: Escape;Etter at vi har tilordnet $ loc_hash {$ id} -matrisen i XML -filsløyfen, kan vi legge til følgende linje etterpå

uri_unescape ($ loc_hash {$ id});Linjen ovenfor eliminerer automatisk alle URI -flukttegn. Som en ekstra bonus oversetter den også noen internasjonale karakterer. Jeg kjørte skriptet med noen få filbaner som hadde japansk konji i, og uri_unescape -funksjonen oversatte XML -formatene til disse tegnene til deres originale tegn, slik at koblingen kunne slette filen. Før vi går videre, må vi ta et ekstra trinn. Av grunner som jeg ikke helt forstår, koder iTunes for ampersand (&) -symbolet som & i strengene. Hvis noen vet hvorfor dette er, vennligst gi meg beskjed. I mellomtiden eliminerer vi dette problemet ved å legge til følgende linje under uri_unescape -linjen

$ loc_hash {$ id} = ~ s/&#/&/;Nå vil skriptet ha filbaner fri for merkelige tegn, og funksjonen for å fjerne koblingen vil kunne finne filer på de riktige stedene for å slette dem. Vel, det vil det hvis du bruker Mac OSX (og antagelig de fleste andre Unix-baserte operativsystemer også). Les videre for å gjøre skriptet kompatibelt på andre operativsystemer (nemlig Windows).

Trinn 9: Legge til scriptkompatibilitet til Windows

Legge til scriptkompatibilitet til Windows
Legge til scriptkompatibilitet til Windows

Skriptet, slik det er skrevet så langt, fjerner effektivt spor på Unix-baserte operativsystemer. For å få det til å fungere på Windows, er det nødvendig med et mindre tillegg. I motsetning til Mac og andre Unix-baserte operativsystemer støtter Windows ikke konseptet med en enkelt rotkatalog. Derfor starter alle banenavn med et volum (C: eller E: eller en annen bokstav du kan tenke deg, for den saks skyld) i motsetning til rotkatalogen (/). Heldigvis for oss har Perl en spesiell variabel, $O (det er en stor bokstav o, ikke et null), som forteller oss hvilket operativsystem vi bruker for øyeblikket. Så hvis verdien som er lagret i den variabelen inneholder "Vinn", vil vi fjerne den ledende skråstrek på XML -plasseringsfilbanen. Dette kan gjøres med følgende kodelinje (lagt til etter at vi har analysert plasseringen av et spor fra XML -filen):

$ loc_hash {$ id} = substr ($ loc_hash {$ id}, 1) hvis $^O = ~ /Win /i;Nå fungerer skriptet enten det kjøres på OS X eller Windows.

Trinn 10: Det fullførte skriptet

Det fullførte skriptet
Det fullførte skriptet

Vedlagt er min versjon av det ferdige iTunes autodeletion -skriptet, for de av dere som bare ville ha sluttproduktet og ikke forklaringen på hvordan det fungerer.

For å bruke skriptet vil du lagre filen som en perl -fil (.pl -forlengelse) og deretter gjøre den kjørbar (chmod 751 i Unix, ikke sikker på hva den er for Windows -systemer).

Anbefalt: