Generați o listă de fișiere Safari deschise cu AppleScript

Indiferent dacă sunteți un blogger care lucrează la o întâlnire sau un student care face unele cercetări, probabil că ați întâmpinat nevoia de a crea o listă de site-uri pe baza fișierelor Safari deschise în prezent. Să învățăm cum să scriem un AppleScript care să se ocupe de acest proces pentru noi.


O mostră a ceea ce scriptul ar trebui să obțină pe baza fișierelor deschise din Safari.

Ce vom învăța

Scriptul pe care o vom scrie este de fapt destul de simplu, așa că dacă începeți doar cu AppleScript, acesta este proiectul perfect pentru a vă tăia dinții.

Dacă aveți sau nu nevoie de un instrument care să creeze o listă de file Safari, este irelevant. Lucrul important aici este să învățăm din modul în care abordăm această sarcină.

Lucrul important aici este să învățăm din modul în care abordăm această sarcină.

Vom trage un număr de constructe AppleScript care sunt esențiale în călătoria dvs. pentru a deveni o variabilă automată pro: variabile, "repetați" cu bucle, lucrați cu șiruri de caractere, caractere scape și multe altele.


Pasul 1. Creați un algoritm

Primul lucru pe care doriți să îl faceți când lucrați cu orice proiect de programare este să vedeți dacă puteți schița un algoritm. Acest cuvânt sună destul de intimidant, dar într-adevăr este doar o modalitate fantezistă de a spune că trebuie să elaborăm pașii a ceea ce vom face.

Este doar o modalitate fantezistă de a spune că trebuie să elaborăm pașii a ceea ce vom face.

Pentru a crea un algoritm pentru proiectul nostru, trebuie să avem o înțelegere de bază două lucruri: obiectivul nostru final și pașii necesari pentru atingerea acestuia. Ultima parte este puțin complicată deoarece necesită cunoștințe specifice despre cum să abordați problema dintr-o perspectivă de programare, care poate sau nu să fie intuitivă în funcție de modul în care funcționează creierul dvs..

Scopul

Să analizăm mai întâi scopul nostru, ce vrem să realizăm? Rezultatul final pentru care aș vrea să filmez este un document TextEdit care conține o listă a filelor deschise din Safari. Fiecare filă ar trebui să fie formatată ca o legătură HTML cu titlul fișierului setat la textul linkului, astfel:

 Tab Titlu aici

Procesul

Având în vedere acest obiectiv, putem începe să schițăm algoritmul nostru, gândindu-ne prin procesele care trebuie să se întâmple pentru a realiza acest obiectiv. În acest moment, nu vă faceți griji cu privire la perfecțiune. Vom rafina mental acest proces pe măsură ce întâlnim provocări în procesul de codificare, ci doar pentru a ne ajuta să ne simțim pentru ceea ce va arăta scriptul nostru.

  1. Numără numărul ferestrelor Safari
  2. Numără numărul de file din fiecare fereastră
  3. Creați o buclă care trece prin fiecare filă a fiecărei ferestre
  4. Luați numele filei curente
  5. Luați adresa URL a filei curente
  6. Stocați numele fila, adresa URL și alt text dorit într-o variabilă
  7. Deschideți TextEdit
  8. Creați un document nou
  9. Setați textul noului document la variabila care conține șirul de informații

Pasul 2. Creați un Safari Tell Block

Acum, că avem o schiță de bază a pașilor pe care le vom cere, este timpul să sarăm în codificare. Primii câțiva pași ai algoritmului nostru au avut de-a face cu Safari, așa că primul lucru pe care trebuie să-l facem în scenariul nostru este să creăm un bloc pentru Safari.

[AppleScript]
spuneți aplicația "Safari"
sfarsitul spune
[/ AppleScript]

Spuneți blocurile sunt modul în care țintim cine / cu ce vorbim în scenariul nostru, în acest caz este aplicația Safari.

