• Swedish
  • English
Hem arrow Applescripts arrow Apple - URL Access arrow Sekventiell nedladdning av bilder
Sekventiell nedladdning av bilder PDF Utskrift E-post
Skrivet av Ola Andersson   
2008-07-27

Ännu ett fiffigt litet verktyg som är bra att ha till hands för när du behöver det är detta Applescript. Ibland så hittar du en webbsite med trevliga bilder och istället för att ladda hem dem en och en så kan du istället med det här Applescriptet ladda hem allihopa, i alla fall som de är döpta enligt en nummerserie. Andra typer av filer kan också laddas ner förstås. 

Scriptet utför sin magi med hjälp av URL Access Scripting i Mac OS X, en programvara som du kan instruera att ladda hem en fil från varsomhelst på internet, även med inloggning om du har behov av det.

Så här kan det se ut när Applescriptet ha körts. Notera kommenteren på den konstigt döpta foldern och även det konstiga namnet den har. 

Image 

Ladda hem scriptet här

Klicka här för att öppna den engelska versionen av detta script som ett nytt dokument i Manusredigeraren.

Scriptet kan också laddas hem från vårt filarkiv i form av en Zip-fil

Sekventiell nedladdning av bilder


(*
-------------------
LADDA HEM SEKVENSER AV BILDER
-------------------
Detta manus laddar hem en bildserie från valfri webbplats med numeriskt
döpta bildserier.

FUNKTIONER
----------------------------------------------------------------
* Manuset innehåller möjlighet att lägga in numret först eller sist i filnamnet. Exempel:

    Numret som prefix: 001_Bild.jpg
    Numret som suffix: Bild_001.jpg
    
* Man kan även styra antalet siffror i numret, om det skall vara tex 1, 01, 001, 0001 osv. Max nollor är sex stycken (lätt att ändra). Du kan behöva köra scriptet tre gånger för att ladda ner 1-9, 10-99 och 100-999 tex.

* Scriptet sparar de nedladde filerna i ett mappnamn på skrivbordet du anger i scriptet. Varje körning av scriptet skapar en ny mapp inuti den mappen med ett "batchnummer" så att man kan i samma mapp skilja på de olika försöken man gjort.

* Batchnummermappen får en kommentar som ser ut så här (för sortering och referens senare)
    2008-07-27 http://applescript.intelligentmammals.se/images/stories/
    applescripts/url_access_scripting/sequential_download/testimages/
    prefix: "image_" suffix: ".jpg" Numbers from 1 to 3 width: 2
    Example URL: http://applescript.intelligentmammals.se/images/stories/
    applescripts/url_access_scripting/sequential_download/testimages/image_01.jpg

INSTRUKTIONER
----------------------------------------------------------------
Ange i manuset följande saker:

1. URL'en (fram till filnamnet)
2. Första siffran i serien
3. Sista siffran i serien
4. Hur breda siffrorna skall vara
5. Namnet på mappen på skrivbordet. Finns den inte så skapas den.

Du kan testa med denna URL, men var snäll och överdriv inte. :)

http://applescript.intelligentmammals.se/images/stories/
applescripts/url_access_scripting/sequential_download/testimages/

I den mappen ligger dessa bilder, döpta på två sätt så du kan testa både att ha ett namn med ett prefix och ett med ett suffix.
01_image.jpg => prefix="" och suffix = "_image.jpg"
02_image.jpg
03_image.jpg
image_01.jpg => prefix="image_" och suffix = ".jpg"
image_02.jpg
image_03.jpg

*)


