Genereer een lijst met geopende Safari-tabbladen met AppleScript

Of je nu een blogger bent die aan een onderzoek werkt of een student die wat onderzoek doet, je hebt waarschijnlijk de behoefte om een ​​lijst met websites te maken op basis van je momenteel geopende Safari-tabbladen. Laten we leren hoe we een AppleScript kunnen schrijven dat dit proces voor ons zal afhandelen.


Een voorbeeld van wat het script moet uitvoeren op basis van de open tabbladen in Safari.

Wat we gaan leren

Het script dat we gaan schrijven is eigenlijk vrij eenvoudig, dus als je net begint met AppleScript, is dit het perfecte project om je tanden in te knippen.

Of u al dan niet een tool nodig heeft die een lijst met Safari-tabbladen maakt, is niet relevant. Het belangrijkste hier is om te leren van hoe we deze taak benaderen.

Het belangrijkste hier is om te leren van hoe we deze taak benaderen.

We gaan een aantal AppleScript-constructies raken die cruciaal zijn in je reis naar een automatiseringsprofessional: variabelen, 'repeat with' loops, werken met strings, ontsnappende personages en nog veel meer.


Stap 1. Maak een algoritme

Het eerste dat u wilt doen wanneer u met een programmeerproject werkt, is kijken of u een algoritme kunt schetsen. Dat woord klinkt behoorlijk intimiderend, maar eigenlijk is het gewoon een mooie manier om te zeggen dat we de stappen moeten uitwerken van wat we gaan doen.

Het is gewoon een mooie manier om te zeggen dat we de stappen moeten uitwerken van wat we gaan doen.

Om een ​​algoritme voor ons project te maken, moeten we een basiskennis hebben van twee dingen: ons uiteindelijke doel en de stappen die nodig zijn om dit te bereiken. Het laatste deel is een beetje lastig omdat het enige specifieke kennis vereist van hoe het probleem benaderd moet worden vanuit een programmeringsperspectief, dat al dan niet intuïtief kan zijn, afhankelijk van hoe je hersenen werken.

Het doel

Laten we eerst ons doel analyseren, wat willen we bereiken? Het eindresultaat waarvoor ik zou willen fotograferen is een TextEdit-document dat een lijst bevat met de open tabbladen in Safari. Elk tabblad moet worden opgemaakt als een HTML-koppeling met de titel van het tabblad ingesteld op de linktekst, zoals deze:

 Tabtitel hier

Het proces

Met dit doel voor ogen kunnen we beginnen ons algoritme te schetsen door de processen te doorlopen die voor ons moeten plaatsvinden om dat doel te bereiken. Maak je op dit moment geen zorgen over perfectie. We zullen dit proces mentaal verfijnen, omdat we uitdagingen tegenkomen in het coderingsproces, dit is slechts om ons te helpen een idee te krijgen van hoe ons script eruit zal zien.

  1. Tel het aantal Safari-vensters
  2. Tel het aantal tabbladen in elk venster
  3. Maak een lus die door elk tabblad van elk venster gaat
  4. Pak de naam van het huidige tabblad
  5. Pak de URL van het huidige tabblad
  6. Bewaar tabbladnaam, URL en andere gewenste tekst in een variabele
  7. Open Teksteditor
  8. Maak een nieuw document
  9. Stel de tekst van het nieuwe document in op de variabele die onze reeks informatie bevat

Stap 2. Maak een Safari Tell-blok

Nu we ons overzicht hebben van de stappen die we gaan vereisen, is het tijd om in de codering te duiken. De eerste verschillende stappen in ons algoritme hadden allemaal te maken met Safari, dus het eerste dat we in ons script moeten doen is een tell-blok maken voor Safari.

[Applescript]
vertel de applicatie "Safari"
einde vertellen
[/ Applescript]

Tellblokken zijn de manier waarop we ons richten op wie / waar we het over hebben in ons script, in dit geval is het de applicatie Safari.

