Applescript: Tanka hem dagens aktiva diskussioner KLART!

Tråden skapades och har fått 1 svar. Det senaste inlägget skrevs .
1

Hejsan!

Nu är jag klar med mitt Applescript som jag pratade om i en annan tråd.

Scriptet tankar hem och sparar som en fil sidan "Dagens aktiva diskussioner". Om det finns mer än 50 aktiva diskussioner så laddas även nästa sida hem och det händer även om det finns mer än 100 diskussioner. På skrivbordet skapas mappen "Dagens aktiva" om den inte finns och i den mappen skapas sedan en mapp för varje dag, namnet på mappen är dagens datum.

Om man installerar något program i sin dator för att schemalägga körningen av scriptet (spara det som en applet först) så är det lämpligt att göra det ungefär fem i tolv eller så. Scriptet fungerar fint med iDo Script Scheduler (Freeware) och CronoTask men av någon lustig anledning så fungerar det inte med Cron. Jag har ingen aning om varför.

Varför?
Tja, jag ville lära mig Applescript och hittade på ett projekt som hade med det att göra. Sedan gillar jag inte att sidan "Dagens Aktiva Diskussioner" nollställs klockan 23.59.59. Då är det lätt att missa vad som sades dagen innan. (Det problemet kommer att vara löst i en ny version av programvaran för 99Mac forumen.) Detta är i bästa fall en tillfällig lösning. Men kul är det att det fungerar i alla fall!

Enjoy!

/Ola

P.S. Här är scriptet med tillräckligt med kommentarer för att man skall kunna hänga med hoppas jag:

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">(*
99MAC.COM LADDA HEM DAGENS AKTIVA DISKUSSIONER
----------------------------------------------------------------
Av: Intelligent Mammals HB, 2002-09-15
Ola@intelligentmammals.com
http://www.intelligentmammals.se/

Detta manus laddar hem webbsidan "Dagens Aktiva diskussioner" på det populära webbforumet
för Mac-användare 99mac.com. Manuset sparar sidan med dagens datum i en mapp med dagens
datum på inuti en mapp som skapas och döps till "Dagens aktiva" om den inte redan finns.
Om det finns fler än 50 aktiva diskussioner den dagen så laddas även en sid 2 hem
och om det finns fler än 100 aktiva diskussioner så laddas även en sid 3 hem och placeras
i samma mapp.

Här är adresserna för de olika sidorna på 99mac.com:
SID 1: http://99mac.com/forum/ultimatebb.cgi?ubb=get...
SID 2: http://99mac.com/forum/ultimatebb.cgi?ubb=get...
SID 3: http://99mac.com/forum/ultimatebb.cgi?ubb=get...

Om man kombinerar detta manus med tex programvaran "iDoScript Scheduler" eller "CronoTask"
som kan köra Applescript på bestämda tider så kan man ställa in sin dator på att fem i tolv ladda
hem dagens aktiva diskussioner och riskerar inte att missa något.

iDo Script Scheduler (freeware):
http://www.versiontracker.com/moreinfo.fcgi?i...

CronoTask (shareware $29):
http://www.versiontracker.com/moreinfo.fcgi?i...

Detta manus fungerar dock INTE med Cron av någon anledning.

Cron (freeware):
http://www.versiontracker.com/moreinfo.fcgi?i...

Jag har bara testat detta manus i Mac OS 9.2.2.

*)

on run
(*
Först kollar vi om det finns en mapp som heter Dagens aktiva på skrivbordet, om inte
skapas den.
*)
tell application "Finder"
-- activate
if (folder "Dagens Aktiva" of desktop exists) is not true then
set the DailyFolder to make new folder at desktop ¬
with properties {name:"Dagens Aktiva", comment:"Innehåller Dagens aktiva diskussioner på 99mac.com"}
else
set DailyFolder to "Macintosh HD:Desktop Folder:Dagens Aktiva:"
set DailyFolder to item DailyFolder as alias
end if