Bacsis: Nu uitați să închideți blocurile dvs. spuneți "spuneți sfârșitul", scriptul dvs. va arunca o eroare fără acest lucru.


Pasul 3. Crearea variabilelor inițiale

Unul dintre primele lucruri pe care îmi place să le fac în orice scenariu este să creez orice variabile despre care știu că am nevoie. Acest lucru ajută la stabilirea scenei pentru restul scenariului și păstrează lucrurile organizate.

În acest moment, știu că va trebui să configurez trei variabile diferite: una pentru numărul de ferestre, una pentru numărul taburilor și una pentru textul documentului rezultat.

Variabila de numărare a filelor trebuie să fie actualizată pe măsură ce navigăm prin ferestre, astfel încât va trebui să fie imbricate într-o buclă, dar celelalte pe care le putem avea acum.

[AppleScript]
spuneți aplicația "Safari"

--variabile
set windowCount la numărul de ferestre
setați docText la ""

sfarsitul spune
[/ AppleScript]

Setarea numărului de ferestre

După comentariu, prima linie de cod creează o variabilă numită "windowCount". Observați că acest lucru este foarte descriptiv, nu este ceva generic precum "variabilă". Întotdeauna încercați să denumiți variabilele dvs. ceva util, astfel încât lizibilitatea scripturilor dvs. să rămână ridicată.

Comenzile lui AppleScript sunt adesea foarte apropiate de limbajul englez, făcându-l o limbă foarte ușoară pentru începători pentru a ridica rapid.

Sintaxa pentru numărarea ferestrelor este foarte simplă: set (variabilă) la numărul de ferestre. Comenzile lui AppleScript sunt adesea foarte apropiate de limbajul englez, făcându-l o limbă foarte ușoară pentru începători pentru a ridica rapid.

Variabila docText

Partea ciudată despre codul de mai sus este că am creat o variabilă de șir gol, de ce aș face asta? Motivul va fi mai clar mai târziu, dar în principiu repetarea noastră va trece și vom adăuga ceva la acest lucru de fiecare dată și pur și simplu am nevoie de un loc pentru a începe. Nu puteți adăuga ceva la o variabilă care nu există!


Pasul 4. Primul bloc repetat

Pentru a ne elimina scopul, vom avea nevoie de două blocuri repetate. Logica din spatele acestei situații este mai ușor de înfășurat în jurul dvs. dacă lucrați din interior spre exterior.

Logica din spatele acestei situații este mai ușor de înfășurat în jurul dvs. dacă lucrați din interior spre exterior.

Scopul nostru este să luăm titlul și adresa URL dintr-o filă, apoi să repetăm ​​pentru fiecare filă (bloc repetat). Trucul este că ar putea exista mai mult de o fereastră deschisă, așa că trebuie să repetăm ​​acel proces pentru fiecare fereastră (bloc repetat).

Din nou, acest proces al gândirii este în interior pentru modul în care trebuie să lucrăm, așa că vom începe cu blocul de repetare "fiecare fereastră".

[AppleScript]
spuneți aplicația "Safari"

--variabile
set windowCount la numărul de ferestre
setați docText la ""

--Repetați pentru fiecare fereastră
repetați cu x de la 1 la windowCount
setați tabCount la numărul de file în fereastra x
repetați sfârșitul
sfarsitul spune
[/ AppleScript]

Repetați cu

Un simplu bloc repetat ar putea spune ceva de genul "repetați de 5 ori", dar am făcut ceva mai complicat aici. Construcția "repeta cu" ne permite să setăm o variabilă generică intenționată (x) care va crește la fiecare execuție a blocului repetat.

Pentru ca acest lucru să funcționeze, trebuie să spunem scenariului nostru punctul de pornire și oprire pentru x, pe măsură ce trece prin iterațiile sale. Ceea ce am făcut i sa spus AppleScript să pornească x la 1, apoi să o crească până când atinge o valoare egală cu numărul de ferestre deschise, exprimată ca variabila pe care am configurat-o înainte.