Tip: Vergeet niet om uw tellblokken te sluiten met "end tell", uw script zal zonder deze fout een fout veroorzaken.


Stap 3. Maak beginvariabelen

Een van de eerste dingen die ik graag in een script doe, is het maken van variabelen waarvan ik weet dat ik ze nodig heb. Dit helpt de weg te bereiden voor de rest van het script en houdt de dingen georganiseerd.

Op dit moment weet ik dat ik drie verschillende variabelen moet instellen: een voor het aantal vensters, een voor het aantal tabbladen en een voor de resulterende documenttekst.

De variabele voor het tellen van tabbladen moet worden bijgewerkt terwijl we door de vensters lopen, dus dat moet genest worden, maar de anderen kunnen nu voor ons zorgen.

[Applescript]
vertel de applicatie "Safari"

--Variabelen
stel windowCount in op het aantal vensters
stel docText in op ""

einde vertellen
[/ Applescript]

Het aantal vensters instellen

Na de opmerking maakt de eerste regel code een variabele genaamd "windowCount". Merk op dat dit erg beschrijvend is, niet iets generieks zoals "myVariable". Probeer altijd uw variabelen een naam te geven die nuttig is, zodat de leesbaarheid van uw scripts hoog blijft.

AppleScript-commando's zijn vaak erg dicht bij gewoon Engels, waardoor het een heel gemakkelijke taal is voor beginners om snel op te pikken.

De syntaxis voor het tellen van de vensters is super eenvoudig: stel (variabel) in op het aantal vensters. AppleScript-commando's zijn vaak erg dicht bij gewoon Engels, waardoor het een heel gemakkelijke taal is voor beginners om snel op te pikken.

De docText-variabele

Het vreemde van de bovenstaande code is dat ik een lege stringvariabele heb gemaakt, waarom zou ik dit doen? De reden zal later duidelijker worden, maar in principe zal onze herhaling doorgaan en er elke keer iets aan toevoegen en we hadden gewoon een plek nodig om te beginnen. U kunt niets toevoegen aan een variabele die niet bestaat!


Stap 4. Eerste herhaal blok

Om ons doel te bereiken, hebben we twee herhalingsblokken nodig. De logica hierachter is gemakkelijker om je geest in te slaan als je van binnenuit werkt.

De logica hierachter is gemakkelijker om je geest in te slaan als je van binnenuit werkt.

Ons doel is om de titel en de URL van een tabblad te pakken en dat voor elk tabblad te herhalen (herhaalblok). De truc is echter dat er meer dan één open venster zou kunnen zijn, dus we moeten dat proces voor elk venster herhalen (herhaalblok).

Nogmaals, dit denkproces is binnen de mogelijkheden om te werken, dus we beginnen met het herhalingsblok "elk venster".

[Applescript]
vertel de applicatie "Safari"

--Variabelen
stel windowCount in op het aantal vensters
stel docText in op ""

--Herhaal dit voor elk venster
herhaal met x van 1 tot windowCount
stel tabCount in op het aantal tabbladen in venster x
einde herhalen
einde vertellen
[/ Applescript]

Herhaal met

Een eenvoudig herhalingsblok kan iets zeggen als "herhaal 5 keer", maar we hebben hier iets ingewikkelder gedaan. Met de constructie "repeat with" kunnen we een opzettelijk generieke variabele (x) instellen die elke keer dat het herhaalblok wordt uitgevoerd, wordt verhoogd.

Om dit te laten werken, moeten we ons script het start- en eindpunt voor x vertellen terwijl het door de iteraties gaat. Wat ik heb gedaan is AppleScript verteld om x te starten op 1, dan te verhogen tot het een waarde bereikt die gelijk is aan het aantal open vensters, uitgedrukt als de variabele die we eerder hebben ingesteld.

Ik heb dit construct gebruikt omdat het ons herhaalblok bijzonder veelzijdig maakt.

Ik heb dit construct gebruikt omdat het ons herhaalblok bijzonder veelzijdig maakt. Als het script vier vensters telt, wordt het herhaalblok vier keer uitgevoerd, als het vijftig is, wordt het blok vijftig keer uitgevoerd.

