Applescript - Quellcode für html Bildergalerie erzeugen

Der Igel

Neues Mitglied
Thread Starter
Dabei seit
07.09.2012
Beiträge
8
Reaktionspunkte
0
Hallo zusammen,

ich hoffe ich bin hier richtig und ihr könnt mir weiterhelfen.
Ich würde gerne mit Hilfe eines Applescripts den Quellcode für eine html Bildergalerie erzeugen, sprich:

1. Einen Ordner mit Bildern auswählen
2. Für jedes Bild in dem Ordner eine html Zeile in eine Datei schreiben, die wie folgt aussieht:

Code:
<div class="single">
<a href=" variabler Pfad + 1.Dateiname" rel="lightbox[ Variable ]" title=" 2. Variable "><img src=" variabler Pfad + Dateiname " alt=" 2. Variable"></a>
</div>

Irgendwie muss das doch zu schaffen sein, oder?
Also einen Ordner bekomme ich ja schon mal geöffnet und auch die Namen aller Dateien darin ausgelesen, aber dann ...

Ich hoffe ihr könnt mir weiterhelfen.

Gruß
 
Hallo,

kann mir denn wirklich keiner bei meinem Problem behilflich sein?
Hier mal mein Script soweit ich es hinbekommen habe. Wie gesagt, es scheitert an der Ausgabe des Textes:

Code:
tell application "Finder"
	set meinOrdner to choose folder with prompt "Ordner auswählen"
	set speicherplatz to choose folder with prompt "Bildpfad auswählen"
	set galeriename to display dialog "Name für die Galerie (rel=lightbox[ * ]" default answer "Galerie Name"
	set alttext to display dialog "Alternativtext für die Bilder" default answer "Alternativtext"
	
	set filelist to name of every file of folder meinOrdner
	
end tell

Gruß
Der Igel

PS.: Kann man Beiträge gar nicht editieren oder bin ich dazu auch nur zu dusselig?
 
Habe mal ein Grundgerüst gebaut.
Wenn ich das richtig sehe, brauchst du außer »meinOrdner“ imd »speicherplatz« noch ein »server_root«, um den eigentlichen Pfad zu berechnen.

Ich habe im Finder die URL Property der Dateien benutzt, weil die schon mal eine Umwandlung wie Leerzeichen zu %20 machen.

Den Teil zum Galerienamen und deine weiteren Variablen habe ich ignoriert. Das soll hier nur ein Grundgerüst für den Anfang sein.

Code:
set meinOrdner to choose folder with prompt "Ordner auswählen"
set speicherplatz to choose folder with prompt "Bildpfad auswählen"
set server_root to choose folder with prompt "Server-Root auswählen"
--set galeriename to display dialog "Name für die Galerie (rel=lightbox[ * ]" default answer "Galerie Name"
--set alttext to display dialog "Alternativtext für die Bilder" default answer "Alternativtext"
tell application "Finder"
	set root_URL to URL of server_root
	set l to length of root_URL
	set speicherplatz_url to URL of speicherplatz
	set speicherplatz_url to text (l + 1) through -1 of speicherplatz_url
	set filelist to URL of every document file of folder meinOrdner
end tell
-- get URL compatible names
set URL_list to {}
set old_delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to "/"
repeat with J from 1 to count filelist
	set curr to item J of filelist
	set image_URL to speicherplatz_url & (text item -1 of curr)
	copy image_URL to end of URL_list
end repeat
set AppleScript's text item delimiters to old_delims

set result_strings to {}
repeat with curr in URL_list
	set s to "<div class=\"single\">
<a href=\"" & ¬
		curr & ¬
		"\" rel=\"lightbox[ Variable ]\" title=\" 2. Variable \"><img src=\"" & ¬
		curr & ¬
		"\" alt=\" 2. Variable\"></a>
</div>"
	copy s to end of result_strings
end repeat

set old_delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set html_code to result_strings as text
set AppleScript's text item delimiters to old_delims
html_code


Das Ergebnis ist dann so etwas wie:

Code:
<div class="single">
<a href="Desktop/Boot.png" rel="lightbox[ Variable ]" title=" 2. Variable "><img src="Desktop/Boot.png" alt=" 2. Variable"></a>
</div>
<div class="single">
<a href="Desktop/Kalk.png" rel="lightbox[ Variable ]" title=" 2. Variable "><img src="Desktop/Kalk.png" alt=" 2. Variable"></a>
</div>
<div class="single">
<a href="Desktop/Stairs_1.png" rel="lightbox[ Variable ]" title=" 2. Variable "><img src="Desktop/Stairs_1.png" alt=" 2. Variable"></a>
</div>
<div class="single">
<a href="Desktop/Stairs_2.png" rel="lightbox[ Variable ]" title=" 2. Variable "><img src="Desktop/Stairs_2.png" alt=" 2. Variable"></a>
</div>
<div class="single">
<a href="Desktop/Train_1.png" rel="lightbox[ Variable ]" title=" 2. Variable "><img src="Desktop/Train_1.png" alt=" 2. Variable"></a>
</div>
<div class="single">
<a href="Desktop/Train_2.png" rel="lightbox[ Variable ]" title=" 2. Variable "><img src="Desktop/Train_2.png" alt=" 2. Variable"></a>
</div>

