Inhoudsopgave:

Verwijder die ongewenste iTunes-nummers van uw computer: 10 stappen
Verwijder die ongewenste iTunes-nummers van uw computer: 10 stappen

Video: Verwijder die ongewenste iTunes-nummers van uw computer: 10 stappen

Video: Verwijder die ongewenste iTunes-nummers van uw computer: 10 stappen
Video: iPhone geblokkeerd? Zo los je dit op! 2024, November
Anonim
Verwijder die ongewenste iTunes-nummers van uw computer
Verwijder die ongewenste iTunes-nummers van uw computer

Hallo dames en heren, dit is mijn eerste programmeerbare codering, dus laat alsjeblieft je wapens thuis als je commentaar geeft (messen zijn echter acceptabel). Met de komst van mp3-spelers is het voor mensen mogelijk gemaakt om ongekende hoeveelheden te dragen van muziek rond met hen in hun zakken. Het is niet ongewoon om te horen dat mensen verzamelingen hebben van 5, 10, zelfs 15 duizend nummers (en sommige mensen, zelfs meer). Van de mp3-spelers is er geen populairder dan de iPod van Apple en de software die erop draait, iTunes. Met zulke grote muziekbibliotheken kan het echter een beetje vervelend worden om de nummers die gewoon niet goed of aantrekkelijk klinken te verwijderen. jij niet meer. Het kan eeuwen duren om track voor track door je muziekcollectie in iTunes te gaan en de nummers te verwijderen die je niet leuk vindt. Dat is waar deze instructable van pas komt. In deze instructable laat ik je een manier zien om automatisch van nummers af te komen die gewoon verschrikkelijk zijn, met wat hulp van mijn goede vriend, Perl. Een goede basiskennis van Perl is uiterst nuttig bij het herhalen van dit instructable, hoewel niet vereist (je zou zeker gewoon het afgewerkte codeproduct kunnen nemen en kopiëren/plakken het en het zal prima werken). Voor diegenen die geïnteresseerd zijn in Perl, raad ik het boek "Perl leren" van O'Reilly ten zeerste aan, het is een goed boek en een van de best geschreven boeken over Perl die ik heb mogen lezen. BELANGRIJK: hoewel de hier gepresenteerde methoden zullen werken als het correct wordt gedaan, kan en wil ik gewoon geen enkele verantwoordelijkheid aanvaarden als je iets doms doet en je dierbare nummers verwijdert. Overweeg ten zeerste een back-up van uw muziekbestanden te maken voordat u probeert een script zoals het volgende te schrijven of uit te voeren. Wees voorzichtig, zodat we geen gekwetste gevoelens hebben als je dat niet doet, bedankt. Lees de waarschuwing? (Ja, zelfs jij, persoon die de waarschuwing niet heeft gelezen) Geweldig! Laten we beginnen:-) Update: het lijkt erop dat sommige perl-scripters hard aan het werk zijn geweest met het schrijven van iTunes-scripts. Voor een verscheidenheid aan iTunes-gerelateerde scripts, bekijk Teridon's Scripts.

Stap 1: Aan de slag

Beginnen
Beginnen

Zoals met alle dingen, is er een kleine voorbereiding die moet worden gedaan voordat we dit script kunnen uitvoeren. Dus dingen die je nodig hebt om automatisch nummers uit iTunes te verwijderen:1) Een computer (duh)2) iTunes (double duh)3) Perl (moeilijk om een Perl-script uit te voeren zonder Perl, zou je niet zeggen?)4) Je favoriete editor (ik ben zelf een voorstander van vi en vim, maar elke teksteditor zou het moeten doen)5) Een iPod (niet verplicht, maar leuk om te hebben om redenen die snel genoeg duidelijk zullen worden) Perl verkrijgen: volg de instructies hier, zouden eenvoudig genoeg moeten zijn: https://www.perl.com/download.cspAls je Perl eenmaal hebt gedownload, geïnstalleerd en klaar voor gebruik, willen we wat achtergrondinformatie over wat we aan het doen zijn. Opgemerkt moet worden dat het script oorspronkelijk is ontwikkeld voor Mac OS X, hoewel dezelfde methoden zouden moeten werken op niet-Unix-gebaseerde besturingssystemen zoals Windows. Tijd voor het saaie, eh, "educatieve" deel van de Instructable.