De tabbladen tellen

Vervolgens herhaalde ik in principe het proces dat we eerder gebruikten voor het tellen van het venster om een ​​variabele in te stellen op het aantal tabbladen in het huidige venster.

Om dit op te lossen, moest ik echter de variabele x binnenhalen. Onthoud dat deze variabele zal toenemen telkens wanneer het herhalingsblok wordt uitgevoerd. Dus de eerste keer dat we doorgaan, tellen we het aantal tabbladen in het eerste venster, de tweede keer door, we tellen het aantal tabbladen in het tweede venster, enz..


Stap 5. Tweede herhaalblok

Nu we een herhalingsblok hebben ingesteld dat door elk venster gaat, moeten we er nog een herhalingsblok in invoegen om naar elk tabblad te kijken. De twee samen zullen in staat zijn om elk tabblad van elk venster uit te schakelen.

Terwijl we hier zijn, zullen we ook een aantal variabelen instellen voor de volgende stap.

[Applescript]
vertel de applicatie "Safari"

--Variabelen
stel windowCount in op het aantal vensters
stel docText in op ""

--Herhaal dit voor elk venster
herhaal met x van 1 tot windowCount
stel tabCount in op het aantal tabbladen in venster x

--Herhaal dit voor elke tab in het huidige venster
herhaal met y van 1 tot tabCount
--Krijg tabnaam en URL
stel tabName in als naam van tab y van venster x
stel tabURL in op URL van tab y van venster x
einde herhalen

einde herhalen
einde vertellen
[/ Applescript]

Herhaal dit voor elke tab in het huidige venster

Zoals u kunt zien, gebruikt dit herhalingsblok dezelfde syntaxis als wat we eerder zagen. We hebben het aantal tabbladen in de vorige stap al geteld, dus hebben we het herhaalblok ingesteld om van 1 naar tabCount te gaan, met behulp van de generieke ophogingsvariabele y.

Grab Tab-naam & URL

Om deze stap te voltooien, hebben we twee variabelen geïnitieerd. De syntaxis hiervan is vrijwel identiek, slechts één grijpt de naam van het huidige tabblad en de andere pakt de URL. Ik vond de specifieke syntaxis voor deze opdrachten in het Safari AppleScript-woordenboek.

Merk op dat, om de naam en de URL van het huidige tabblad te bemachtigen, we eenvoudigweg de x- en y-variabelen gebruiken die toenemen telkens wanneer het herhalingsblok wordt uitgevoerd. Dus de eerste keer dat we de naam en URL van tabblad één van venster één pakken, dan tab twee van venster één, dan misschien een van venster twee, enz..


Stap 6. Vul docText-reeks in

Weet je nog die lege docText-variabele die we eerder hebben gemaakt? Nu gaan we het vullen met de tekst die we willen voor elke vermelding in onze lijst. Telkens wanneer het herhaalingsblok wordt uitgevoerd, worden de titel en de URL van het huidige tabblad toegevoegd aan de variabele met behulp van de HTML-indeling die we hierboven hebben beschreven.

De code hiervoor is de meest gecompliceerde syntaxis die we tot nu toe hebben tegengekomen, kijk hieronder en dan zal ik je laten zien hoe het allemaal werkt.

[Applescript]
vertel de applicatie "Safari"

--Variabelen
stel windowCount in op het aantal vensters
stel docText in op ""

--Herhaal dit voor elk venster
herhaal met x van 1 tot windowCount
stel tabCount in op het aantal tabbladen in venster x

--Herhaal dit voor elke tab in het huidige venster
herhaal met y van 1 tot tabCount

--Krijg tabnaam en URL
stel tabName in als naam van tab y van venster x
stel tabURL in op URL van tab y van venster x

stel docText in op docText & ¬
"tabURL &" \ ">" & ¬
tabName & ¬
"" & ¬
linefeed als string
einde herhalen

