17.01.2011 | 21:48
Evo mi je palo na pamet slijedeće, obzirom da svaka stranica foruma (od njih 2037) ima link "link&p=i" gdje je i brojač od 1 do 2037, spremiti svih tih 2037 linkova u tekstualnu datoteku što sam i napravio.
Ne moraš spremati linkove u datoteku, s obzirom da se mijenja samo sufix stringa. AppleScript rješenje je sljedeće - i prilično je prljavo:
set urlBase to "http://www.index.hr/forum/default.aspx?q=t&idf=65&idt=110115&p="
set fromPage to 1
set toPage to 2037
set currentPage to fromPage
tell application "Safari"
activate
repeat while (currentPage ≤ toPage)
set the clipboard to (currentPage as text)
set urlFinal to urlBase & currentPage
set URL of document 1 to urlFinal
delay 3
tell application "System Events"
tell process "Safari"
click (menu item "Save As…" of menu 1 of menu bar item "File" of menu bar 1)
delay 1
keystroke "v" using {command down}
click (button "Save" of sheet 1 of window 1)
end tell
end tell
set currentPage to currentPage + 1
end repeat
end tell
Prva 3 reda postavljaju varijable. Prvi red je URL, ali BEZ sufiksa koji označava stranicu. Sljedeća dva reda su oznake stranica (od koje i do koje). Postavio sam ih na aktualan raspon, ali preporučam ti da toPage smanjiš na, recimo, 2 dok budeš testirao skriptu.
Kad se uvjeriš da radi ono što ti treba, digni na 2037 i pusti ga da žvače - potrajat će.
currentPage pamti na kojoj smo stranici. Potom se obraćamo Safariju i aktiviramo ga. VAŽNO: prije pokretanja skripte QUITAJ Safari. Skripta će ga sama dignuti i to će biti garancija da prljavi dio koda (koji ide preko System Eventsa) radi ispravno (barem s aktualnim Safarijem).
Kreće petlja koje sa ponavlja za N stranica u rasponu od fromPage do toPage. U clipboard spremamo, kao tekst, broj aktualne stranice (currentPage). Potom generiramo URL (dodajemo sufiks baznom URLu). "set URL" se obraća Safariju i tjera ga da prikaže konkretan URL. Ovdje ujedno počinju problemi - AppleScript nema pametan način za provjeriti da li je Safari zahvatio sve potrebne podatke pa se rješenje svodi na čekanje X sekudi (ovdje konkretno 3 kao "delay 3" ), kako bi Safari imao 3 sekunde za skinuti, formatirati i prikazati stranicu. Ako imaš sporiju konekciju ili ako iz bilo kojeg razloga Safari ne može prikazati stranicu za 3 sekunde, povećaj ovaj "delay 3" na "delay 5", "delay 10" ili koliko god mu je vremena potrebno. I nadaj se da će odabrana brojka držati vodu za svih 2037 stranica.
Nakon što smo prikazali stranicu, emuliramo input od strane usera (jer je Safari vrlo ograničeno skriptabilan, kao i Preview aplikacija - mrmlj!). System Eventsima kažemo da klikću po Safariju. I to tako da prvo kliknu na "Save As..." pa pričekaju sekundu (jer se GUI mora iscrtati!). Fokus Save panela je na imenu pa u polje za ime fajla pejstamo sadržaj clipboarda (brojke koje odgovaraju rednom broju stranice na webu) - to radi ovaj "keystroke...". Nakon toga "klikćemo" na "Save".
Da bi ovo gore radilo moraš se pobrinuti za 2 sitnice: digni Safari i u njemu bilo koju stranicu. Odi na Save As. Odaberi Web Archive kao format za snimanje, odaberi GDJE će snimiti arhivu i snimi je. Te postavke (format i destinacija) će skripta koristiti kao default - snimat će web archive i u folder koji si odabrao u ovom koraku. To je najbrži način da sve sejvove potrpaš u željeni folder, a da ne zakompliciramo skriptu.
Petlja završava uvećavanjem brojača stranice.
E, da... još jedna bitna sitnica - da bi skriptanje GUIja radilo, moraš u System Preferences/Universal Access UKLJUČITI "Enable access for assistive devices". Moguće da je defaultno uključeno, ali svakako provjeri.
@Riba: vezano uz cURL - da, može se, ali to ne preporuča ni
cURLov FAQ.