Die folgende technische Information ist für Portalbetreiber. Der Anwender der Software braucht dies nicht lesen. 

Die Openfewo-Schnittstelle:

Eine dynamische XML-Schnittstelle für alle Ferienwohnungsdaten. Es gibt eine Vielzahl von Schnittstellen zwischen Vermieterprogrammen und Portalbetreibern die eine Übertragung von Belegtzeiten, Preisen, Bildern, Objekteigenschaften ermöglichen sollen. Zwei Übertragungsarten lassen sich dabei unterscheiden: PUSH und PULL (also passiv auf den Empfang von Daten warten, oder aktv regelmäßig abholen). Beides hat Vor- und Nachteile. Ein besonderes Problem, ist die große Datenmenge wenn die Zahl der Kunden und Objekte steigt. Trotz der großen Datenmange müssen einige Daten z.B. Belegtmeldungen in Echtzeit verfügbar sein um Doppelbelegungen zu vermeiden. Dies führt dann zu Notlösungen wie diese: Bilder, Preise, Beschreibungstexte werden erst nachts kopiert, wenn die Server mehr Kapazitäten haben. Die Kunden wundern sich dann, weshalb ihre Änderungen nicht übernommen werden. Dieses Problem lässt sich vermeiden, wenn man alle Daten dynamisch überträgt. Die Openfewo-Schnittstelle soll dies ermöglichen. Fewo-Line unterstützt das "openfewo" aktuell nur in der PULL-Variante. Sofern auf dem Portal online gebucht wird, kann das mit einem einfachen Belegungs-PUSH kombiniert um hier quasi Echtzeit zu erreichen. So kann man auch konkurrierende Onlinebuchungsportale parallel buchen lassen. Openfewo bietet eine zeitnahe bzw. direkte Übertragung aller Daten ohne dabei die Server mit großen Datenmengen zu belasten. Und so funktioniert es: Das Portal fragt über vereinbarte URL den Server der Vermietersoftware zu einem beliebigen Zeitpunkt mit http-GET ab. Die Schnittstelle wird nur mit dem GET-Parametern "lc" und "ob" gesteuert. "lc" (last change) ist ein Zeitstempel. Das Portal fragt alle Änderungen ab, die sich seit dem Zeitpunkt "lc" ergeben haben. Beispiel für eine Anfrage des Portals an die Vermietersoftware: http://www.fewo-line.de/converter.php?pt=schnellsuchesylt&auth=12345&lc=1970-01-01+00:00:00 Es werden weder bestimmte Kunden noch bestimmten Objekte abgefragt. Es kommt immer alles was sich seit dem Abfragezeitpunkt "lc" geändert hat. Dabei wird immer die feste XML-Baum-Struktur eingehalten. So läuft z.B. eine dynamische Kommunikation ab: Das Portal fragt die Vermieterfoftware: Gib mir alle Änderungen seit "lc=2014-10-04 14:31:55" Die Vermietersoftware antwortet: es gibt keine Änderungen Du hast jetzt den Wissensstand von "lc=2014-10-04 14:43:20" es wurden alle Daten komplett gesendet "ob=complete" Das Portal merkt sich "lc=2014-10-04 14:43:20" Nächster Aufruf einige Minuten später. Das Portal fragt Vermietersoftware: Gib mir alle Änderungen seit "lc=2014-10-04 14:43:20" Die Vermietersoftware antwortet: Der Kunde 47 hat ....... in Objekt 44: ............. das Bild 53 bearbeitet ............. den Preis mit der id=3456 geändert ............. einen Beschreibungstext mit der id=23432 gelöscht ............. eine Belegung eingetragen ....... in Objekt 33: ............. wurden neue Objekteigenschaften hinzugefügt Du hast jetzt den Wissensstand von "lc=2014-10-04 14:45:41" es wurden alle Daten komplett gesendet "ob=complete" Die Variable "ob" kann im Normalbetrieb weggelassen werden. Nur wenn (z.B. bei einer Erstübertragung) die Datenmange zu groß ist, bricht die Vermietersoftware nach 20000 Zeilen oder einer Laufzeit 20 Sekunden ab und übergibt in der xml-variable "ob" ein Lesezeichen, bis zur welcher Objektnummer die Übertragung gekommen ist. Das angefangene Objekt wird dabei noch zu Ende übertragen und die xml-Struktur geregelt geschlossen. Wenn die Übertragung z.B. bei der Nummer "ob=50.6" endete muss der nächste Aufruf so z.B. lauten: "http://www.fewo-line.de/converter.php?pt=schnellsuchesylt&auth=12345&lc=1970-01-01+00:00:00&ob=50.6" Nun wird die Übertragung erst bei dem Objekt 50.6 begonnen. Sofern die verbleibende Datenmenge noch immer zu groß ist, wird wieder ein neues Lesezeichen gesendet. So sind timeouts ausgeschlossen. Beispiel für einen Kommunikationsablauf bei Erstkontakt (Totalabgleich): 1) Portal fragt Vermietersoftware: Gib mir alle Änderungen seit dem "lc=1970-01-01 00:00:00" (Also seit dem Anfang der Zeitrechnung) 2) Die Vermietersoftware antwortet in xml: "lc=1970-01-01 00:00:00 ob=50.6" (Das Portal merkt sich die beiden Parameter lc und ob und fragt erneut an) 3) Portal fragt Vermietersoftware: Gib mir alles seit "lc=1970-01-01 00:00:00" aber erst ab dem Objekt "ob=50.6" 5) Vermietersoftware antwortet: Du hast jetzt den Datenstand von "lc=2014-10-04 14:31:55" und 100% der Objekte "ob=complete" Sofern der Kundenstamm erst nach und nach aufgebaut wird, könnte man sich auch überlegen, die Variante "Erstübertragung" in der Programmierung seiner Schnittstelle einzusparen. Es soll nur erwähnt sein, sofern gleich zu Anfang riesige Datenmengen anfallen sollten. Die PULL Anfrage wird nur über die beiden oben beschriebenen GET-Parameter lc und ob gesteuert. Es gibt dann noch feste Parameter pt = Portalname und auth = Portalpasswort Die Vermeitersoftware antwortet in einer XML-Struktur:
Aufbau der XML-Struktur: Beispiel einer XML-Quelle Hier sehen Sie alle Kunden, die zu www.schnellsuche-sylt.de eine Schnittstelle angelegt haben. Der aktuell beschriebene Verzweigung im XML-Baum ist unten jeweils als Überschrift in braun hervorgehoben. • openfewo
  users        = alle user die eine Schnittstelle zu dem abfragenden Portal eingerichtet haben.
  next_request = enthält den oben beschriebenen Zeitstempel "lc" und das Lesezeichen "ob" die in der Anfrage als auch in der Antwort 
                 verwendet werden