Am folosit această construcție deoarece face blocul nostru de repetări extrem de versatil.

Am folosit această construcție deoarece face blocul nostru de repetări extrem de versatil. Dacă scriptul contorizează patru ferestre, blocul de repetare va rula de patru ori, în cazul în care se numără cincizeci, blocul va rula de cincizeci de ori.

Numărarea filelor

Apoi, am repetat în esență procesul pe care l-am folosit anterior pentru numărul de ferestre pentru a seta o variabilă la numărul de file din fereastra curentă.

Dar, pentru a trage acest lucru, a trebuit să trag variabila x. Rețineți că această variabilă va crește de fiecare dată când se rulează blocul repetat. Deci, pentru prima oară, vom număra numărul de file în fereastra unu, a doua oară, vom număra numărul de file din fereastra a doua, etc.


Pasul 5. Al doilea bloc repetat

Acum, că avem un bloc de repetare setat care va trece prin fiecare fereastră, trebuie să inserăm un alt bloc repetat în interiorul căruia să se uite la fiecare filă. Cei doi împreună vor putea să nimicească fiecare filă din fiecare fereastră.

În timp ce suntem aici, vom stabili și câteva variabile pentru următorul pas.

[AppleScript]
spuneți aplicația "Safari"

--variabile
set windowCount la numărul de ferestre
setați docText la ""

--Repetați pentru fiecare fereastră
repetați cu x de la 1 la windowCount
setați tabCount la numărul de file în fereastra x

--Repetați pentru fiecare filă din fereastra curentă
repetați cu y de la 1 la tabCount
--Obțineți numele tabelului și adresa URL
setați tabName la numele tabelului y al ferestrei x
setați tabURL la adresa URL a filei y a ferestrei x
repetați sfârșitul

repetați sfârșitul
sfarsitul spune
[/ AppleScript]

Repetați pentru fiecare filă din fereastra curentă

După cum puteți vedea, acest bloc repetat folosește o sintaxă similară cu ceea ce am văzut înainte. Am numărat deja numărul de file în etapa anterioară, astfel încât am setat blocul repetat să treacă de la 1 la tabCount, utilizând variabila generatoare de creștere y.

Prindeți numele tabelului și adresa URL

Pentru a termina acest pas, am inițiat două variabile. Sintaxa dintre acestea este aproape identică, doar una ia numele fișierului curent, iar cealaltă apucă adresa URL. Am găsit sintaxa specifică pentru aceste comenzi în dicționarul Safari AppleScript.

Observați că, pentru a apuca numele și adresa URL a filei curente, pur și simplu folosim variabilele x și y care cresc la fiecare execuție a blocului repetat. Deci, pentru prima dată când luăm numele și adresa URL a filei una din fereastra unu, apoi tabul două de fereastra unu, apoi poate fi una din fereastra a doua, etc.


Pasul 6. Completați stringul docText

Amintiți-vă că variabila docText goală pe care am creat-o înainte? Acum o vom completa cu textul dorit pentru fiecare intrare din lista noastră. De fiecare dată când se execută blocul repetat, titlul și adresa URL a filei curente vor fi adăugate la variabila folosind formatul HTML pe care l-am prezentat mai sus.

Codul pentru aceasta este sintaxa cea mai complicată pe care am întâlnit-o până acum, aruncați o privire mai jos și apoi vă voi arăta cum funcționează toate.

[AppleScript]
spuneți aplicația "Safari"

--variabile
set windowCount la numărul de ferestre
setați docText la ""

--Repetați pentru fiecare fereastră
repetați cu x de la 1 la windowCount
setați tabCount la numărul de file în fereastra x

--Repetați pentru fiecare filă din fereastra curentă
repetați cu y de la 1 la tabCount

--Obțineți numele tabelului și adresa URL
setați tabName la numele tabelului y al ferestrei x
setați tabURL la adresa URL a filei y a ferestrei x

setați docText la docText & ¬
"tabURL &" \ ">" & ¬
tabName & ¬
"" & ¬
linefeed ca șir
repetați sfârșitul