Stap 2: Het basisscriptidee

iTunes bevat een 5-sterrenbeoordelingssysteem waarmee gebruikers nummers kunnen beoordelen. Nummers met een beoordeling van 5 sterren worden beschouwd als de beste nummers, terwijl nummers met een beoordeling van 1 ster als enkele van de slechtste nummers worden beschouwd. Voor onze doeleinden gaan we ervan uit dat elk nummer dat geen beoordeling heeft (ook wel 0 sterren genoemd) er een is die de gebruiker nog niet heeft kunnen beoordelen. vind het waarschijnlijk al erg genoeg dat het de kostbare ruimte op de harde schijf die het nummer in beslag neemt niet verdient. Daarom zal het Perl-script dat ik u in deze Instructable zal presenteren, door de iTunes-bibliotheek bladeren en elk nummer verwijderen dat een beoordeling van 1 ster heeft gekregen. Als een toegevoegde bonus kunnen de nummers worden beoordeeld terwijl de gebruiker onderweg is met behulp van een iPod. Op deze manier kunt u nummers selecteren om onderweg te verwijderen door ze simpelweg te beoordelen, en ze worden automatisch verwijderd wanneer u uw iPod later met uw computer synchroniseert (als u uw iPod automatisch met uw computer synchroniseert). Nu we weten wat waarmee we bezig zijn, laten we eens kijken hoe we informatie over nummers uit iTunes gaan halen voor het Perl-script.

Stap 3: De XML-bibliotheek: Goto Guy van iTunes

De XML-bibliotheek: Goto Guy van iTunes
De XML-bibliotheek: Goto Guy van iTunes

Om een nummer van de computer te verwijderen op basis van de classificatie, hebben we twee gegevens nodig: de classificatie van het nummer en de locatie van het nummer. Gelukkig voor ons is er een handig bestand waaruit we alle informatie kunnen halen die we ooit over iTunes wilden hebben: het iTunes Music Library XML-bestand. Het XML-bestand heet "iTunes Music Library.xml" en zou zich in uw muziekmap op uw harde schijf moeten bevinden.

Over het XML-bestand: Het iTunes XML-bestand is een soort database die door iTunes wordt onderhouden en altijd up-to-date wordt gehouden. Wanneer een wijziging wordt aangebracht in iTunes, wordt het overeenkomstige gedeelte van het iTunes XML-bestand gewijzigd om deze wijziging te noteren. Hieronder vindt u een voorbeelditem van mijn iTunes XML-bestand: 1218Track ID1218NameTake On MeArtiestA-HaGenre80'sKindMPEG-audiobestandSize3682382Totale tijd230138Datum gewijzigd2007-09-24T02:11:30ZDatum toegevoegd2008-05-28T05:00:24ZBit Rate128Sample Rate-4432100TCPlay Count18Play Date 25T01:26:58ZRating40Album Rating40Album Rating ComputedPersistent ID9AC5DB9713240B44Track TypeFileLocationfile://localhost/Volumes/HD1/iTunes%20Music/A-Ha/Unknown%20Album/Take%20On%20Me.mp3File Folder Count4Zoals kan worden gezien van Count1 hierboven, kan worden gezien in Count1 het XML-bestand bestaat uit waarden omgeven door tags in HTML-stijl. Voor de doeleinden van het script zijn we geïnteresseerd in de informatie over de track-ID, naam, artiest, beoordeling en locatie. Als je naar het XML-bestand kijkt, kun je van bovenaf zien dat dit nummer een "rating" van 40 heeft. iTunes kent elk nummer een geheel getal toe, variërend van 0 tot 100, waarbij elke 20 punten een extra ster is voor de beoordeling. Een beoordeling van 20 komt dus overeen met een beoordeling van 1 ster, een beoordeling van 40 is een beoordeling van 2 sterren, enzovoort, waarbij 100 een beoordeling van 5 sterren is. Dus nu we weten over het XML-bestand, laten we beginnen met scripten

Stap 4: Je vriend de hasj (zelfs als je niet in Amsterdam bent)