einde herhalen
einde vertellen
[/ Applescript]

Aaneenschakeling

Het eerste dat je hier moet weten, is dat aaneenschakeling (het samenvoegen van dingen) in AppleScript wordt afgehandeld via het en-teken. In het bovenstaande voorbeeld wil ik elke keer een heleboel verschillende dingen toevoegen aan de variabele, dus ik gebruik het ampersand om alle stukken met elkaar te verbinden.

Toevoegen aan de variabele

Merk op dat ik de docText-variabele op "docText & ..." heb gezet met een heleboel andere dingen. Waarom zou ik een variabele voor zichzelf instellen? Wat dit doet is AppleScript vertellen dat ik de docText-variabele wil instellen op alles wat al is opgeslagen plus een aantal andere dingen.

Op het einde bevat deze variabele de volledige inhoud van wat in ons TextEdit-document wordt ingevoegd.

Op deze manier voeg ik elke keer dat het herhaalblok opnieuw wordt doorlopen, deze variabele toe en laat deze groeien in plaats van de inhoud ervan te vervangen. Op het einde bevat deze variabele de volledige inhoud van wat in ons TextEdit-document wordt ingevoegd.

Lijnonderbrekingen en linefeeds

Er zijn twee verschillende vormen van regeleinden in de bovenstaande code. De eerste is een reeks oppervlakkige regeleinden die ik in mijn code heb ingevoegd om het een beetje leesbaarder te maken. Ik wilde duidelijk maken dat verschillende delen afzonderlijk aan de variabele worden toegevoegd.

Het "¬" -symbool kan worden ingetypt in AppleScript met Option + Return en geeft aan dat de regeleinde slechts visueel is en niet zou moeten meewerken aan de manier waarop de code wordt uitgevoerd.

In werkelijkheid is dit alles echter een enkele regel code, die ik normaal gesproken als volgt zou schrijven:

[Applescript]
stel docText in op docText & "" & tabName & "" & linefeed als string
[/ Applescript]

Merk op dat aan het einde van deze regel code het woord "linefeed" staat. In tegenstelling tot de oppervlakkige regeleinden hierboven, vertegenwoordigt dit iets dat ik eigenlijk aan de variabele wil toevoegen. Aan het einde van elk regelitem voeg ik een regelinvoer in zodat het volgende lijstitem op een nieuwe regel begint.

Strings & Escaped Characters

Het rare aan de HTML-tekst die we proberen in te voegen, is dat het citaten bevat die door AppleScript worden gebruikt om het begin en het einde van een reeks aan te geven, zoals:

[Applescript]
zet myString op "Ladle rat rothut"
[/ Applescript]

Hier hebben we een variabele geïnitieerd en gevuld met wat tekst. De tekst is omgeven door aanhalingstekens en vertelt AppleScript dat de variabele van het type string is.

Dus als AppleScript offertes gebruikt om de strings te omringen, hoe slaan we dan quotes op als onderdeel van een string? Het antwoord is om de aanhalingstekens te "ontsnappen" met een backslash als volgt:

[Applescript]
stel myString in op "/" Ladle rat rot hut / ""
[/ Applescript]

In het eerste voorbeeld was de inhoud van de variabele: Ladle rat verrot hut (opgeslagen zonder aanhalingstekens). In het tweede voorbeeld bevatte de variabele feitelijk een aantal aanhalingstekens: "Ladle rat rot hut".

Alles samenvoegen

Gezien alle informatie die we net hebben geleerd, zijn hier de afzonderlijke stukjes die in onze variabele worden ingevoegd en aan elkaar blijven plakken.

  • tabURL
  • ">
  • tABNAME
  • linefeed

Wanneer al deze items worden samengevoegd en het script wordt herhaald voor elk tabblad in elk venster, moeten we een lijst hebben die precies zo is opgemaakt als het doel dat we aan het begin hebben uiteengezet.

 Tab One Title Here Tab Two Title Here Tab Three Title Here