(*
Dags att skapa ett namn på mappen utifrån dagens datum
Först tar vi fram månaden i form av en siffra, om den är mindre än 10 så skall vi lägga
till en nolla framför. Detsamma gäller dagen.
Sedan sätter vi ihop detta till ett namn på en mapp och om den inte finns skapar vi den.
*)
set toDay to current date
set DailyMonth to month of toDay
set monthsOfTheYear to {"Januari", "Februari", "Mars", "April", "Maj", "Juni", ¬
"Juli", "Augusti", "September", "Oktober", "November", "December"}
set monthnr to 0
repeat with monthName in monthsOfTheYear
set monthnr to monthnr + 1
if (DailyMonth as text) = (monthName as text) then
exit repeat
end if
end repeat
if monthnr < 10 then
set monthnr to "0" & (monthnr as text)
end if
set daynumber to day of toDay
if daynumber < 10 then
set daynumber to "0" & (daynumber as text)
end if
set DailyDate to (year of toDay & "-" & (monthnr as text) & "-" & daynumber) as string
set destination to (DailyFolder as string) & (DailyDate as string)

(*
Kolla om den mappen finns, om inte, skapa den.
*)
if exists (folder destination) then
set destination to item destination as alias
else
make new folder at DailyFolder with properties {name:(DailyDate as string)}
set destination to result
end if

(*
Vi behöver även skapa en fil som vi kan ladda in sidan i, 1.html
Tydligen är det noga med att ange "as file specification".
*)
set filespec to "1.html"
set filespec to (destination as string) & filespec
if exists (file filespec) then
set filespec to item filespec as file specification
else
make new file at destination ¬
with properties {name:"1.html", creator type:"MSIE", file type:"TEXT"}
set filespec to result as file specification
end if
end tell

(*Dags att ladda hem sidan i mappen och spara den där.
*)
tell application "URL Access Scripting" --
-- activate
download "http://99mac.com/ubb/ultimatebb.php?ubb=get_daily" to filespec replacing yes with progress
end tell

(*
Det var första sidan det, om det under dagen har varit fler än 50 diskussioner så finns det ju en sida till
Nu är det dags att först kolla om det är så och sedan ladda hem den med.
Vi börjar med att läsa in sidan i en variabel och kollar vad det står efter frasen
"Totalt antal aktiva diskussioner".
*)

tell application "Finder"
-- activate
set fref to (open for access (filespec as alias)) -- Den här funktionen vill istället ha ett alias
set pagetext to (read fref as string from 1 to 6000) -- Vi läser in endast första 6000 tecknen.
close access fref
end tell

set position to offset of "Totalt antal aktiva diskussioner:" in pagetext
set position to position + 34 -- Antalet tecken i strängen + 1
set totalnumber to characters position thru (position + 2) of pagetext as text
if (characters 3 thru 3 of totalnumber as text) = " " then
set totalnumber to (characters 1 thru 2 of totalnumber as text) as integer
else
set totalnumber to (totalnumber as text) as integer
end if
set totalnumber to (totalnumber as text) as integer

(*
Så här långt har vi alltså en siffra i variabeln totalnumber, är den större än 50
finns det flera diskussioner att ladda hem, då skapar vi en ny fil för dessa och läser hem sidan.
*)

if totalnumber > 50 then
(*
Kolla om det finns en fil för sid 2, om inte så skapa den.
*)
tell application "Finder"
-- activate
set filespec to "2.html"
set filespec to (destination as string) & filespec
if exists (file filespec) then
set filespec to item filespec as file specification
else
make new file at destination ¬
with properties {name:"2.html", creator type:"MSIE", file type:"TEXT"}
set filespec to result as file specification
end if
end tell

(*
Dags att ladda hem sidan i mappen och spara den där.
*)
tell application "URL Access Scripting"
-- activate
download "http://99mac.com/forum/ultimatebb.cgi?ubb=get_daily;start_point=50" to filespec replacing yes with progress
end tell
end if

(*
Kanske finns det 50 diskussioner till?
*)
if totalnumber > 100 then
(*
Kolla om det finns en fil för sid 3, om inte så skapa den.
*)
tell application "Finder"
-- activate
set filespec to "3.html"
set filespec to (destination as string) & filespec
if exists (file filespec) then
set filespec to item filespec as file specification
else
make new file at destination ¬
with properties {name:"3.html", creator type:"MSIE", file type:"TEXT"}
set filespec to result as file specification
end if
end tell

(*
Dags att ladda hem sidan i mappen och spara den där.
*)
tell application "URL Access Scripting"
-- activate
download "http://99mac.com/forum/ultimatebb.cgi?ubb=get_daily;start_point=100" to filespec replacing yes with progress
end tell
end if

(*
Tuta av glädje!
*)
beep 3

end run</pre>

Jag har upptäckt att det var ett litet fel i mitt script som laddar hem sidorna med "Dagens aktiva diskussioner" så jag har skrivit en ny version som finns nedan.

