Generere en liste over åpne Safari faner med AppleScript

Generate en liste over åpne Safari faner med Apple

Enten du er en blogger som arbeider på en roundup eller en student gjøre noen undersøkelser, har du sannsynligvis kjøre inn behovet for å opprette en liste over nettsteder basert på dine er åpne Safari faner. La oss lære å skrive en Applescript som vil håndtere denne prosessen for oss.


Et utvalg av hva manuset bør produksjonen basert på de åpne fanene i Safari.



Hva Vi kommer til å lære

Skriptet som vi kommer til å skrive er egentlig ganske enkelt, så hvis du nettopp har begynt med Applescript, er dette det perfekte prosjekt for å kutte tennene dine på.

Om du faktisk trenger et verktøy som vil lage en liste over Safari faner er irrelevant. Det viktige her er å lære av hvordan vi nærmer oss denne oppgaven.

Det viktige her er å lære av hvordan vi nærmer oss denne oppgaven.

Vi kommer til å treffe på en rekke Apple konstruksjoner som er kritiske i din reise til å bli en automatisering pro:. variabler, "gjenta med" looper, som arbeider med strenger, rømmer karakterer og mye mer



Trinn 1. Opprett en algoritme

Det første du vil gjøre når du arbeider med alle programmerings prosjektet er å se om du kan skissere en algoritme. Det ordet høres ganske skremmende, men egentlig er det bare en fancy måte å si at vi trenger å trene trinnene hva vi skal gjøre.

Det er bare en fancy måte å si at vi må jobbe . ut trinnene hva vi skal gjøre

Hvis du vil lage en algoritme for vårt prosjekt, må vi ha en grunnleggende forståelse to ting: vårt endelige mål og de nødvendige skritt for å nå det. Den siste delen er litt vanskelig fordi det ikke krever noen spesifikk kunnskap om hvordan å nærme seg problemet fra et programmerings perspektiv, som kan eller ikke kan være intuitive avhengig av hvordan hjernen fungerer.

Målet Anmeldelser

La oss først analysere vårt mål, hva vi ønsker å oppnå? Sluttresultatet at jeg ønsker å skyte for er en TextEdit dokument som inneholder en liste over de åpne faner i Safari. Hver kategori må formateres som en HTML-link med tittelen på fanesett til koblingen teksten, slik:
< a href = "www.siteurl.com" > Tab Tittel Her < /a >
Prosessen