Stap 7. Maak het tekstdocument

Nu we al deze informatie in één handige variabele hebben opgeslagen, is het tijd om er iets mee te doen. In ons geval willen we het in een tekstdocument gooien.

Maak hiervoor een nieuw tell-blok voor TextEdit, zoals:

[Applescript]
vertel de applicatie "Safari"

--Variabelen
stel windowCount in op het aantal vensters
stel docText in op ""

--Herhaal dit voor elk venster
herhaal met x van 1 tot windowCount
stel tabcount in op het aantal tabbladen in venster x

--Herhaal dit voor elke tab in het huidige venster
herhaal met y van 1 tot tabcount

--Krijg tabnaam en URL
stel tabName in als naam van tab y van venster x
stel tabURL in op URL van tab y van venster x

stel docText in op docText & "" & tabName & "" & linefeed als string
einde herhalen

einde herhalen
einde vertellen

--Schrijf documenttekst
vertel de applicatie "TextEdit"
activeren
maak nieuw document
zet de tekst van het frontdocument op docText
einde vertellen
[/ Applescript]

In het vertelblok van TextEdit heb ik drie dingen gedaan: ten eerste heb ik de toepassing verteld om te "activeren", wat het simpelweg naar de voorgrond brengt, zodat je de vruchten van je werk kunt zien.

Vervolgens vertelde ik TextEdit om een ​​nieuw document te maken. Ten slotte heb ik het script beëindigd door de tekst van het nieuwe document in te stellen op de variabele die onze lijst met koppelingen bevat.


Probeer het

Daarmee is ons script klaar! Als je dit al lang hebt volgehouden, gefeliciteerd, heb je al meer AppleScript geschreven dan de overgrote meerderheid van Mac-gebruikers en kan je jezelf beschouwen als een elitair lid van de Mac nerd-gemeenschap.

Om het script uit te proberen, moet je ervoor zorgen dat Safari is geopend met verschillende tabbladen en meerdere vensters op verschillende websites. Zodra je dit hebt ingesteld, druk je gewoon op de afspeelknop in AppleScript om de magie te bekijken.

Tip: Probeer een versie als een applicatie op te slaan, zodat je hem snel kunt uitvoeren wanneer je hem nodig hebt.


Probleemoplossen

Onvermijdelijk zullen velen van jullie dit punt bereiken en een fout maken. Er is iets misgegaan, maar wat? Meestal is het antwoord iets simpels als een typfout. Weet je zeker dat je het script hebt ingevoerd precies zoals het hierboven staat? AppleScript probeert typisch om het specifieke probleem voor u aan te wijzen, het advies op te volgen en de problematische regel opnieuw in te voeren.

AppleScript probeert typisch om het specifieke probleem voor u aan te wijzen, het advies op te volgen en de problematische regel opnieuw in te voeren.

Helaas is het heel goed mogelijk dat u alles correct hebt ingevoerd en nog steeds een fout ontvangt. Misschien is er een probleem met je versie van Safari of het script bevalt de webpagina's die je hebt gekozen om onbekende reden niet. Probeer dingen te veranderen en kijk of je het probleem kunt lokaliseren.

Foutafhandeling is een vrij diep onderwerp dat ik uitgebreid zal behandelen in een toekomstig artikel, voor nu een kijkje nemen in ons artikel over geavanceerde AppleScript-technieken voor meer informatie over hoe u het script kunt aanpassen om specifieke acties te ondernemen wanneer een fout wordt gegenereerd.

Conclusie

Ik heb je net het volledige proces van het schrijven van een AppleScript doorgenomen om een ​​lijst met links te genereren vanuit je open tabbladen in Safari. Dit zou je veel problemen moeten besparen bij die grote onderzoeksprojecten.

Hopelijk heb je onderweg veel geweldige dingen over AppleScript geleerd en hoe je eenvoudige maar repetitieve taken kunt automatiseren. Als je vragen hebt, kun je hieronder een reactie achterlaten of ons op Twitter bereiken.