1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Entfernungsabfrage per Postleitzahl

Dieses Thema im Forum "AppleScript" wurde erstellt von MRSOEREN, 27.01.07.

  1. MRSOEREN

    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
     
  2. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    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
     
  3. MRSOEREN

    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
     

Diese Seite empfehlen