• openfewo/next_request
  lc = last change 
  ob = object (Lesezeichen sofern Übertragung abgebrochen wurde)
• openfewo/users
  lc   = last change, 
  id   = interne id des users
  akt  = aktiv (y/n) Ist der Benutzer aktiv oder hat der Benutzer das Zielportal vorübergehend deaktiviert
  ser  = Seriennummer der Software = Kundennummer des Fewo-Line-Kunden   
  name = Benutzername des Kunden auf dem abfragenden Portal 
  nr   = interne Fewo-Line Zielnummer. Laufende Nummer der vom Kunden eingerichteten Schnittstelle 
• openfewo/users/user
  objects     = Objekte 
  saisons     = Saiaonzeiten 
  ratings     = Preise 
  text_blocks = Texte/Beschreibungen
  pictures    = Bilder
• openfewo/users/user/objects
 lc   = last change
 id   = interne id des Objektes
 akt  = aktiv (y/n) Ist das Objekt noch aktiv?
 nr   = interne Objektnummer (fortlaufend pro user)
 map  = mapping Objektname bzw. Objectcode beim abfragenden Portal
In diesem Beispiel ist zu sehen, das der Benutzer für das Objekt 6 keinen Mappingcode eingegeben hat, weil er es bei dem abfragenden Portal nicht anbietet. • openfewo/users/user/objects/object
  occupancys = Belegungen
  parameters = Objekteigenschaften 
• openfewo/users/user/objects/object/occupancys
 lc    = last change
 id    = interne ID der Belegung
 akt   = aktiv (y/n)  Bei "n" ist Belegung gelöcht 
 start = Belegung von 
 end   = Belegung bis
• openfewo/users/user/objects/object/parameters:
  localname    = (url-codiert) Lokaler Objektname wie er vom Kunden verwendet wird (20 Zeichen)
  house        = (url-codiert) Name des Hauses (20 Zeichen)
  title        = (url-codiert) Objekttitel, Kurzbeschreibung (60 Zeichen)
  description  = (url-codiert) Objektbeschreibung
  street       = (url-codiert) Straße (40 Zeichen)
  zip          = (url-codiert) Postleitzahl 
  city         = (url-codiert) Ort (40 Zeichen)
  rooms        = Zahl der Räume
  persnor      = Zahl der Personen Normalbelegung
  persmax      = Zahl der Personen Maximalbelegung
  public       = (y/n) Das Objekt soll öffentlich sichtbar sein
  price_group  = (url-codiert) Preisgruppe, vom Kunden frei definierbar. Diese findet sich unten pei den Preisen wieder
  spa_location = (url-codiert) Kurort, vom Kunden frei definierbar. Diese findet sich unten pei den Preisen wieder
  object_id    = Laufende interne Objektnummer, fortlaufend pro Kunden
  properties   = Objekteigenschaften
• openfewo/users/user/objects/object/parameters/properties
  property = Die Objektmerkmale werden in Klartext übertragen. Das Abfragende Portal sucht sich nur die Merkmale heraus,
             die es lesen kann und ignoriert die anderen. Fewo-Line sendet über eine interne Namensübersetzung die benötigten 
             Schlüsselworte.
• openfewo/users/user/objects/object/parameters/saisons
 
saison_grp = Saisonzeitengruppe. Verschiedene Gruppen sind z.B. Notwendig, wenn die Kurkartenpreise zu einem anderen Zeipunkt
             von Saison A nach B wechseln, als die Mietpreise 
• openfewo/users/user/saisons/saison_grp/saison
  lc    = last change
  id    = interne ID
  akt   = aktiv (y/n)  Bei "n" ist die Saisonzeit gelöcht 
  start = Datum von
  end   = Datum bis
  value = Wert der Saisonzeit. Möglich sind "a1" bis "k1" sowie "a2" bis "k2"
          Zu diesen Wert wird in den Preisen wieder Bezug genommen.   
• openfewo/users/user/ratings
  lc    = last change
  id    = interne ID
  akt   = aktiv (y/n)  Bei "n" ist der Preis gelöcht 
• openfewo/users/user/ratings/rate
   title           = (url codiert) Name der Leistung 
   value           = Preis 
   currency        = Währung
   valid condition = Dieser Preis gilt wenn diese Bedingung zutrifft
                     Diese Bedingungen können in condition verglichen werden 
                     "alltime"       = es gibt keine Bedingung, gilt immer
                     "spa_location"  = Der Kurort entspricht dem "match" 
                     "house"         = Der Hausname entspricht dem "match"
                     "price_group"   = Die Preisgruppe entspricht dem "match"
                     "object_id"     = Die Objektnummer entspricht dem "match"
                     "localname"     = Der lokale Objektname entspricht dem "match" 
                     
   optional        = y/n
   per_unit        = Der Preis wird auf die folgende Einheit berechnet
                     "booking"           = Buchung
                     "night"             = Nacht
                     "person"            = Person
                     "night_and_person"  = Nacht und Person
                     "night_and_adult"   = Nacht und Erwachsenen
                     "night_and_kid"     = Nacht und Kind
                     "night_and_spa_fee" = Nacht und Kurabgabepflichtiger Person
                     "person_hide"       = Person (in den Übernachtungspreis einrechnen ... also verstecken)
                     "booking_hide"      = Buchung(in den Übernachtungspreis einrechnen ... also verstecken) 
                      
   
   tax_rate        = Steuersatz
   saison name     = Sofern der Preis saisonzeitabhängig ist, steht hier der wert der Saisonzeit
   range condition = Einschränkungsbedingung min/max. Der Preis gilt nur wenn dies auch zutrifft 
                     Die folgenden Möglichkeiten können eintreten: 
                     "none"              = also keine Einschränkung                         
                     "stay"              = Aufenthaltsdauer in Tagen                        
                     "day_of_stay"       = Numerischer Tag des Aufenthaltes                    
                     "day_of_week"       = Nummer des Wochentages (So=7)";
                     "number_of_persons" = Zahl der Personen            
                     "number_of_adults"  = Zahl der erwachsenen            
                     "number_of_kids"    = Zahl der Kinder               
                     "number_of_days_before_arrival" = Tage vor Anreise 
                     "age_of_person"     = Lebensalter der Person              

• openfewo/users/user/text_blocks
  lc    = last change
  id    = interne ID
  akt   = aktiv (y/n)  Bei "n" ist der Text gelöscht
• openfewo/users/user/text_blocks/text_block
  blockname = Variablenname des Textes. Diese Variablen können auftreten:
             "rating"          = Zusatzinformation zu den Preisen   
             "location"        = Lage des Objektes
             "outside"         = Information zum Außenbereich
             "lessor_address"  = Vermieteradresse
             "lessor_phone"    = Telefon
             "lessor_mobile"   = Mobil
             "lessor_fax"      = Fax
             "lessor_mail"     = Mailadresse

  valid    = Bedingung unter der dieser Text zutrifft
             Diese Bedingungen können in condition verglichen werden (identisch wie bei den Preisen) 
             "alltime"       = es gibt keine Bedingung, gilt immer         
             "spa_location"  = Der Kurort entspricht dem "match" 
             "house"         = Der Hausname entspricht dem "match"
             "price_group"   = Die Preisgruppe entspricht dem "match"
             "object_id"     = Die Objektnummer entspricht dem "match"
             "localname"     = Der lokale Objektname entspricht dem "match" 

  text     = (url codiert)  Textinhalt/Information
• openfewo/users/user/pictures
  lc    = last change
  id    = interne ID
  akt   = aktiv (y/n)  Bei "n" ist das Bild gelöcht 
• openfewo/users/user/pictures/picture
  title  = (url codiert) Bildtitel
  type   = Dateiformat jpg oder png
  pix    = Abmessungen des Quellbildes 

  object = Information ob innen oder außen. Wenn innen dann kommt der Mappingcode 
           des Objektes beim abfragenden Portal
           Parameter inside y/n 
  
  link   = Endung des Downloadlinks für das Bild. Bei Fewo-Line lautet der Link:
           http://www.fewo-line.de/webclient/index.php?cl=img&n=(+Endung)
           z.B. http://www.fewo-line.de/webclient/index.php?cl=img&n=21.4.7
           Für bestimmte Abmessungen ist nach der Endung die gewünschte Abmessung hinzuzufügen
           z.B. http://www.fewo-line.de/webclient/index.php?cl=img&n=21.4.7.600x400

Zur übergeordneten Hilfeseite