• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Entfernungsabfrage per Postleitzahl

  • Ersteller MRSOEREN
  • Erstellt am

MRSOEREN

Gast
Ein schönen guten Tag,


für meine Diplomarbeit möchte ich von ca. 2000 Orten in Deutschland die Entfernung zu einem bestimmten Ort, z. B. Berlin, per Internetabfrage ermitteln. Um diese Abfrage aber nicht selbst durchführen zu müssen, würde ich gerne AppleScript nutzen.

Vermutlich habe ich mir als Anfänger in AppleScript gleich eine sehr heftige Aufgabe ausgesucht. Nach intensiver Studie von verschiedenen Büchern und Hilfemenüs bin ich zwar weiter gekommen, aber das Script funktioniert trotzdem noch nicht. (Siehe Script unten)

Das Endergebnis habe ich mir so vorgestellt:

In einer Excel Datei sind in Spalte A alle Postleitzahlen enthalten, zu denen die Entfernung abgefragt werden soll. Ich kopiere den Inhalt aus der Zelle, gehe dann auf die Webseite von OpenGeoDB (oder mapquest), trage dort den Startort und den Zielort (ist immer der selbe) ein und warte ca. 2 Sekunden bis die Anfrage bearbeitet ist.

Danach markiere ich die Entfernung in Kilometer und kopiere sie und gehe zurück in meine Excel-Datei und füge sie an der entsprechenden Stelle ein.

Ursprünglich wollte ich es so scripten, dass die Prozedur automatisch abgebrochen wird, wenn in Excel eine Zelle ohne Inhalt ist, aber das habe ich nicht hinbekommen.
Um dieses Problem zu umgehen habe ich eine Abfrage zuvor eingebaut, in die einfach nur die Anzahl der Abfragen eingetragen werden müssen.

Es wäre sehr schön, wenn mir jemand bei diesem Problem auf die Sprünge helfen könnte. Meine Kenntnisse reichen dafür einfach nicht aus.

Vielen Dank.

MRSOEREN

tell application "Microsoft Excel"
Activate
set userResponse to the text returned of (display dialog "Gib die Anzahl der Postleitzahlen ein!" default answer "0")
repeat with i from 0 to userResponse
«event misccopy» Cell ("A" & (i + 1)) of Sheet 1
tell Application "System Events"
tell process "Safari"
set frontmost to true
select text field 1 of group 10 of group 3 of group 1 of group 3 of UI element 1 of scroll area 1 of group 3 of window "MapQuest: Fahrtrouten"
click menu item 6 of menu 1 of menu bar item 4 of menu bar 1
end tell
tell process "Safari"
set value of text field 1 of group 9 of group 1 of group 1 of group 3 of UI element 1 of scroll area 1 of group 3 of window "MapQuest: Fahrtrouten" to "00000"
end tell
tell application "System Events"
delay [2]
end tell
tell process "Safari"
click button "Fahrtrouten zeigen" of group 2 of group 1 of group 3 of UI element 1 of scroll area 1 of group 3 of window "MapQuest: Fahrtrouten"
end tell
tell application "System Events"
delay [5]
end tell
tell process "Safari"
set frontmost to true
try
click at {504 + (32 div 2), 271 + (15 div 2)}
select static text
end try
end tell
tell process "Safari"
click menu item 5 of menu 1 of menu bar item 4 of menu bar 1
end tell
tell application "Microsoft Excel"
Activate
Select Cell ("B" & (i + 1)) of Sheet 1
Paste
end tell
end tell
end repeat
end tell
 

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Hi,

mein Vorschlag für die Webabfrage wäre, das nicht mit dem Browser sondern dem shellbefehl 'curl' zu machen. Da opengeodb das wesentlich einfachere Formular (Variablen mit get) hat, habe ich das genommen - hier ein Beispiel:

Code:
set mark to "Entfernung (Luftlinie)"

set {tid, text item delimiters} to {text item delimiters, mark}
set startPlz to "49324"
with timeout of 7200 seconds
	repeat with endPlz in {"76133", "02633", "49688", "68199", "76227", "87600"}
		set searchresult to quoted form of (do shell script "curl 'http://opengeodb.hoppe-media.com/examples/distance.php?ort1=" & startPlz & "&ort2=" & endPlz & "'")
		set entf to "not found"
		try
			set entf to word 22 of (text item 2 of searchresult)
		end try
		
		do shell script ("echo " & endPlz & tab & entf & " >> ~/results.txt")
	end repeat
end timeout
set text item delimiters to tid

das Ergebnis sieht so aus:

Code:
76133 355.97
02633 428.49
49688 70.9
68199 307.22
76227 358.29
87600 508.49

Das Script loopt durch eine Liste von Postleitzahlen und lädt für jede das HTML-Abfrageergebnis. In dem ermittelt es dann den Text ab "Entfernung (Luftlinie)" und nimmt davon das 22. Wort. Das ist die Angabe in km (sofern der Anbieter nix ändert). Die Ergebnisse schreibt es dann inkrementell in ein Textfile "results.txt" in deinem Userverzeichnis. Das kannst du ganz einfach in Excel reinladen (es ist Tab-delimited). Um das Scripten von Excel ganz zu umgehen könntest du einfach vorher die Postleitzahlen aus Excel in ein Textfile exportieren und in das Script reinladen:

Code:
set plzfile to choose file
set plzlist to paragraphs of (read plzfile)
repeat with endPlz in plzlist ...

Ich hoffe, das hilft dir weiter ...

Grüße,

Daisy
 

MRSOEREN

Gast
Hallo Daisy,

vielen Dank für Deine Hilfe. Das Script funtioniert einfach Spitze und wird mir die Arbeit wirklich sehr erleichtern.

Juhu.

MRSOEREN