repetați sfârșitul
sfarsitul spune
[/ AppleScript]

înlănțuire

Primul lucru pe care trebuie să-l cunoașteți aici este faptul că concatenarea (punerea de chestii împreună) în AppleScript este tratată prin ampersand. În exemplul de mai sus, vreau să adaug câte o grămadă de lucruri diferite la variabila de fiecare dată, așa că folosesc ampersand pentru a conecta toate piesele împreună.

Adăugarea la variabila

Observați că am setat variabila docText la "docText & ..." o grămadă de alte lucruri. De ce aș stabili o variabilă la sine? Ceea ce face acest lucru este spune AppleScript că vreau să setați variabila docText la tot ceea ce deja a fost stocat plus alte lucruri.

Până la sfârșit, această variabilă va conține întregul conținut al ce va fi inserat în documentul nostru TextEdit.

În acest fel, de fiecare dată când blocul repetat este rulat din nou, adaug la această variabilă și lăsându-l să crească mai degrabă decât să înlocuiască conținutul său. Până la sfârșit, această variabilă va conține întregul conținut al ce va fi inserat în documentul nostru TextEdit.

Întreruperi de linie și feeduri liniare

Există două forme diferite de pauze de linie în codul de mai sus. Prima este o serie de pauze de linii superficiale pe care le-am introdus în codul meu într-o încercare de ao face mai ușor de citit. Am vrut să clarific faptul că mai multe fragmente diferite sunt adăugate variabilei individuale.

Simbolul "¬" poate fi tastat în AppleScript cu Option + Întoarcere și indică faptul că ruperea liniei este doar una vizuală și nu ar trebui să influențeze modul în care este rulat codul.

În realitate, totuși, toate acestea reprezintă o singură linie de cod, pe care aș scrie în mod normal după cum urmează:

[AppleScript]
setați docText la docText & "" & tabName & "" & linefeed ca șir
[/ AppleScript]

Observați că aproape de sfârșitul acestei linii de cod este cuvântul "linia alimentată". Spre deosebire de linia superficială de rupere deasupra, aceasta reprezintă ceva pe care chiar vreau să îl adaug la variabila. La sfârșitul fiecărui element rând, introdu un rând, astfel încât următorul element de listă să înceapă pe o linie nouă.

Șir și caractere evadate

Lucrul ciudat despre textul HTML pe care încercăm să-l inserăm este că conține citate, care sunt de fapt folosite de AppleScript pentru a indica începutul și sfârșitul unui șir de caractere:

[AppleScript]
setați myString la "Cabana putredă șobolan"
[/ AppleScript]

Aici am inițiat o variabilă și l-am umplut cu un text. Textul este înconjurat de citate și îi spune AppleScript că variabila este de tip șir.

Deci, dacă AppleScript folosește citate pentru a încorpora șiruri de caractere, cum păstrăm citatele ca parte a unui șir? Răspunsul este acela de a "scapa" personajele de citare cu o backslash cum ar fi:

[AppleScript]
set myString la "/" Ladle șobolan putred / ""
[/ AppleScript]

În primul exemplu, conținutul variabilei a fost după cum urmează: Cabana putredă șobolan (stocată fără citate). În cel de-al doilea exemplu, variabila conținea, de fapt, un set de citate: "Cabana putredă de șobolani".

Punând-o pe toți împreună

Având în vedere toate informațiile pe care tocmai le-am învățat, aici sunt piesele individuale care sunt introduse în variabilele noastre și lipite împreună.

  • tabURL
  • „>
  • tABNAME
  • linie de alimentare

Când toate aceste elemente sunt puse împreună și scriptul este repetat pentru fiecare filă din fiecare fereastră, ar trebui să avem o listă care este formatată exact ca obiectivul pe care l-am stabilit la început.

 Tabulă Un titlu aici Tabă de două titluri Aici tabul trei titlu aici

Pasul 7. Creați documentul text