Gruß, Jürgen
 
Hallo,

vielen Dank für deine Bemühungen : )
Ich habe dein Script natürlich direkt getestet und dabei sind mir zwei Dinge aufgefallen:
1. Ich bekomme relativ häufig folgenden Error angezeigt:
Code:
error "„text 34 thru -1 of \"file:///.file/id=6571367.4135230/\"“ kann nicht gelesen werden." number -1728 from text 34 thru -1 of "file:///.file/id=6571367.4135230/"

Hin und wieder kommt auch kein Error - je nachdem, welche Ordner ich auswähle. Allerdings bin ich noch nicht dahinter gekommen, wann er kommt und wann nicht.

Zur Ergänzung: Ich speichere die Bilder in Dropbox - wenn ich die Bilder schon alle in den Dropbox Ordner verschiebe ist der Pfad wo die Bilder herkommen und der Speicherort ja derselbe. Vereinfacht das die Sache?
Ich könnte auch den Pfad für den Link im html-Code per Prompt Eingabe selbst eintragen ( Ist eigentlich nur Foto/ *entsprechender Ordnername* / )

2.Wo erhältst du das Ergebnis? Bei mir im Script Editor enthält das Ergebnis (wenn es klappt) immer noch die Backslashes vor den Anführungszeichen.

Gruß
 
In der Beschreibung war ich vielleicht etwas knapp. »server_root» muss natürlich ein Ordner oberhalb von »speicherplatz« sein. Es geht nur darum, den Anfang vom kompletten Festplattenpfad, der nachher für den URL nicht interessiert, zu beseitigen. Wenn der Festplatten-URL zum Beispiel »file://localhost/Users/js/Documents/pix/train.png« lautet, willst du für den URL wahrscheinlich nur den Teil »/pix/train.png« haben. Wenn als »server_root« der eigene Dokumente-Ordner ausgewählt wird, wirft das Script den Teil »file://localhost/Users/js/Documents« weg. That’s all about this part. Wenn ein übergeordneter Ordner ausgewählt wurde, sollte der String nie zu kurz sein (was er bei deiner Fehlermeldung der Fall ist).

Dass man da eine Prüfung einbauen sollte, ist mir erst nach dem Posting eingefallen (»if offset of server_root in speicherplatz ≠ 1 then display dialog "Such Dir einen besseren Ordner aus ;-)"«.

Der Script Editor zeigt Strings in AppleScript-Syntax an, d.h. mit Backslashes. Das ist aber natürlich nur Anzeige. Ich hatte ein leeres TextWrangler-Fenster offen und hab noch die Zeilen
Code:
tell application "TextWrangler"
    set document 1 to html_code
end
benutzt. Andere Programme gehen natürlich auch. (All die Backslashes in der Variable s habe ich auch nicht getippt, sondern umgekehrt mit »text of window 1« erzeugt.) Wenn du »html_code« in eine Datei schreibst, sind die Backslashes auch weg.

Gruß, Jürgen
 
Ok, vielen Dank für die Aufklärung - das klingt einleuchtend.
Ich habe das ganze mal mit einigen Ordnern getestet und es funktioniert tatsächlich immer, außer wenn ich Bilder aus dem Dropbox Ordner wähle.
(Als »speicherplatz« wäre das »/Users/User/Documents/Dropbox/Public/Webseite/Fotos/Ordner_mit_Bildern« und als »server_root« eben »/Users/User/Documents/Dropbox/Public/Webseite«) Sollte der Logik nach ja eigentlich funktionieren wie bei anderen Ordnern auch.
Wäre jetzt auch kein riesiges Problem dann muss ich eben die Ordner noch im normalen Foto Ordner bei mir anlegen - da klappt es ja.

In der Textausgabe von TextWrangler sind die Backslashes wie gewollt weg :)
Aber irgendwas habe ich immer noch nicht richtig gemacht, denn in der Ausgabe stehen nicht die Datei Pfade sondern immer so etwas:
Code:
<div class="single">
<a href="/id=6571367.4222078" rel="lightbox[ Variable ]" title=" 2. Variable "><img src="/id=6571367.4222078" alt=" 2. Variable"></a>
</div>
Also id=/...

Gruß
Jan
 
Verstehe ich auf Anhieb auch nicht. Erkennt man in den »Antworten« unten im Script Editor, was falsch ist? Schreib auch mal an einigen Stellen ein »log« in das Script. z.B. »log "Wert von l: " & l« nach der Zeile, in der die Variable l definiert wird. Damit kann man sich an das Problem meistens heran tasten.