Je vriend de hasj (zelfs als je niet in Amsterdam bent)
Je vriend de hasj (zelfs als je niet in Amsterdam bent)

Voordat we bestanden kunnen verwijderen, hebben we een werkende database nodig die alle informatie over het nummer aan elkaar relateert. Hoewel meer geavanceerde datastructuren, zoals een array van hashes of hash van hashes, kunnen worden gebruikt, is dit script eenvoudig genoeg om het gebruik van een eenvoudige lijst met hashes te verdienen. Voor niet-ingewijden is een hash niets meer dan een array die wordt geïndexeerd door strings, of een warboel van sleutel/waarde-paren. Je kunt een hasj zien als een groot vat met spullen (de waarden) erin, en aan alles in het metaforische vat is een label (de sleutels) bevestigd. Je kunt elk item in het vat eruit trekken door simpelweg het label te vinden. Voor meer informatie over hashes kan de volgende link nuttig zijn: https://www.tutorialspoint.com/perl/perl_hashes.htm We kunnen de informatie gebruiken dat elk nummer in het iTunes XML-bestand een unieke track-ID heeft gekregen om bij te houden de liedjes. Hierdoor is de trackID een ideale sleutel voor de hashes. Daarom kunnen we 4 hashes instellen voor de titel van het nummer, de artiest, de beoordeling en de locatie. Zodra deze zijn vastgesteld, kunnen we door het bestand bladeren en onze hash-database vullen met behulp van enkele eenvoudige reguliere expressies, die hierna worden getoond.

Stap 5: Een (zeer) korte les over reguliere expressies

Om onze hash-items uit het XML-bestand te halen en ook wat tijd te besparen bij het zoeken, willen we de hulp inroepen van een van Perl's krachtigere functies: de reguliere expressie. Ik zal een heel korte les geven over reguliere expressies, maar voor degenen onder jullie die meer gedetailleerde uitleg willen, zijn er veel goede tutorials voor reguliere expressies online. Kijk op https://perldoc.perl.org/perlretut.html voor een goede tutorial over reguliere expressies. Kortom, reguliere expressies bieden ons een set hulpmiddelen om door strings te gaan, de ene string te vervangen door een andere string, of delen van een string voor later gebruik. Reguliere expressies bieden 2 functies, de overeenkomende (m//) en vervangende (s//) operators, die voor dit project zullen worden gebruikt. Om een van deze functies in een toewijzingscontext te gebruiken, gebruiken we Perl's bindingsoperator (=~), die wordt gebruikt om een patroon te binden aan een stringvariabele naar keuze. Voorbeelden:

$commentaar =~ /Purduecer/; #retourneert true als $comment string de zin "Purduecer"s/[a-z]/[A-Z]/ bevat; #neem alle kleine letters in string en gebruik ze als hoofdletter in $_ stringEen tweede handige eigenschap van reguliere expressies is die van geheugenvariabelen. In reguliere expressies kunt u bepaalde items tussen haakjes plaatsen en vervolgens de speciale geheugenvariabelen $1, $2, enz. gebruiken om later toegang te krijgen tot de delen van de strings die met deze delen overeenkwamen. Voorbeelden

/(Instructables) Robot/; #Overeenkomen met een regel met de zin "Instructables Robot"$website = $1; #Sla het resultaat van een succesvolle patroonovereenkomst op in de eerste set haakjes #(in dit geval bevat variabele $1 "Instructables")Ten slotte zijn er in reguliere expressies bepaalde tekens die een speciaal doel dienen. Dit zijn backslash-escapes (die allemaal bekend moeten voorkomen bij C-programmeurs), tekenklassen en metatekens. Als we bijvoorbeeld een enkele letter willen matchen die aan weerszijden een tab heeft, kunnen we zeggen:

/\t[a-zA-Z]\t/Die vierkante haken worden in reguliere expressies gebruikt om een tekenklasse te definiëren. Stel echter dat we tekst tussen vierkante haken in de regel willen vinden. We kunnen het niet gewoon schrijven zoals het is, zoals hieronder wordt weergegeven:

/

/

Stap 6: Reguliere expressies toepassen op het ITunes-script

Reguliere expressies toepassen op het iTunes-script
Reguliere expressies toepassen op het iTunes-script