Rättelser:
1. Funktionen get the month of... retunerar engelska namn på månader. Allt fungerade fint i september, men oktober gick inge bra.

2. Har lagt till att även sid 4 (dvs diskussion nr 150-200) laddas hem. För några dagar sedan såg jag att det var mer än 150 aktiva diskussioner men det händer inte så ofta.

Här är det nya scriptet, enjoy!

/Ola

Citat:

code:<pre style="font-size:x-small; font-family: monospace;">(*
99MAC.COM LADDA HEM DAGENS AKTIVA DISKUSSIONER
----------------------------------------------------------------
Av: Intelligent Mammals HB, 2002-10-03
Ola@intelligentmammals.com
http://www.intelligentmammals.se/

Ny version: Lade till sid 4 och rättade till ett problem med datum, upptäckte
att det på ett ställe returerneras engelska månader och inte svenska som jag trodde.
Det fungerade fint i september, men inte i oktober (october).

Detta manus laddar hem webbsidan "Dagens Aktiva diskussioner" på det populära webbforumet
för Mac-användare 99mac.com. Manuset sparar sidan med dagens datum i en mapp med dagens
datum på inuti en mapp som skapas och döps till "Dagens aktiva" om den inte redan finns.
Om det finns fler än 50 aktiva diskussioner den dagen så laddas även en sid 2 hem
och om det finns fler än 100 aktiva diskussioner så laddas även en sid 3 hem och finns det
flera än 150 så laddas även en sid 4 hem och placeras i samma mapp.

Här är adresserna för de olika sidorna på 99mac.com:
SID 1: http://99mac.com/forum/ultimatebb.cgi?ubb=get...
SID 2: http://99mac.com/forum/ultimatebb.cgi?ubb=get...
SID 3: http://99mac.com/forum/ultimatebb.cgi?ubb=get...
SID 4: http://99mac.com/forum/ultimatebb.cgi?ubb=get...

Om man kombinerar detta manus med tex programvaran "iDoScript Scheduler" eller "CronoTask"
som kan köra Applescript på bestämda tider så kan man ställa in sin dator på att fem i tolv ladda
hem dagens aktiva diskussioner och riskerar inte att missa något.

iDo Script Scheduler (freeware):
http://www.versiontracker.com/moreinfo.fcgi?i...

CronoTask (shareware $29):
http://www.versiontracker.com/moreinfo.fcgi?i...

Detta manus fungerar dock INTE med Cron av någon anledning.

Cron (freeware):
http://www.versiontracker.com/moreinfo.fcgi?i...

Jag har bara testat detta manus i Mac OS 9.2.2.

*)

on run
(*
Först kollar vi om det finns en mapp som heter Dagens aktiva på skrivbordet, om inte
skapas den.
*)
tell application "Finder"
if (folder "Dagens Aktiva" of desktop exists) is not true then
set the DailyFolder to make new folder at desktop ¬
with properties {name:"Dagens Aktiva", comment:"Innehåller Dagens aktiva diskussioner på 99mac.com"}
else
set DailyFolder to "Macintosh HD:Desktop Folder:Dagens Aktiva:"
set DailyFolder to item DailyFolder as alias
end if

(*
Dags att skapa ett namn på mappen utifrån dagens datum
Först tar vi fram månaden i form av en siffra, om den är mindre än 10 så skall vi lägga
till en nolla framför. Detsamma gäller dagen.
Sedan sätter vi ihop detta till ett namn på en mapp och om den inte finns skapar vi den.
*)
set toDay to current date
set DailyMonth to month of toDay -- Returnerar engelsk månad!
set monthsOfTheYear to {"January", "February", "March", "April", "May", "June", ¬
"July", "August", "September", "October", "November", "December"}
set monthnr to 0
repeat with monthName in monthsOfTheYear
set monthnr to monthnr + 1
if (DailyMonth as text) = (monthName as text) then
exit repeat
end if
end repeat
if monthnr < 10 then
set monthnr to "0" & (monthnr as text)
end if
set daynumber to day of toDay
if daynumber < 10 then
set daynumber to "0" & (daynumber as text)
end if
set DailyDate to (year of toDay & "-" & (monthnr as text) & "-" & daynumber) as string
set destination to (DailyFolder as string) & (DailyDate as string)