Acum, că avem toate aceste informații stocate într-o variabilă convenabilă, este timpul să facem ceva cu ea. În cazul nostru, dorim să-l aruncăm într-un document text.

Pentru a face acest lucru, creați un nou bloc pentru TextEdit ca acesta:

[AppleScript]
spuneți aplicația "Safari"

--variabile
set windowCount la numărul de ferestre
setați docText la ""

--Repetați pentru fiecare fereastră
repetați cu x de la 1 la windowCount
setați tabcount la numărul de file în fereastra x

--Repetați pentru fiecare filă din fereastra curentă
repetați cu y de la 1 la tab

--Obțineți numele tabelului și adresa URL
setați tabName la numele tabelului y al ferestrei x
setați tabURL la adresa URL a filei y a ferestrei x

setați docText la docText & "" & tabName & "" & linefeed ca șir
repetați sfârșitul

repetați sfârșitul
sfarsitul spune

--Scrieți textul documentului
spuneți aplicația "TextEdit"
Activati
face un nou document
setați textul documentului frontal la docText
sfarsitul spune
[/ AppleScript]

În interiorul blocului TextEdit spune că am făcut trei lucruri: în primul rând, i-am spus cererea de a "activa", care o aduce pur și simplu în prim-plan, pentru a putea vedea roadele muncii tale.

Apoi, i-am spus lui TextEdit să creeze un nou document. În cele din urmă, am terminat scriptul prin setarea textului noului document la variabila care deține lista noastră de linkuri.


Încearcă

Cu asta, scriptul nostru este terminat! Dacă ați ținut pe această lungă, felicitări, ați scris deja mai mult AppleScript decât marea majoritate a utilizatorilor de Mac și vă puteți considera un membru de elită al comunității Mac nerd.

Pentru a încerca scriptul, asigurați-vă că aveți un Safari deschis cu mai multe file și mai multe ferestre setate pe diferite site-uri web. Odată ce ați configurat acest lucru, pur și simplu loviți butonul de redare în AppleScript pentru a vedea cum se întâmplă magia.

Bacsis: Încercați să salvați o versiune ca o aplicație, astfel încât să o puteți executa rapid ori de câte ori aveți nevoie de ea.


Depanare

Inevitabil, mulți dintre voi veți ajunge la acest punct și ați greșit. Ceva a mers prost, dar ce? Cel mai adesea, răspunsul va fi ceva la fel de simplu ca o greșeală. Sunteți sigur că ați introdus scriptul exact așa cum apare mai sus? AppleScript încearcă de obicei să vă sublinieze problema specifică, să urmeze sfaturile sale și să reintroducă linia problematică.

AppleScript încearcă de obicei să vă sublinieze problema specifică, să urmeze sfaturile sale și să reintroducă linia problematică.

Din păcate, este foarte posibil să introduceți totul corect și să primiți încă o eroare. Poate că există o problemă cu versiunea dvs. de Safari sau poate scriptul nu vă place paginile web pe care le-ați ales din motive necunoscute. Încercați să modificați lucrurile și să vedeți dacă puteți identifica problema.

Gestionarea erorilor este un subiect destul de profund pe care o voi acoperi în profunzime într-un articol viitor, pentru care acum aruncați o privire la articolul nostru despre tehnici avansate AppleScript pentru mai multe informații despre modul în care puteți modifica scriptul pentru a întreprinde acțiuni specifice atunci când o eroare este aruncată.

Concluzie

Te-am purtat în întregul proces de scriere a unui AppleScript pentru a genera o listă de linkuri din filele deschise din Safari. Acest lucru ar trebui să vă salveze multe probleme cu privire la acele mari proiecte de cercetare.

Sperăm că de-a lungul felului în care ați învățat multe lucruri minunate despre AppleScript și cum să abordați automatizarea sarcinilor simple, dar repetitive. Dacă aveți întrebări, nu ezitați să lăsați un comentariu mai jos sau să ne atașați pe Twitter.