Med dette målet i tankene, kan vi begynne å skissere vår algoritme ved å tenke gjennom de prosessene som må skje for oss å oppnå dette målet. På dette punktet, ikke bekymre deg om perfeksjon. Vi vil mentalt avgrense denne prosessen som vi kommer over utfordringer i kodingen prosessen, dette er bare for å hjelpe oss å få et inntrykk av hva skriptet vil se ut.


    Tell antall Safari vinduer

    Tell antall faner i hvert vindu

    Lag en løkke som går gjennom hver kategori av hvert vindu

    Ta tak i navnet på den aktuelle fanen

    Grab nettadressen til den aktuelle kategorien

    kategorien Butikk navn, URL og annen ønsket tekst i en variabel

    Åpne TextEdit

    Opprett et nytt dokument

    Sett Teksten på det nye dokumentet til den variabelen som inneholder vår streng med informasjon


    Trinn 2. Lag en Safari Fortell Block

    Nå som vi har fått vår grunnleggende oversikt over trinnene som vi kommer til å kreve, er det på tide å hoppe i koding. De første trinnene i algoritmen vår alle hadde å gjøre med Safari, så det første vi må gjøre vår skriptet er å lage en forteller blokk for Safari.

    [Applescript]
    forteller programmet "Safari"
    slutten fortelle product: [/Applescript]

    Fortell blokkene er hvordan vi målrette hvem /hva det er at vi snakker med i vår script, i dette tilfellet er det programmet Safari. Anmeldelser

    . Tips: Ikke glem å lukke tell blokker med "END fortelle", skriptet vil kaste en feil uten at dette



    Trinn 3. Lag Initial Variabler

    En av de første tingene som jeg liker å gjøre på noen script er å lage noen variabler som jeg vet jeg trenger. Dette bidrar til å sette scenen for resten av skriptet og holder ting organisert

    På dette punktet, vet jeg at jeg må sette opp tre forskjellige variabler:. En for vinduet teller, en for fanen telle, og en for den resulterende dokumentteksten.

    Fanen count variable trenger å oppdatere så vi sykler gjennom vinduene, slik at må være nestet i en loop, men de andre vi kan ta vare på nå .

    [Applescript]
    forteller programmet "Safari"

    - Variabler
    satt windowCount til antall vinduer
    satt docText til ""

    end fortelle product: [/Applescript]

    Stille Window Count

    Etter kommentaren, skaper den første linjen med kode en variabel som heter "windowCount". Legg merke til at dette er veldig beskrivende, ikke noe generisk som "myVariable". Prøver alltid å nevne dine variabler noe nyttig, slik at lesbarheten av skriptene er fortsatt høy.

    Apple bud er ofte veldig nær vanlig engelsk, noe som gjør det til et veldig enkelt språk for nybegynnere å plukke opp raskt. Anmeldelser

    Syntaksen for telling vinduene er super enkel: satt (variabel) til antall vinduer. Apple bud er ofte veldig nær vanlig engelsk, noe som gjør det til et veldig enkelt språk for nybegynnere å plukke opp raskt.

    Den docText Variable

    Den merkelige delen om koden ovenfor, er at jeg har opprettet en tom streng variabel, hvorfor skulle jeg gjøre dette? Årsaken skal være mer tydelig senere, men i utgangspunktet våre gjenta vil gå gjennom og legge noe til dette hver gang, og vi bare trengte et sted å starte. Du kan ikke legge noe til en variabel som ikke eksisterer!



    Trinn 4. Førstehjelps Gjenta Block

    For å trekke av målet vårt, vi kommer til å trenge to repeat blokker. Logikken bak dette er lettere å vikle hjernen din rundt hvis du jobber fra innsiden og ut.

    Logikken bak dette er lettere å vikle hjernen din rundt hvis du jobber fra innsiden og ut.

    Vårt mål er å ta tak i tittel og URL fra en kategori, og gjenta det for hver kategori (gjenta blokk). Trikset er skjønt at det kan være mer enn ett åpent vindu så vi trenger å gjenta denne prosessen for hvert vindu (gjenta blokk).

    Igjen, dette er tankeprosessen innsiden ut hvordan vi må jobbe, så Vi begynner med "alle vinduer" repeat blokk

    [Applescript]
    forteller programmet "Safari"

    -. Variabler
    satt windowCount til antall vinduer
    set docText til ""

    - Gjenta for alle vinduer
    gjenta med x fra 1 til windowCount
    satt tabCount til antall faner i vinduet x
    slutten gjenta
    ende fortelle product: [/Applescript]

    Gjenta Med

    En enkel gjenta blokk kan si noe sånt som "gjenta 5 ganger", men vi har gjort noe litt mer komplisert her. Den "gjenta med" konstruksjonen gjør at vi kan sette opp en vilje generiske variabelen (x) som vil øke hver gang gjentakelses blokken kjøres.

    For at dette skal fungere, må vi fortelle vår script start og stopp punkt for x som det sykluser gjennom sine gjentakelser. Det jeg har gjort er fortalt Applescript til å starte x 1, deretter øker den til den treffer en verdi lik antall åpne vinduer, uttrykt som den variabelen som vi satt opp før.

    Jeg brukte denne konstruksjonen fordi det gjør våre gjenta blokk ekstremt allsidig

    . Jeg brukte denne konstruksjonen fordi det gjør våre gjenta blokk ekstremt allsidig. Hvis skriptet teller fire vinduer, vil gjenta blokk kjøre fire ganger, hvis det teller femti, blokken vil kjøre femti ganger.

    Telle Tabs

    Neste, jeg i utgangspunktet gjentok prosessen som vi brukte før for vinduet teller for å sette en variabel til antall faner i det aktive vinduet.

    For å trekke dette av selv, jeg måtte trekke i x-variabelen. Husk at denne variabelen vil øke hver gang gjentakelses blokken kjøres. Så den første gangen, skal vi telle antall faner i vinduet en, andre gang gjennom, vil vi telle antall faner i vinduet to, osv



    Trinn 5. Second Gjenta Block

    Nå som vi har en gjentakelse blokk satt opp som vil gå gjennom hvert vindu, må vi sette inn en gjentakelse blokk innsiden av det å se på hver fane. De to sammen vil kunne slå ut hver kategori av hvert vindu.

    Mens vi er her, vi vil også sette opp noen variabler for neste trinn.

    [Applescript]
    forteller programmet "Safari"

    - Variabler
    satt windowCount til antall vinduer
    satt docText til ""

    - Gjenta for alle vinduer
    gjenta med x fra 1 til windowCount
    satt tabCount til antall faner i vinduet x

    - Gjenta for hver kategori i Current Window
    gjenta med y fra 1 til tabCount
    --get Tab Name & URL
    satt tabname til navnet på fanen y av vinduet x
    satt tabURL til nettadressen til fanen y av vinduet x
    slutten gjenta

    end repeat
    ende fortelle product: [/Apple]

    Gjenta for hver kategori i Current Window

    Som du kan se, bruker denne gjenta blokk lignende syntaks til hva vi har sett før. Vi har allerede telles antall faner i forrige trinn, så vi setter gjenta blokk å gå fra 1 til tabCount, ved hjelp av generiske inkrementeringen variabel y

    Grab Tab Name &.; URL

    For å avslutte dette trinnet, vi satt i gang to variabler. Syntaksen av disse er nesten identisk, bare en griper inn navnet på den aktuelle fanen og den andre griper URL. Jeg fant den spesifikke syntaks for disse kommandoene i Safari Script-ordlisten.

    Legg merke til at, for å ta tak i navn og nettadressen til den gjeldende fanen, vi er rett og slett å bruke x- og y-variabler at tilveksten hver gang gjentakelses blokk blir kjørt. Så den første gangen vi ta tak i navn og URL til fanen en av vinduet en, deretter fanen to av vinduet en, så kanskje tab en av vinduet to, osv



    Trinn 6. Fyll docText String

    Husk at tom docText variabel som vi laget før? Nå kommer vi til å fylle den opp med teksten at vi ønsker for hver oppføring i vår liste. Hver gang gjenta blokk går, tittel og URL for den aktive fanen vil bli lagt til den variable ved hjelp av HTML-formatering som vi skisserte ovenfor.

    Koden for dette er den mest kompliserte syntaks som vi har kommet over så langt, ta en titt nedenfor og så skal jeg gå gjennom hvordan det hele fungerer

    [Applescript]
    forteller programmet "Safari"

    -. Variabler
    satt windowCount til antall vinduer
    satt docText til ""

    - Gjenta for alle vinduer
    gjenta med x fra 1 til windowCount
    satt tabCount til antall faner i vinduet x

    - Gjenta for hver kategori i Current Window
    gjenta med y fra 1 til tabCount

    - Få Tab Name & URL
    satt tabname til navnet på fanen y av vinduet x
    satt tabURL til nettadressen til fanen y av vinduet x

    satt docText å docText & ¬
    «< a href =" & "\\" "&Amp; ¬
    tabURL &" \\ ">" & ¬
    tabname & ¬
    «< /a >" & ¬
    linjeskift som streng
    slutten gjenta

    end repeat
    ende fortelle product: [/Applescript]

    Sammenkobling

    Det første du trenger å vite her er at concatenation (sette ting sammen) i Applescript håndteres via tegnet. I eksempelet ovenfor, vil jeg legge til en haug med forskjellige ting til variabelen hver gang, så jeg bruker tegnet for å koble alle bitene sammen.

    Legge til Variable

    Legg merke til at Jeg satt docText variabelen til "docText & ..." en haug med andre ting. Hvorfor skulle jeg sette en variabel til seg selv? Hva dette gjør er å fortelle Applescript som jeg ønsker å sette docText variabelen til alt som allerede er lagret pluss noen andre ting.

    Innen utgangen, vil denne variabelen inneholder hele innholdet i hva som vil bli satt inn i vår TextEdit dokument .

    På denne måten hver gang gjentakelses blokken kjøres gjennom igjen, jeg legger til denne variabelen, og la det vokse heller enn å erstatte innholdet. Innen utgangen, vil denne variabelen inneholder hele innholdet i hva som vil bli satt inn i vår TextEdit dokument.

    linjeskift og linefeeds

    Det er to ulike former for linjeskift i koden ovenfor. Den første er en serie av overfladisk linjeskiftene som jeg satt inn min kode i et forsøk på å gjøre det litt mer lesbar. Jeg ønsket å gjøre det klart at flere ulike biter blir lagt til variabelen individuelt.

    "¬" -symbolet kan skrives i Applescript med Option + Retur og indikerer at linjeskift er bare en visuell ett og . bør ikke faktor i hvordan koden kjøres

    I virkeligheten skjønt, er alt dette en eneste linje med kode, som jeg normalt ville skrive som følger:

    [Applescript]
    satt docText å docText & "< a href =" & "\\" "&Amp; tabURL &" \\ ">" & tabname & "< /a >" & linjeskift som streng product: [/Applescript]

    Legg merke til nær slutten av denne linjen med kode er ordet "linjeskift". I motsetning til den overfladiske linjeskift ovenfor, representerer dette noe som jeg faktisk ønsker lagt til variabelen. På slutten av hver linje, jeg setter inn et linjeskift, slik at neste punkt på listen vil begynne på en ny linje

    Strings &.; Rømt Tegn

    Det rare ting om HTML-teksten at vi prøver å sette inn er at den inneholder sitater, som faktisk brukes av Applescript for å angi begynnelsen og slutten av en streng som så:
    < p> [Applescript]
    satt myString å "øse rotte råtten hytta" product: [/Applescript]

    Her har vi satt i gang en variabel og fylte den med litt tekst. Teksten er omgitt av sitater og forteller Apple at variabelen er av typen streng.

    Så hvis Apple bruker anførselstegn for å omringe strenger, hvordan vi lagrer sitater som en del av en streng? Svaret er å "flykte" anførselstegn med en omvendt skråstrek som så:

    [Applescript]
    satt myString til "/" Øse rat råtten hytta /"" product: [/Applescript]

    I det første eksemplet, innholdet i variabelen var som følger: Øse rotte råtten hut (lagret uten anførselstegn). I det andre eksemplet, variabelen faktisk inneholdt et sett med sitater: ". Øse rotte råtten hytta"

    Sette alt sammen

    Gitt all informasjon som vi nettopp har lært, her er det enkelte brikker som blir satt inn i vår variabel og fast sammen

    < a. href = "

    tabURL

    " >

    tabname

    < /a >

    linjeskift

    Når alle disse elementene er satt sammen og scriptet gjentas for hver kategori i hvert vindu, bør vi har en liste som er formatert akkurat som mål at vi setter ut i begynnelsen
    . < a href = "www.siteurlone.com" > Tab En tittel Her < /a > < a href = "www .siteurltwo.com "> Tab To Tittel Here < /a > < a href =" www.siteurlthree.com "> Tab Tre Tittel Her < /a >



    Trinn 7. Lag tekstdokumentet

    Nå som vi har all denne informasjonen er lagret i ett praktisk variabel, er det på tide å gjøre noe med det. I vårt tilfelle ønsker vi å kaste den inn i et tekstdokument

    For å gjøre dette ved å opprette en ny tell blokk for TextEdit som så:.

    [Applescript]
    forteller programmet "Safari "

    - Variabler
    satt windowCount til antall vinduer
    satt docText til" "

    - Gjenta for alle vinduer
    gjenta med x fra 1 til windowCount
    set tabcount til antall faner i vinduet x

    - Gjenta for hver kategori i Current Window
    gjenta med y fra 1 til tabcount

    - Få Tab Name & URL
    satt tabname til navnet på fanen y av vinduet x
    satt tabURL til nettadressen til fanen y av vinduet x

    satt docText å docText & "< a href =" & "\\" "&Amp; tabURL &" \\ ">" & tabname & "< /a >" & linjeskift som streng
    slutten gjenta

    end repeat
    ende fortelle

    - Skriv Document Text
    forteller programmet "TextEdit"
    aktivere
    lage nytt dokument
    sette teksten i fronten dokumentet til docText
    slutten fortelle product: [/Applescript]

    Inne i TextEdit fortelle blokken jeg har gjort tre ting: For det første, jeg fortalte at programmet " aktivere ", som rett og slett bringer det frem i forgrunnen slik at du kan se fruktene av ditt arbeid.

    Deretter fortalte jeg TextEdit for å opprette et nytt dokument. Til slutt endte jeg manuset ved å sette teksten i det nye dokumentet til variabelen som holder vår liste over linker.



    Prøv det ut

    Med det skriptet er ferdig! Hvis du har holdt på så lenge, gratulerer, du har allerede skrevet mer Apple enn de aller fleste Mac-brukere, og kan vurdere deg selv en elite medlem av Mac nerd samfunnet.

    Hvis du vil prøve ut manuset, sørg for at du har Safari åpen med flere faner og flere vinduer er satt til ulike nettsteder. Når du har dette satt opp, bare trykke på play-knappen i Applescript for å se det magiske skje

    Tips:.. Prøv å lagre ut en versjon som et program slik at du raskt kan kjøre den når du trenger det Anmeldelser



    Feilsøking

    Uunngåelig, mange av dere vil nå dette punktet, og traff en feil. Noe gikk galt, men hva? Oftest vil svaret være noe så enkelt som en skrivefeil. Er du sikker på at du skrev manuset nøyaktig slik den vises ovenfor? Apple forsøker vanligvis å peke ut spesifikke problem for deg, må du følge dens råd og skrive inn den problematiske linje.

    Applescript forsøker vanligvis å peke ut spesifikke problem for deg, må du følge dens råd og skrive inn den problematiske linje.

    Dessverre, det er fullt mulig at du skrev alt riktig og fortsatt får en feilmelding. Kanskje det er et problem med din versjon av Safari eller kanskje manuset ikke liker websidene du valgte for noen ukjent grunn. Prøv å endre ting opp og se om du kan finne problemet.

    Feilhåndtering er et ganske dypt tema som jeg skal dekke i dybden i en fremtidig artikkel, for nå ta en titt på vår artikkel om Advanced Apple Teknikker for mer informasjon om hvordan du kan endre manuset til utføre bestemte handlinger når en feil blir kastet.

    Konklusjon

    Jeg bare gikk deg gjennom hele prosessen med å skrive en Apple å generere en liste av linker fra dine åpne faner i Safari. Dette bør du spare massevis av problemer på de store forskningsprosjekter.

    Forhåpentligvis underveis du lært mange flotte ting om Applescript og hvordan å nærme seg automatisere enkle men repeterende oppgaver. Hvis du har spørsmål, kan du gjerne legge igjen en kommentar nedenfor eller treffer oss på Twitter.