Nu we hopelijk een idee hebben van de basisconcepten die aan de basis liggen van reguliere expressies, is het tijd om deze toe te passen op het iTunes-script. Bij het lezen van XML-code komen bepaalde tekens, zoals de schuine streep, vrij vaak voor. Daarom zullen we profiteren van het feit dat u met de operator m// de begrenzers kunt kiezen die u in de code wilt gebruiken (we zullen vierkante haken gebruiken, hoewel andere scheidingstekens zeker zullen werken). het volledige iTunes XML-bestand. Delen van het bestand met informatie zoals afspeellijsten, enz. zijn niet nodig. De eerste regel van de sectie afspeellijsten, die na de informatie over het nummer komt, ziet er als volgt uit: Afspeellijsten Daarom kunnen we in een while-lus een instructie toevoegen die naar het einde van het lezen van het bestand springt als die regel wordt aangetroffen.

while() { #loop_instructions_here last if($_ =~ m[Playlists])}Om vervolgens de hash-ID's te bouwen, kunnen we een if-elsif-boom gebruiken om onze database-hashes te bouwen, met behulp van de geheugenovereenkomstvariabelen waarover we in de vorige stap hebben geleerd om waarden in de hashes op te slaan

if($_ =~ m[(d+)]) { $id = $1; } elsif($_ =~ m[Beoordeling(d+)]) { $rate_hash{$id} = $1; } elsif($_ =~ m[Naam(.+)]) { $name_hash{$id} = $1; } elsif($_ =~ m[Artiest(.+)]) { $art_hash{$id} = $1; } elsif($_ =~ m[Locatiebestand://localhost(.*)]) { $loc_hash{$id} = $1; }Nu we de basis van onze hash-database hebben opgebouwd, gaan we in op het lokaliseren en verwijderen van 1-Star-bestanden, dus verder naar de volgende stap!

Stap 7: Die 1-stertracks lokaliseren en verwijderen

Lokaliseren en verwijderen van die 1-ster-tracks
Lokaliseren en verwijderen van die 1-ster-tracks

Nu we onze database hebben opgezet, is het tijd om op zoek te gaan naar de 1-ster-tracks, zodat we ze kunnen verwijderen. Perl biedt een handige looping-constructie, een foreach-lus genaamd, die kan worden gebruikt om alle sleutels van onze hashes te herhalen. Opgemerkt moet worden dat niet elk nummer in uw iTunes-bibliotheek een vermelding heeft in de classificatiehash. Dit komt omdat nummers die geen classificatie hebben geen trackclassificatieregel krijgen in het iTunes XML-bestand. Daarom willen we bij het doorlopen van de hashes de volgende constructie gebruiken:

foreach $id (sorteersleutels %rate_hash) { #…voeg hier de luscode in}Daarna is het zo simpel als het gebruik van de volgende verklaring:

ontkoppel $loc_hash{$id} als $rate_hash{$id} == 20;De ontkoppelingsfunctie die in de voorbeeldcode hierboven wordt gebruikt, is Perl's manier om bestanden te verwijderen. Je komt misschien in de verleiding om een systeemaanroep te gebruiken voor de verwijderfunctie van je besturingssysteem, maar om redenen van draagbaarheid gebruikt de code die ik heb geschreven de systeemaanroep niet. We hebben nu de basisstructuur voor onze code. In de volgende stappen zullen we enkele verfijningen in de code aanbrengen, zodat u een volledig functioneel script kunt hebben om van die vervelende 1-sterren af te komen.

Stap 8: URI-ontsnappingen en hoe u ze kunt omzeilen

Als u het script probeert uit te voeren zoals het is, zult u talloze fouten in uw besturingssysteem tegenkomen, en als u kijkt naar de bestandspaden die u probeert te verwijderen, kunt u ongebruikelijke tekens in de paden aantreffen die ongewenst zijn. De kans is vrij groot dat deze paden URI-escape-tekens bevatten. Wat zijn URI-escapes? In HTML en XML zijn URI-escapetekens (ook bekend als URI-escapes) speciale metatekens die worden gebruikt om te zoeken naar letterlijke instanties van dat teken. U zult bijvoorbeeld nooit een eenvoudige witruimte zien in een XML-tekenreeks. U ziet echter de XML-weergave van een eenvoudige witruimte, %20. (Je hebt deze vast wel eens in de URL-balk in je browser gezien en je vroeg je af wat ze waren. Nou, nu weet je het) Een URI-escape bestaat uit een %-teken gevolgd door een 2-cijferige hexadecimale code die de ASCII-waarde van het teken vertegenwoordigt. punt, je zou een hele reeks vervang-instructies op de locatie-hash kunnen schrijven om elk mogelijk metateken dat je tegenkomt te vervangen (dwz $loc_hash{$id} =~ s/%20/ /; enzovoort). Gelukkig biedt Perl een betere manier om voor deze dingen te zorgen. Perl wordt geleverd met een module genaamd URI::Escape, die een ingebouwde functie heeft, uri_unescape, die het werk zal doen om de URI-escapes voor ons te elimineren. Om de module te gebruiken, voegt u eenvoudig de volgende regel toe bovenaan uw code:

gebruik URI::Escape;Nadat we de array $loc_hash{$id} in de XML-bestandslus hebben toegewezen, kunnen we daarna de volgende regel toevoegen

uri_unescape($loc_hash{$id});De bovenstaande regel elimineert automatisch alle URI-escapetekens. Als een toegevoegde bonus vertaalt het ook enkele internationale karakters. Ik heb het script uitgevoerd met een paar bestandspaden met Japanse konji erin, en de functie uri_unescape vertaalde de XML-indelingen van die tekens naar hun originele tekens, zodat ontkoppelen het bestand met succes kon verwijderen. Voordat we verder gaan, moet nog een extra stap worden genomen. Om redenen die ik niet helemaal begrijp, codeert iTunes het ampersand(&)-symbool als & in zijn strings. Als iemand weet waarom dit is, laat het me weten. In de tussentijd elimineren we dit probleem door de volgende regel toe te voegen onder de regel uri_unescape:

$loc_hash{$id} =~ s/&#/&/;Nu heeft het script bestandspaden die vrij zijn van vreemde tekens, en de ontkoppelingsfunctie kan bestanden op hun juiste locaties vinden om ze te verwijderen. Welnu, als je Mac OSX gebruikt (en vermoedelijk ook de meeste andere Unix-gebaseerde besturingssystemen). Lees verder om het script compatibel te maken met andere besturingssystemen (namelijk Windows).

Stap 9: Scriptcompatibiliteit toevoegen aan Windows

Scriptcompatibiliteit toevoegen aan Windows
Scriptcompatibiliteit toevoegen aan Windows

Het script, zoals tot nu toe geschreven, verwijdert effectief sporen op Unix-gebaseerde besturingssystemen. Om het op Windows te laten werken, is een kleine toevoeging nodig. In tegenstelling tot Mac en andere op Unix gebaseerde besturingssystemen, ondersteunt Windows het concept van een enkele hoofdmap niet. Daarom beginnen alle padnamen met een volume (C: of E: of een andere letter die je maar kunt bedenken) in tegenstelling tot de hoofdmap (/). Gelukkig voor ons heeft Perl een speciale variabele, $O (dat is een hoofdletter o, geen nul), die ons vertelt welk besturingssysteem we momenteel gebruiken. Dus als de waarde die in die variabele is opgeslagen "Win" bevat, willen we de slash op ons XML-locatiebestandspad verwijderen. Dit kan met de volgende regel code (toegevoegd nadat we met succes de locatie van een track uit het XML-bestand hebben geparseerd):

$loc_hash{$id} = substr($loc_hash{$id}, 1) als $^O =~ /Win/i;Nu zal het script werken, of het nu op OS X of Windows wordt uitgevoerd.

Stap 10: Het voltooide script

Het voltooide script
Het voltooide script

Bijgevoegd is mijn versie van het voltooide iTunes-script voor automatische verwijdering, voor degenen onder u die alleen het eindproduct wilden en niet de uitleg over hoe het werkt.

Om het script te gebruiken, moet je het bestand opslaan als een perl-bestand (.pl-extensie) en het vervolgens uitvoerbaar maken (chmod 751 in Unix, niet zeker wat het is voor Windows-systemen).

Aanbevolen: