Menghasilkan daftar Safari terbuka tab dengan AppleScript
() translation by (you can also view the original English article)
Apakah Anda seorang blogger yang bekerja pada sebuah roundup atau mahasiswa melakukan riset, Anda mungkin telah lari ke perlu membuat daftar situs web yang didasarkan pada tab Safari saat ini terbuka. Mari kita belajar bagaimana menulis AppleScript yang akan menangani proses ini untuk kita.



Contoh dari apa yang harus output script didasarkan pada tab yang terbuka di Safari.
Apa yang kita harapkan akan belajar
Script yang kita akan menulis benar-benar cukup sederhana sehingga jika Anda baru saja akan memulai dengan AppleScript, ini adalah proyek yang sempurna untuk memotong gigi Anda pada.
Apakah Anda benar-benar perlu alat yang akan membuat daftar tab Safari tidak relevan. Penting di sini adalah untuk belajar dari bagaimana kita mendekati tugas ini.
Penting di sini adalah untuk belajar dari bagaimana kita mendekati tugas ini.
Kita akan memukul pada sejumlah AppleScript konstruksi yang sangat penting dalam perjalanan Anda untuk menjadi otomatisasi pro: variabel, "Ulangi dengan" loop, bekerja dengan string, melarikan diri karakter dan banyak lagi.
Langkah 1. Membuat algoritma
Hal pertama yang Anda ingin lakukan ketika bekerja dengan setiap proyek pemrograman adalah melihat jika Anda dapat membuat sketsa sebuah algoritma. Kata itu terdengar cukup menakutkan tapi benar-benar itu hanyalah cara mewah untuk mengatakan bahwa kita perlu untuk mengetahui langkah-langkah apa yang akan kita lakukan.
Hal ini hanyalah cara mewah untuk mengatakan bahwa kita perlu untuk mengetahui langkah-langkah apa yang akan kita lakukan.
Untuk membuat sebuah algoritma untuk proyek kami, kita harus memiliki dasar pemahaman dua hal: tujuan utama kami dan langkah-langkah yang diperlukan untuk mencapai itu. Bagian kedua sedikit rumit karena itu tidak memerlukan pengetahuan khusus tentang cara pendekatan masalah dari perspektif pemrograman, yang mungkin atau mungkin tidak intuitif tergantung pada cara otak bekerja Anda.
Tujuan
Pertama mari kita menganalisis tujuan kami, apa yang kita ingin capai? Hasil akhir yang saya ingin menembak untuk adalah dokumen TextEdit yang berisi daftar tab yang terbuka di Safari. Setiap tab harus diformat sebagai tautan HTML dengan judul tab diatur ke teks link, seperti ini:
1 |
<a href="www.siteurl.com">Tab Title Here</a> |
Proses
Dengan tujuan ini dalam pikiran, kita dapat mulai membuat sketsa algoritma kami berpikir melalui proses-proses yang perlu terjadi bagi kita untuk mencapai tujuan. Pada titik ini, jangan khawatir tentang kesempurnaan. Kami mental akan memperbaiki proses ini karena kita menemukan tantangan dalam proses pengkodean, ini hanya untuk membantu kami mendapatkan merasakan apa yang script kami akan terlihat seperti.
- Menghitung jumlah Safari windows
- Menghitung jumlah tab dalam setiap jendela
- Membuat lingkaran itu berjalan melalui setiap tab setiap jendela
- Ambil nama tab saat ini
- Mengambil URL dari tab saat ini
- Menyimpan tab nama, URL dan teks yang diinginkan lainnya dalam variabel
- Buka TextEdit
- Membuat dokumen baru
- Menetapkan teks dari dokumen yang baru untuk variabel yang mengandung string kami informasi
Langkah 2. Membuat Safari memberitahu blok
Sekarang bahwa kita telah memiliki garisbesar kita dasar langkah-langkah yang kita akan memerlukan, saatnya untuk melompat ke dalam pengkodean. Pertama beberapa langkah dalam algoritma kami semua harus dilakukan dengan Safari, jadi hal pertama yang perlu kita lakukan dalam script kami adalah membuat blok katakan untuk Safari.
[applescript]
Kirim aplikasi "Safari"
akhir memberitahu
[/applescript]
Memberitahu blok bagaimana kami menargetkan siapa itu adalah bahwa kita berbicara dengan script kami, dalam hal ini aplikasi Safari.
Tip: Jangan lupa tutup blok katakan dengan "akhir memberitahu", skrip akan melemparkan kesalahan tanpa ini.
Langkah 3. Membuat variabel awal
Salah satu hal pertama yang saya ingin lakukan di setiap script adalah membuat setiap variabel yang aku tahu aku butuh. Ini membantu mengatur panggung untuk sisa script dan membuat hal-hal yang terorganisir.
Pada titik ini, aku tahu bahwa aku akan perlu untuk mengatur tiga variabel yang berbeda: satu untuk menghitung jendela, satu untuk menghitung tab, dan satu untuk teks dokumen yang dihasilkan.
Tab menghitung variabel perlu memperbarui kami siklus melalui jendela, sehingga yang perlu diulang dalam loop, tetapi yang lain kita bisa mengurus sekarang.
[applescript]
Kirim aplikasi "Safari"
--Variabel
mengatur windowCount jumlah windows
mengatur docText ""
akhir memberitahu
[/applescript]
Pengaturan jendela Count
Setelah komentar, baris pertama dari kode menciptakan sebuah variabel yang disebut "windowCount". Perhatikan bahwa ini sangat deskriptif, bukan generik seperti "myVariable". Selalu mencoba untuk nama variabel Anda sesuatu yang berguna sehingga pembacaan skrip tetap tinggi.
AppleScript's perintah yang sering sangat dekat dengan bahasa Inggris, sehingga bahasa sangat mudah bagi pemula untuk mengambil dengan cepat.
Sintaks untuk menghitung jendela super sederhana: set (variabel) ke nomor Windows. AppleScript's perintah yang sering sangat dekat dengan bahasa Inggris, sehingga bahasa sangat mudah bagi pemula untuk mengambil dengan cepat.
DocText variabel
Bagian yang aneh tentang kode di atas adalah bahwa saya telah membuat sebuah variabel string kosong, mengapa saya melakukan ini? Alasan akan lebih jelas nanti, tapi pada dasarnya ulangi kami akan pergi melalui dan menambahkan sesuatu ke ini setiap waktu dan kami hanya membutuhkan tempat untuk memulai. Anda tidak dapat menambahkan sesuatu ke variabel yang tidak ada!
Langkah 4. Blok ulangi pertama
Untuk menarik dari tujuan kami, kita akan membutuhkan dua blok berulang. Logika di balik ini lebih mudah untuk membungkus pikiran Anda di sekitar jika Anda bekerja dari dalam ke luar.
Logika di balik ini lebih mudah untuk membungkus pikiran Anda di sekitar jika Anda bekerja dari dalam ke luar.
Tujuan kami adalah untuk mengambil judul dan URL dari tab, kemudian ulangi untuk setiap tab (ulangi blok). Kuncinya adalah meskipun bahwa mungkin ada lebih dari satu jendela terbuka sehingga kami perlu Ulangi proses untuk setiap jendela (ulangi blok).
Sekali lagi, ini berpikir proses ke luar untuk bagaimana kita harus bekerja, jadi kita akan mulai dengan blok ulangi "setiap jendela".
[applescript]
Kirim aplikasi "Safari"
--Variabel
mengatur windowCount jumlah windows
mengatur docText ""
-Ulangi untuk setiap jendela
Ulangi dengan x 1 untuk windowCount
mengatur mengandung tabCount jumlah tab di jendela x
akhir ulangi
akhir memberitahu
[/applescript]
Ulangi dengan
Sederhana ulangi blok mungkin mengatakan sesuatu seperti "ulangi 5 kali", tapi kami telah melakukan sesuatu yang sedikit lebih rumit di sini. Membangun "Ulangi dengan" memungkinkan kita untuk mengatur variabel sengaja generik (x) yang akan bertambah setiap kali blok ulangi dijalankan.
Untuk pekerjaan ini, kita perlu memberitahu script kami mulai dan berhenti poin untuk x sebagai siklus melalui iterasi yang. Apa yang saya lakukan adalah memberitahu AppleScript untuk memulai x 1, kemudian meningkat ini sampai hits nilai sama jumlah jendela yang terbuka, dinyatakan sebagai variabel yang kami mendirikan sebelum.
Saya menggunakan membangun ini karena itu membuat blok ulangi kami sangat serbaguna.
Saya menggunakan membangun ini karena itu membuat blok ulangi kami sangat serbaguna. Jika script menghitung empat windows, blok berulang akan menjalankan empat kali, jika itu menghitung lima puluh, blok akan menjalankan 50 kali.
Menghitung tab
Selanjutnya, saya pada dasarnya mengulangi proses yang kita digunakan sebelumnya untuk menghitung jendela untuk menetapkan variabel jumlah tab di jendela aktif.
Untuk tarik ini meskipun, saya harus menarik dalam variabel x. Ingat bahwa variabel ini akan meningkat setiap kali blok ulangi dijalankan. Jadi pertama kali melalui, kita akan menghitung jumlah tab di jendela satu, untuk kedua kalinya melalui, kami akan menghitung jumlah tab dalam jendela dua, dll.
Langkah 5. Kedua mengulang blok
Sekarang bahwa kita memiliki blok berulang mengatur yang akan melalui setiap jendela, kita perlu untuk memasukkan blok ulangi lain dalam bahwa untuk melihat setiap tab. Dua bersama-sama akan mampu melumpuhkan setiap tab setiap jendela.
Sementara kita di sini, kami juga akan membuat beberapa variabel untuk langkah berikutnya.
[applescript]
Kirim aplikasi "Safari"
--Variabel
mengatur windowCount jumlah windows
mengatur docText ""
-Ulangi untuk setiap jendela
Ulangi dengan x 1 untuk windowCount
mengatur mengandung tabCount jumlah tab di jendela x
-Ulangi untuk setiap Tab di jendela aktif
Ulangi dengan y 1 untuk mengandung tabCount
--Mendapatkan nama Tab & URL
menetapkan tabName nama tab y jendela x
mengatur tabURL ke URL tab y jendela x
akhir ulangi
akhir ulangi
akhir memberitahu
[/applescript]
Ulangi untuk setiap Tab di jendela aktif
Seperti yang Anda lihat, blok ulangi ini menggunakan sintaks mirip ke apa yang kita lihat sebelumnya. Kami sudah menghitung jumlah tab di langkah sebelumnya sehingga kami mengatur blok ulangi untuk pergi dari 1 untuk mengandung tabCount, menggunakan y variabel incrementing generik.
Ambil nama Tab & URL
Untuk menyelesaikan langkah ini, kami memulai dua variabel. Sintaks ini hampir identik, satu-satunya meraih nama tab saat ini dan yang lain meraih URL. Saya menemukan sintaks khusus untuk perintah-perintah ini dalam kamus Safari AppleScript.
Perhatikan bahwa, untuk Ambil nama dan URL tab saat ini, kami hanya menggunakan x dan y variabel yang kenaikan setiap kali blok ulangi dijalankan. Jadi pertama kalinya kita ambil nama dan URL tab satu jendela satu, kemudian tab dua jendela, maka mungkin tab dari jendela dua, dll.
Langkah 6. Mengisi docText String
Ingat bahwa variabel kosong docText yang kita buat sebelumnya? Sekarang kita akan mengisinya dengan teks yang kita inginkan untuk setiap entri dalam daftar kami. Setiap kali blok ulangi berjalan, judul dan URL dari tab saat ini akan ditambahkan ke variabel yang menggunakan format HTML yang kita dijelaskan di atas.
Kode untuk ini adalah sintaks yang paling rumit yang kita jumpai sejauh, lihat di bawah ini dan kemudian aku akan berjalan Anda melalui bagaimana semuanya bekerja.
[applescript]
Kirim aplikasi "Safari"
--Variabel
mengatur windowCount jumlah windows
mengatur docText ""
-Ulangi untuk setiap jendela
Ulangi dengan x 1 untuk windowCount
mengatur mengandung tabCount jumlah tab di jendela x
-Ulangi untuk setiap Tab di jendela aktif
Ulangi dengan y 1 untuk mengandung tabCount
--Mendapatkan nama Tab & URL
menetapkan tabName nama tab y jendela x
mengatur tabURL ke URL tab y jendela x
menetapkan docText untuk docText & ¬
"< href =" & "\" "& ¬
tabURL & "\" > "& ¬
tabName & ¬
"" & ¬
linefeed sebagai string
akhir ulangi
akhir ulangi
akhir memberitahu
[/applescript]
Rangkaian
Hal pertama yang perlu Anda ketahui di sini adalah bahwa rangkaian (menempatkan hal-hal bersama-sama) di AppleScript ditangani melalui ampersand. Dalam contoh di atas, saya ingin menambahkan sekelompok hal yang berbeda untuk variabel setiap kali, jadi saya menggunakan ampersand untuk menghubungkan semua potongan bersama-sama.
Menambahkan variabel
Perhatikan bahwa saya menetapkan variabel docText untuk "docText &..." sekelompok hal-hal lain. Mengapa akan menetapkan variabel untuk dirinya sendiri? Apa yang ini adalah melakukan mengatakan AppleScript yang saya inginkan untuk menetapkan variabel docText ke semua yang sudah disimpan ditambah beberapa hal lain.
Pada akhir, variabel ini akan berisi seluruh isi dari apa yang akan dimasukkan ke dalam dokumen TextEdit kami.
Dengan cara ini, setiap kali blok ulangi dijalankan melalui sekali lagi, saya menambahkan ke variabel ini dan membiarkannya tumbuh daripada menggantikan isinya. Pada akhir, variabel ini akan berisi seluruh isi dari apa yang akan dimasukkan ke dalam dokumen TextEdit kami.
Jeda baris dan Linefeeds
Ada dua bentuk yang berbeda dari jeda baris kode diatas. Yang pertama adalah serangkaian jeda baris dangkal yang saya dimasukkan ke dalam kode saya dalam upaya untuk membuatnya sedikit lebih mudah dibaca. Aku ingin membuat jelas bahwa beberapa bagian yang berbeda sedang ditambahkan ke variabel secara individual.
Simbol "¬" dapat diketik di AppleScript dengan pilihan + kembali dan menunjukkan bahwa baris istirahat adalah hanya satu visual dan tidak boleh faktor ke bagaimana kode dijalankan.
Pada kenyataannya, Semua ini adalah satu baris kode, yang saya biasanya akan menulis sebagai berikut:
[applescript]
menetapkan docText untuk docText & "<a href=" & " \""="" &="" taburl="" &="" "\"="">" & tabName & "</a>" & linefeed sebagai string
[/applescript]
Pemberitahuan di dekat akhir baris kode ini adalah kata "linefeed". Tidak seperti jeda baris dangkal di atas, ini merupakan sesuatu yang saya benar-benar ingin ditambahkan ke variabel. Pada akhir setiap item baris, aku memasukkan linefeed sehingga item daftar berikutnya akan dimulai pada baris baru.
String & melarikan diri karakter
Hal aneh tentang teks HTML yang kita mencoba untuk memasukkan adalah bahwa hal itu berisi tanda kutip, yang sebenarnya digunakan oleh AppleScript untuk menunjukkan awal dan akhir dari string seperti:
[applescript]
menetapkan myString "Sendok tikus busuk pondok"
[/applescript]
Di sini kita memulai sebuah variabel dan mengisinya dengan beberapa teks. Teks ini dikelilingi oleh tanda kutip dan memberitahu AppleScript yang variabel dari tipe string.
Jadi jika AppleScript menggunakan tanda kutip untuk mengelilingi string, bagaimana kita menyimpan kutipan sebagai bagian dari string? Jawabannya adalah untuk "melarikan diri" karakter kutipan dengan tanda garis miring terbalik seperti:
[applescript]
mengatur myString "/" sendok tikus busuk hut / ""
[/applescript]
Dalam contoh pertama, isi dari variabel adalah sebagai berikut: sendok tikus busuk hut (disimpan tanpa tanda kutip). Dalam contoh kedua, variabel sebenarnya terdapat serangkaian tanda kutip: "Sendok tikus busuk hut".
Puting ini semua bersama
Mengingat semua informasi yang kami hanya belajar, berikut adalah potongan individu yang sedang dimasukkan ke variabel dan terjebak bersama kami.
- < href = "
- tabURL
- ">
- tabName
- </a>
- linefeed
Ketika semua item ini disatukan dan script diulang untuk setiap tab dalam jendela setiap, kita harus memiliki daftar yang diformat persis seperti tujuan yang kami ditetapkan di awal.
1 |
<a href="www.siteurlone.com">Tab One Title Here</a> |
2 |
<a href="www.siteurltwo.com">Tab Two Title Here</a> |
3 |
<a href="www.siteurlthree.com">Tab Three Title Here</a> |
Langkah 7. Membuat dokumen teks
Sekarang bahwa kita memiliki semua informasi ini disimpan ke dalam satu variabel yang nyaman, saatnya untuk melakukan sesuatu dengan itu. Dalam kasus kami, kami ingin membuangnya ke dalam dokumen teks.
Untuk melakukan ini, membuat baru tell blok untuk TextEdit seperti:
[applescript]
Kirim aplikasi "Safari"
--Variabel
mengatur windowCount jumlah windows
mengatur docText ""
-Ulangi untuk setiap jendela
Ulangi dengan x 1 untuk windowCount
mengatur mengandung tabcount jumlah tab di jendela x
-Ulangi untuk setiap Tab di jendela aktif
Ulangi dengan y 1 untuk mengandung tabcount
--Mendapatkan nama Tab & URL
menetapkan tabName nama tab y jendela x
mengatur tabURL ke URL tab y jendela x
menetapkan docText untuk docText & "<a href=" & " \""="" &="" taburl="" &="" "\"="">" & tabName & "</a>" & linefeed sebagai string
akhir ulangi
akhir ulangi
akhir memberitahu
--Menulis dokumen teks
Kirim aplikasi "TextEdit"
Aktifkan
membuat dokumen baru
menetapkan teks dari dokumen tamu untuk docText
akhir memberitahu
[/applescript]
Di dalam TextEdit memberitahu blok aku sudah melakukan tiga hal: pertama, saya diberitahu aplikasi untuk "Aktifkan," yang hanya membawa ke latar depan sehingga Anda dapat melihat hasil kerja Anda.
Selanjutnya, saya diberitahu TextEdit untuk membuat dokumen baru. Akhirnya, saya akhirnya skrip dengan menyetel teks dari dokumen yang baru untuk variabel yang memegang daftar links.
Mencobanya
Dengan itu, script kami selesai! Jika Anda telah diadakan di Selamat lama, ini, Anda sudah menulis lebih AppleScript daripada mayoritas pengguna Mac dan dapat menganggap diri Anda anggota elite nerd Mac masyarakat.
Untuk mencoba skrip, pastikan bahwa Anda memiliki Safari membuka dengan beberapa tab dan beberapa windows ditetapkan ke berbagai situs. Sekali Anda telah menyiapkan ini, cukup tekan tombol play di AppleScript untuk melihat keajaiban terjadi.
Tip: Mencoba menyimpan versi sebagai aplikasi sehingga Anda dapat dengan cepat berjalan setiap kali Anda membutuhkannya.
Pemecahan masalah
Tak pelak lagi, banyak dari Anda akan mencapai titik ini dan memukul kesalahan. Sesuatu yang tidak salah, tapi apa? Paling sering, jawabannya akan menjadi sesuatu yang sederhana seperti salah ketik. Apakah Anda yakin Anda memasukkan script persis seperti yang tampak di atas? AppleScript biasanya mencoba untuk menunjukkan masalah spesifik Anda, mengikuti nasihat dan ketik ulang baris yang bermasalah.
AppleScript biasanya mencoba untuk menunjukkan masalah spesifik Anda, mengikuti nasihat dan ketik ulang baris yang bermasalah.
Sayangnya, sangat mungkin bahwa Anda memasukkan segalanya dengan benar dan masih menerima kesalahan. Mungkin ada masalah dengan versi Safari Anda atau mungkin script tidak seperti halaman web yang Anda pilih untuk beberapa alasan tidak diketahui. Cobalah untuk mengubah segalanya dan Lihat jika Anda dapat menunjukkan masalah.
Penanganan kesalahan adalah topik yang cukup mendalam bahwa saya akan membahas secara mendalam dalam artikel yang akan datang, untuk sekarang coba lihat artikel kami tentang teknik Advanced AppleScript untuk informasi lebih lanjut tentang bagaimana Anda dapat memodifikasi script untuk mengambil tindakan tertentu ketika error dilemparkan.
Kesimpulan
Aku hanya berjalan Anda melalui proses selesai menulis AppleScript untuk menghasilkan daftar link dari tab terbuka di Safari. Ini harus menghemat banyak kesulitan di proyek penelitian besar tersebut.
Mudah-mudahan sepanjang jalan Anda belajar banyak hal besar mengenai AppleScript dan cara pendekatan mengotomatisasi tugas-tugas yang sederhana tetapi berulang. Jika Anda memiliki pertanyaan, jangan ragu untuk meninggalkan komentar di bawah atau memukul kami di Twitter.