Concloo LotusScript Essentials - Geocoding Showcase

Das Geocoding-Showcase ist ein kleines Beispiel wie empfangene Mails einfach ausgewertet und automatisch beantwortet werden können.
Der Agent ist so konfiguriert, dass das Skript nach dem Eingang einer Mail gestartet wird.
Nach dem Start des Skripts wird die Ansicht "Memo" geladen und alle Dokumente vom Ersten bis zum Letzten abgearbeitet.
In der Variable "von" wird die Mailadresse des Absenders und in der Variable "betreff" der Betrefftext der Mail zwischengespeichert.
Die Variable "url" enthält die API-Adresse von Google-Maps mit dem Betrefftext als abzufragende Adresse.
In die Variable "xml" wird die XML-Antwort von Google-Maps geladen.
Die Variablen "html" und "txt" enthalten den Antworttext als HTML-Mail und als Plain-Text-Mail.
Die Funktion "CNCL_SendMail" versendet an den Absender der eingegangenen Mail eine Multipart Mail mit HTML- und Plain-Text-Part.

Zum "Spielen/Testen" einfach eine Mail an die Adresse "showcase@concloo.de" senden und in den Betreff ein Adresse, ein Adressfragment
oder ein bekanntes Bauwerk (z.B. Eifelturm) eingeben.
Die Antwort enhält die geographische Länge und Breite sowie die vollständige formatierte Adresse. 
 
 
Option Public
Use "ConclooLSE"

' ********************************************
' * ConclooLSE Showcase - Geocoding per Mail *
' ********************************************

Sub Initialize
  On Error Goto errHandle

  Dim session As New NotesSession ' Neue NotesSession
  Dim mview As NotesView ' Variable der Ansicht aller eingegangenen Mails
  Dim mdoc As NotesDocument ' Variable des zu bearbeitenden Maildokuments
  Dim doc As NotesDocument ' Variable zum zwischenspeichern des zu löschenden Maildokuments
  Dim von As String ' Variable für Absender der eingegangenen Mail
  Dim betreff As String ' Variable für Betrefftext der eingegangenen Mail
  Dim html As String ' Variable für HTML-Mail
  Dim txt As String ' Variable für Plain-Text-Mail
  Dim xml As String ' Variable für XML-Datei, die die Google-API zurück gibt
  Dim lat As String ' Variable für die geographische Breite
  Dim lng As String ' Variable für die geographische Länge
  Dim adr As String ' Variable für die formatierte Adresse
  Dim url As String ' Variable für die Google-API-URL
  
  Set mview = session.CurrentDatabase.GetView("Memo") ' Ansicht der eingegangenen Mails holen

  Set mdoc = mview.GetFirstDocument ' Erste eingegange Mail holen
  Do Until mdoc Is Nothing ' Schleife durch alle eingegangenen Mails, die noch zu verarbeiten sind
    von = CNCL_MailExtract(CStr(mdoc.From(0)), True) ' Absenderadresse ermitteln
    betreff = CStr(mdoc.subject(0)) ' Betrefftext ermitteln
    ' URL für Google-API aufbauen
    url = |http://maps.googleapis.com/maps/api/geocode/xml?address=| + betreff + |&sensor=false&language=de| 
    xml = CNCL_URLtoUnicode(CNCL_URLEncode(url)) ' XML von Google-Maps holen
    
    txt = |ConclooLSE Showcase| + Chr$(10) + |Geocoding für "| ' Textanfang für Plain-Text-Mail
    txt = txt + betreff + |"| + Chr$(10)
    html = |<html><body><h1>ConclooLSE Showcase</h1>| ' Textanfang für HTML-Mail
    html = html + |<h2>| + CNCL_htmlEncode(|Geocoding für "| + betreff + |"|) + |</h2>|

    If LCase(CNCL_XML_GetElementContent(xml, "status")(1)) = |ok| Then ' wenn Geocoding erfolgreich
      ' geographische Länge ermitteln
      lng = CNCL_XML_GetElementContentByPath(xml,"GeocodeResponse.result.geometry.location.lng")(1)
      ' geographische Breite ermitteln
      lat = CNCL_XML_GetElementContentByPath(xml,"GeocodeResponse.result.geometry.location.lat")(1)
      ' formatierte Adresse ermitteln
      adr = CNCL_XML_GetElementContentByPath(xml,"GeocodeResponse.result.formatted_address")(1)

      txt = txt + |Geographische Länge: | + lng + Chr$(10)  ' Länge für Plain-Text-Mail
      txt = txt + |Geographische Breite: | + lat + Chr$(10) ' Breite für Plain-Text-Mail
      txt = txt + |Formatierte Adresse: | + adr + Chr$(10)  ' formatierte Adresse für Plain-Text-Mail
      html = html + CNCL_htmlEncode(|Geographische Länge: | + lng + Chr$(10))  ' Länge für HTML-Mail
      html = html + CNCL_htmlEncode(|Geographische Breite: | + lat + Chr$(10)) ' Länge und Breite für HTML-Mail
      html = html + CNCL_htmlEncode(|Formatierte Adresse: | + adr + Chr$(10))  ' formatierte Adresse für HTML-Mail
    Else ' wenn Google-Maps das Geocoding nicht ausführen konnte
      txt = txt + |Es konnte kein Geocoding ausgeführt werden."| ' Fehlermeldung für Plain-Text-Mail
      html = html + CNCL_htmlEncode(|Es konnte kein Geocoding ausgeführt werden.|) ' Fehlermeldung für HTML-Mail
    End If  
    html = html + |</body></html>| ' Ende des HTML-Mail-Parts
    betreff = |Showcaseantwort zu "| + betreff + |"| ' Betrefftext der Antwort aufbauen
    
    If Not CNCL_SendMail(|showcase@concloo.de|, von, ||, ||, |info@concloo.de|, betreff, html, txt, ||) Then
      ' wenn Mail nicht gesendet werden konnte, entsprechende Meldung an Konsole
      MessageBox(|Showcase-Mail an "| + von + |" konnte nicht gesendet werden|) 
    End If
        
    Set doc = mdoc                         ' aktuelles Dokument zwischenspeichern
    Set mdoc = mview.GetNextDocument(mdoc) ' Dokument der nächsten Mail holen
    Call doc.Remove(True)                  ' aktuelle Mail löschen
  Loop
  
ENDE:
  Exit Sub ' Sub beenden
  
errHandle:
  Messagebox (CNCL_ErrorMessage()) ' ausführliche Fehlermeldung auf Konsole ausgeben
  Goto ENDE
End Sub