(*
Kolla om den mappen finns, om inte, skapa den.
*)
if exists (folder destination) then
set destination to item destination as alias
else
make new folder at DailyFolder with properties {name:(DailyDate as string)}
set destination to result
end if

(*
Vi behöver även skapa en fil som vi kan ladda in sidan i, 1.html
Tydligen är det noga med att ange "as file specification".
*)
set filespec to "1.html"
set filespec to (destination as string) & filespec
if exists (file filespec) then
set filespec to item filespec as file specification
else
make new file at destination ¬
with properties {name:"1.html", creator type:"MSIE", file type:"TEXT"}
set filespec to result as file specification
end if
end tell

(*Dags att ladda hem sidan i mappen och spara den där.
*)
tell application "URL Access Scripting" --
-- activate
download "http://99mac.com/ubb/ultimatebb.php?ubb=get_daily" to filespec replacing yes with progress
end tell

(*
Det var första sidan det, om det under dagen har varit fler än 50 diskussioner så finns det ju en sida till
Nu är det dags att först kolla om det är så och sedan ladda hem den med.
Vi börjar med att läsa in sidan i en variabel och kollar vad det står efter frasen
"Totalt antal aktiva diskussioner".
*)

tell application "Finder"
-- activate
set fref to (open for access (filespec as alias)) -- Den här funktionen vill istället ha ett alias
set pagetext to (read fref as string from 1 to 6000) -- Vi läser in endast första 6000 tecknen.
close access fref
end tell

set position to offset of "Totalt antal aktiva diskussioner:" in pagetext
set position to position + 34 -- Antalet tecken i strängen + 1
set totalnumber to characters position thru (position + 2) of pagetext as text
if (characters 3 thru 3 of totalnumber as text) = " " then
set totalnumber to (characters 1 thru 2 of totalnumber as text) as integer
else
set totalnumber to (totalnumber as text) as integer
end if
set totalnumber to (totalnumber as text) as integer

(*
Så här långt har vi alltså en siffra i variabeln totalnumber, är den större än 50
finns det flera diskussioner att ladda hem, då skapar vi en ny fil för dessa och läser hem sidan.
*)

if totalnumber > 50 then
(*
Kolla om det finns en fil för sid 2, om inte så skapa den.
*)
tell application "Finder"
-- activate
set filespec to "2.html"
set filespec to (destination as string) & filespec
if exists (file filespec) then
set filespec to item filespec as file specification
else
make new file at destination ¬
with properties {name:"2.html", creator type:"MSIE", file type:"TEXT"}
set filespec to result as file specification
end if
end tell

(*
Dags att ladda hem sidan i mappen och spara den där.
*)
tell application "URL Access Scripting"
-- activate
download "http://99mac.com/forum/ultimatebb.cgi?ubb=get_daily;start_point=50" to filespec replacing yes with progress
end tell
end if

(*
Kanske finns det 50 diskussioner till?
*)
if totalnumber > 100 then
(*
Kolla om det finns en fil för sid 3, om inte så skapa den.
*)
tell application "Finder"
-- activate
set filespec to "3.html"
set filespec to (destination as string) & filespec
if exists (file filespec) then
set filespec to item filespec as file specification
else
make new file at destination ¬
with properties {name:"3.html", creator type:"MSIE", file type:"TEXT"}
set filespec to result as file specification
end if
end tell

(*
Dags att ladda hem sidan i mappen och spara den där.
*)
tell application "URL Access Scripting"
-- activate
download "http://99mac.com/forum/ultimatebb.cgi?ubb=get_daily;start_point=100" to filespec replacing yes with progress
end tell
end if

(*
Kanske finns det 50 diskussioner till?
*)
if totalnumber > 150 then
(*
Kolla om det finns en fil för sid 4, om inte så skapa den.
*)
tell application "Finder"
-- activate
set filespec to "4.html"
set filespec to (destination as string) & filespec
if exists (file filespec) then
set filespec to item filespec as file specification
else
make new file at destination ¬
with properties {name:"4.html", creator type:"MSIE", file type:"TEXT"}
set filespec to result as file specification
end if
end tell

(*
Dags att ladda hem sidan i mappen och spara den där.
*)
tell application "URL Access Scripting"
-- activate
download "http://99mac.com/forum/ultimatebb.cgi?ubb=get_daily;start_point=100" to filespec replacing yes with progress
end tell
end if

(*
Tuta av glädje!
*)
beep 3

end run
</pre>

1
Bevaka tråden