Spontan eine andere Idee: Ist irgend ein »Ordner« bei dir in Wirklichkeit ein Alias oder Link? (Müsste man in »Antworten« auch erkennen.)


Gruß, Jürgen
 
Hallo,
ich habe gerade noch einmal intensiv ausprobiert und getestet.
Ich habe auch den Hinweis mit dem »log "Wert von l: " & l« befolgt und dabei ist mir aufgefallen:

Wenn ich normale Ordner im Finder auswähle (z.B. welche aus dem Bilder Ordner) dann ist der Wert eigentlich immer 32 - wähle ich aber aus dem Dropbox Ordner ist der Wert immer 33.
Also habe ich mir gedacht, ändere mal die Code Zeile
Code:
set speicherplatz_url to text (l + 1) through -1 of speicherplatz_url
um und addiere nicht auf l noch 1 drauf -> es hat funktioniert und es gab keinen Error
Jetzt weiß ich nur leider nicht wofür das + 1 eigentlich gedacht war? Die Endausgabe bleibt nämlich leider unverändert in der Form mit id=/...
 
So, da ich in der letzten Zeit keine Bildergalerien mehr online stellen musste habe ich auch eine Weile nicht mehr an dem Script gearbeitet. Gestern bin ich dann endlich mal dazu gekommen bin mir etwas mehr Zeit für das Script zu nehmen und jetzt funktioniert es auch so, wie es soll.
Die nächste Bildergalerie kann kommen :D

Hier das fertige Ergebnis, vielleicht sucht ja mal wer anderes so etwas und kann was damit anfangen:

Code:
set Bilder to choose folder with prompt "Ordner mit Bildern auswählen" default location "/Users"
set Thumbs to choose folder with prompt "Ordner mit Vorschaubildern auswählen" default location "/Users"
set speicherplatz to choose folder with prompt "Server-Bildpfad auswählen" default location "/Users"
set server_root to choose folder with prompt "Server-Root auswählen" default location "/Users"
set tempvar to display dialog "lightbox Name für die Galerie (rel=lightbox[ * ]" default answer "Galerie_Name"
set galeriename to text returned of tempvar
set tempvar to display dialog "Alternativtext für die Bilder" default answer "Alternativtext"
set alttext to text returned of tempvar

tell application "Finder"
	set root_URL to POSIX path of server_root
	set l to length of root_URL
	set speicherplatz_url to POSIX path of speicherplatz
	
	-- Bestimmen des relativen Speicherortes zum root
	set speicherplatz_url to text (l + 1) through -1 of speicherplatz_url
	set Bildliste to the name of every file of Bilder
	set Thumbliste to the name of every file of Thumbs
end tell

-- get URL compatible names
set result_strings to {}
set old_delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to "/"

repeat with J from 1 to count Thumbliste
	set currBild to item J of Bildliste
	set currThumb to item J of Thumbliste
	set Bild_URL to speicherplatz_url & (text item -1 of currBild)
	set Thumb_URL to speicherplatz_url & "thumbs/" & (text item -1 of currThumb)
	set s to "<div class=\"single\">
<a href=\"" & ¬
		Bild_URL & ¬
		"\" rel=\"lightbox[ " & galeriename & " ]\" title=\" " & alttext & " \"><img src=\"" & ¬
		Thumb_URL & ¬
		"\" alt=\" " & alttext & " \"></a>
</div>"
	copy s to end of result_strings
end repeat

set old_delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set html_code to result_strings as text
set AppleScript's text item delimiters to old_delims
html_code

-- Ausgabe in TextWrangler
tell application "TextWrangler"
	set document 1 to html_code
end tell

Die Ausgabe in TextWrangler habe ich noch etwas meinen Bedürfnissen angepasst, also noch den html Code hinzugefügt, der vor und nach der Galerie benötigt wird, so dass ich am Ende nur noch das Dokument speichern muss.

Verbesserungsvorschläge nehme ich natürlich gerne weiter entgegen.

Gruß
Jan
 
Ganz doofe Frage, aber wo soll das zum Einsatz kommen? HTML zeigt man ja in der Regel auf Servern und auf solch einem wäre wohl PHP »die« Wahl um HTML zu erzeugen.
 
Also eigentlich ganz einfach: Ich habe eine Homepage und damit ich den html Code für die Bildergalerie nicht von Hand schreiben muss gibt es dieses Script.
Ich wähle also die entsprechenden Ordner aus, gebe die benötigten Sachen ein und habe am Ende die fertige html Seite, die ich nur noch hochladen muss.
Da die ganze Homepage nur mit html, css und etwas javaScrip geschrieben ist finde ich das so die einfachste und bequemste Möglichkeit meine Bildergalerien zu erstellen - an denen sich auch nichts mehr ändern soll, wenn sie einmal erstellt sind.
 
Zurück
Oben Unten