on run
    --URL'en: Fram till mappen bilderna ligger i. Tag med / på slutet.
    -- Exempel: http://www.domän.com/mapp/mapp/mapp/
    set dl_url to "http://applescript.intelligentmammals.se/images/stories/" & "applescripts/url_access_scripting/sequential_download/testimages/"
    
    -- NUMMERSERIEN, STARTNUMMER, SLUTNUMMER, ANTAL SIFFROR I NUMRET, PREFIX OCH SUFFIX
    set firstimage to 1
    set lastimage to 3
    set numberwidth to 2 -- antalet siffror i numret (dvs 2 ger "01", 3 ger "001", 4 ger "0001" osv. )
    set fileprefix to "image_" -- prefix kommer före numret.
    set filesuffix to ".jpg" -- suffix kommer efter numret, glöm inte filtypen, . och tre tecken.
    -- Exempel: Bild nr 7 med bredden tre siffror får namnet "prefix007suffix"
    
    -- MAPPEN: Denna mapp på skrivbordet kommer att skapas om den inte redan finns.
    set foldername to "Downloads" -- mapp på skrivbordet det lagras i.
    
    
    -- KOMMENTAR PÅ NYA MAPPEN? Dagens datum + URL blir bra.
    set y to year of (current date)
    set m to month of (current date)
    set d to day of (current date)
    set longnumberAsString to (y * 10000 + m * 100 + d) as string
    set nicedate to text 1 thru 4 of longnumberAsString & "-" & text 5 thru 6 of longnumberAsString & "-" & text 7 thru 8 of longnumberAsString
    --> "2008-07-20"
    set foldercomment to ((getNiceDate()) as text) & " " & dl_url & " prefix: \"" & fileprefix & "\" suffix: \"" & filesuffix & "\" Numbers from " & firstimage & " to " & lastimage & " width: " & numberwidth & " Example URL: " & (dl_url & fileprefix & rightPadding(firstimage, numberwidth) & filesuffix)
    
    (*
    HÄR SKAPAR VI MAPPARNA
    *)
    tell application "Finder"
        
        (*
        Först kollar vi om det finns en mapp på skrivbordet vi kan
        lagra i, annars skapar vi den...
        *)
        if (folder foldername of desktop exists) is not true then
            set the DownloadFolder to make new folder at desktop with properties {name:foldername}
        else
            set DownloadFolder to (desktop as string) & foldername
            set DownloadFolder to item DownloadFolder as alias
        end if
        
        
        (*
        Vi skapar även mappen med batchnumret inuti mappen, finns det redan en mapp med det numret, så plockar vi ett nytt batchnummer och försöker skapa den.
        *)
        
        repeat
            set batchnumber to batchnr() of me -- Hämta ett nytt batchnummer från subrutinen
            set batchnumberfolder to (batchnumber as string)
            -- Kolla om foldern med detta batchnummer redan finns, om den inte finns, skapa den och lämna repeaten, i annat fall, upprepa alltihopa.
            if not (exists (folder batchnumberfolder of DownloadFolder)) then
                make new folder at DownloadFolder with properties {name:batchnumberfolder, comment:foldercomment}
                set DownloadFolder to result
                -- Vi har skapat foldern nu, så vi lämnar repeaten.
                exit repeat
            end if
            -- Foldern fanns visst så vi kör repeaten igen.
        end repeat
        
    end tell
    
    
    (*
    HÄR LADDAR VI NER
    *)
    repeat with filenumber from firstimage to lastimage
        
        -- Skapa numret med en fiffig subrutin
        
        set imagenumber to rightPadding(filenumber, numberwidth)
        
        -- Skapa en URL till filen på filservern
        set download_url to dl_url & fileprefix & imagenumber & filesuffix
        
        -- Problem: Om filen vi försöker ladda ner har mer än 31 tecken totalt i filnamnet, dvs filprefix + nummer + filsuffix, så kommer den att få en filtyp som är .#0, vilket inte ser så snyggt ut. Det beror på att filespecification bara kan vara just 31 tecken. URL Access scripting förstår inte POSIX-sökvägar som kan ha längre filnamn, så man måste ladda hem med file specification eller skippa URL Access och ladda hem med något annat, tex Safari.
        -- Jag har valt att lösa problemet så att jag skapar ett kort namn och sedan döper jag om filen när den är nedladdad. Döpa om kommandot i Finder accepterar längre filnamn.
        
        -- Skapa sökväg till filen vi skall ladda ner
        tell application "Finder"
            if length of (fileprefix & imagenumber & filesuffix) > 31 then
                -- Vi behöver både ett kort och ett långt namn, vi beräknar 31 tecken av prefixet, minus längden av numret tex 1 eller 2 eller vaddetnuär - längden av filsuffixet. Det skall alltid ge filnamn om max => 31 tecken.
                set prefixlength to 31 - (length of (imagenumber as text)) - (length of filesuffix)
                set shortFilename to (characters 1 through prefixlength of fileprefix & imagenumber as text) & filesuffix
                set longFilename to fileprefix & imagenumber & filesuffix
            else
                -- Filnamnet är under 31 tecken eller kortare, vi använder det korta + sätter det långa till ""
                set shortFilename to fileprefix & imagenumber & filesuffix
                set longFilename to ""
            end if
            
            -- Skapa filspecifikationen
            set DownloadFolderAsText to ((DownloadFolder as text) & shortFilename)
            --> "Spiderman:Users:ola:Desktop:foldername:"
            set filespec to DownloadFolderAsText as file specification
            --> file "Spiderman:Users:ola:Desktop:foldername:filePrefixNUMBERfileSuffix"
            
        end tell
        
        -- Ladda hem filen till filspecifikationen.
        tell application "URL Access Scripting"
            try
                set downloadedFile to download download_url to filespec replacing yes with progress
            end try
        end tell
        
        -- Vi har skapat ett längre filnamn, så då skall vi byta namnet på filen nu.
        if longFilename is not "" then
            tell application "Finder"
                try
                    set name of downloadedFile to longFilename
                end try
            end tell
        end if
    end repeat
    
    
    -- Öppna mappen och visa resultatet
    tell application "Finder"
        activate
        open DownloadFolder
        set current view of Finder window 1 to list view
    end tell
    
end run



(*
-------------------
ON BATCHNR
-------------------
Returnerar en 12 tkn lång textsträng som består av slumpmässiga tecken. Används för att märka poster som hör
till samma import-tillfälle.
*)

on batchnr()
    set alphabet to "ABCDEFGHIJKLMNOPQRSTUVXYZ" & "0123456789" & "ABCDEFGHIJKLMNOPQRSTUVXYZ" & "0123456789"
    set batchnumber to ""
    repeat 12 times
        set batchnumber to batchnumber & some character of alphabet
    end repeat
    return batchnumber
end batchnr



(*
-------------------
HÄMTA DATUM I SVENSKT FORMAT
-------------------

*)
on getNiceDate()
    -- KOMMENTAR PÅ NYA MAPPEN? DAGENS DATUM BLIR BRA?
    set y to year of (current date)
    set m to month of (current date)
    set d to day of (current date)
    set longnumberAsString to (y * 10000 + m * 100 + d) as string
    set nicedate to text 1 thru 4 of longnumberAsString & "-" & text 5 thru 6 of longnumberAsString & "-" & text 7 thru 8 of longnumberAsString
    --> "2008-07-20"
    return nicedate
end getNiceDate


(*
-------------------
FYLL UT NUMRET MED NOLLOR FRÅN VÄNSTER
-------------------
Denna subrutin matar man med en siffra och hur bred siffra man vill ha tillbaka. Fattas det siffror i bredden så fylls siffran ut med nollor från vänster. Är siffran tex 123 och man vill ha bredden sex siffror så blir resultatet 000123.

*)

on rightPadding(TheNumber, TheWidth)
    set theString to "000000" & (TheNumber as text)
    set theLength to length of theString
    set startingCharacter to theLength - TheWidth + 1
    set thePaddedNumber to characters startingCharacter through theLength of theString as text
    return (thePaddedNumber)
end rightPadding


(*
-------------------
FYLL UT NUMRET MED NOLLOR FRÅN HÖGER
-------------------
Denna subrutin matar man med en siffra och hur bred siffra man vill ha tillbaka. Fattas det siffror i bredden så fylls siffran ut med nollor från höger. Är siffran tex 123 och man vill ha bredden sex siffror så blir resultatet 123000.

*)
on leftPadding(TheNumber, TheWidth)
    set theString to (TheNumber as text) & "000000"
    set theLength to length of theString
    set endingCharacter to TheWidth
    set thePaddedNumber to characters 1 through endingCharacter of theString as text
    return (thePaddedNumber)
end leftPadding

Senast uppdaterad ( 2008-07-27 )
 
Design by RocketTheme © 2005 - 2006 All Rights Reserved