Datenkommunikation

(Перенаправлено с Entwickler-Wiki)

Isd Datenabruf für eigene Programmentwicklung #

1. Lösung (einfach): Kommunikation mit Hilfe des ISD-Programms #

Das Isd-Programm wird auf eine Windows-Installation gebracht, welche Zugriff zur Datenbank hat. Über einen Eintrag in der Registry erhält das Programm zugriff auf die Datenbank (bisher: MySQL und MS-SQL). Über entsprechende Kommando-Zeilen-Parameter ruft das Programm bei uns die Daten ab und aktualisiert die Tabellen in der Datenbank. Die Tabellen haben unser vorgegebenes Format, können aber zusätzliche Felder enthalten. Über Views oder andere Mechanismen werden die Daten dann in Ihr System integriert

Dafür benötigt man:

  • Eine der Acces-Datei identische Tabellenstruktur (Upsize-Tool)
  • Einen gültigen ODBC-Treiber
  • einen Eintrag in der Registry under HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Isd2\Main\DSN = (die entsprechende Datanbankverbindung)

Das Isd2-Programm kann von der Konsole aufgerufen werden mit "Isd2 update internet log=C:\log.txt" , dies kann in einen Job eingetragen werden, die log-Datei sollte überprüft werden

2. Lösung: Abruf von unserem Server #

Dafür muss ein unten beschriebenes Protokoll eingehalten werden.

Der Ablauf im Kurzen: #

  1. Aus letzter Serverliste auth-Server auswählen. (all, auth)
  2. Lizenz prüfen, und falls ein Feld "log_id" angegeben ist, diese für die Kommunikation nutzen. (all, auth)
  3. Abruf der Produktliste (all, data)
  4. Abruf der bereitstehenden Dateien (File-Liste) pro Produkt (all, data)
  5. Abruf der Dateien (Server in File-Liste)
  6. Abruf der neuen Serverliste (all, config)

Zu und nach jeder Kommunikation wird eine dist_id gehalten. Anhand der dist_id erkennt das System, bis zu welchem Stand die Daten vorhanden sind. Zu Beginn wird stattdessen einmal &start=1 mitgegeben, damit werden die Startdateien erstellt. Diese enthalten alle in Beziehung stehenden Stammdaten (Regionen, Quellen). In Zukunft werden dann nur noch Änderungen übertragen
Alle Anfragen können in den Format XML/CSV/ISD abgerufne werden. Die Datendateien müssen im ISD-Format abgerufen werden
Das Format wird über den Parameter &_ct= bestimmt

  • 1= einfaches XML
  • 2= CSV mit Kopfzeile (doppelte "" im String = ")
  • 4= XML Passend für ADO
  • 6= ISD-Format (CSV-Ähnlich, doppelte "" im String = ")
  • 7= XML für .NET DataSet
  • 8=XML mit inline oder extern XSD
    __schema 0=kein xls, 1=inline xls, 2=externes xls, 3= das xls
  • 9= JSON

1 Bestimmen des Servers #

In Zukunft werden mehrere Server für die Datenabholung bereit stehen. Die Liste erhält man mit

http://www.immo-info.de/service/Data?_do=listServer&app=isd

PROTSERVERPORTPATHSERVERTYPE
httpwww.immo-info.deserviceall

Servertype: all auth conf data

Diese Liste erhält man Servern Typ "all" "conf" oder "data". "all" kann alles, "conf" kann auf diese Serverlisten befragt werden, "auth" für die Anmeldung/Überprüfung und "data" für die Datenkommunikation. Diese sollte von Zeit zu Zeit aktualisiert werden. Der Datentransfer wird immer mit der letzten Liste gestartet, insofern steht dieser Schritt nicht wirklich am Anfang
Überprüfen der Lizens

2 Überprüfen der Lizens #

/Data?_do=listProduct&_ct=<dataType>&cust_id=<Kundennummer>&key=<licenseKey>&chk=2

3 Abruf des Status für abonierten Produkte #

/Data?_do=listProduct&_ct=<dataType>&cust_id=<Kundennummer>&key=<licenseKey>&app=isd&db=<dbKey>&cp=<computerKey>[&product_id=<prodId>]

4 Abruf der bereitstehenden Dateien #

Servertype "auth"

/Data?_do=listFiles&_ct=<dataType>&cust_id=<Kundennnummer>&key=<licenseKey>&product_id=<prodId>&db=<dbKey>&cp=<computerKey>&app=isd&dist_id=<lastDistId>

das Ergebnis ist eine Liste mit den Feldern

ID,NAME,BEFORE,LAST,NEXT,FILESIZE,URL,LICENSE_CNT,DIST_ID,START

Die dist_id muss nach jeder Abholung (zu jedem Produkt) gemerkt werden, um bei der nächsten Abholung nur die neuesten Änderungen zu bekommen. Beim ersten Mal braucht keine dist_id angegeben werden, sondern start=1 um die Initialdaten zu erhalten. Diese enthalten die Orts-, Quell- und andere Definitionen und die komplette Historie zu allen Angeboten des letzten 1/4 Jahres

5. Abruf einer Datendatei #

Die URL's werden von der obigen Funktion geliefert. Es muss immer im Format &_ct=6 abgerufen werden, da sonst nicht alle Informationen geliefert werden

6. Serverliste #

Eine neue Serverliste wir einfach wie bei Punkt-1 abgerufen. Generell kann immer mit
"http://www.immo-info.de/service" + "/Data" als URL gestartet werden.
Das Verteilen auf andere Server ist derzeit nicht aktiv, wird aber kommen.

7. ISD-Datenformat #

Die Daten selbst müssen in einem CSV-ähnlichen Format abgerufen werden (&_ct=6)

Das Format enthält diverse Sections:

  • HEAD => Kopf-Informationen zur Datei: Produkt, Bezeichnung, Zeitraum, Distribution-ID's
  • DEF => Datendefinition Tabellenname, Anzahl Felder, Anzahl Datensätze, Feldnamen
  • SQL => SQL für Datenbank-Manipulationen im ISD-Programm
  • INSERT => Anfüge-Datensätze, diese Datensätze werden erstmalig übertragen
  • DATA => Geänderte Datensätze, diese können in gewissen Situation auch erstmalig sein (insert)
  • ABGLEICH => Geänderte Zuordnung von Anzeigen zu Immobilien, Verschiebung einer Immobillien-ID aufgrund Zuordnung
  • DELETE => Löschen dieses Datensatzes (TABELLE, KEY)
  • INFO => Gelegentlich Info - Texte, neuste Meldungen
  • COMMAND => Kommandos für das ISD-Programm, wie Datenbank-Komprimierung, Anbieteraufbereitung

Bei INSERT/UPDATE ist die erste Spalte ist immer der Key-Val. Bei DELETE heisst die Spalte ID.

Im INSERT-Block dürften ausschließlich ungeänderte Datensätze auftauchen. Dennoch sollte die Import Logik mit dem Vorhandensein eines Objektes rechnen. Manchmal kann es aus technischen Gründen notwendig sein, Daten erneut auszuliefern. Wir können bei technischen Problem per Knopfdruck die nochmalige Lieferung der Startdaten auslösen, wenn es beim Kunden zu technischen Problemem kam.

INSERT und UPDATE sollte als Hinweis gewertet werden, mit dem die Performance des Imports beschleunigt werden kann, indem bei INSERT zuerst ein Einfügen, und bei UPDATE zuerst ein Aktualisieren versucht wird.

ABGLEICH

Die Datensatz hat das Format TABELLE/ID-Alt/ID-Neu. Alle Referenzen der ID-Alt sollten zur ID-Neu verschoben oder zusammengeführt werden. 

Hintergrund: Bei uns erfolgt im ersten Moment ein maschineller Abgleich der Daten. Dies wird in den Folgetagen nochmal manuell nachgearbeitet und Objekte werden nachträglich als Doppelung erkannt. Dann werden alle Anzeigen der ID-Neu zugeordnet. Es kann auch der umgekehrte Fall auftreten: Ein Objekt wird getrennt, da sich die Anzeigen als nicht zusammengehörig erwiesen haben. Das kommt allerdings seltener vor, aber dabei können u.U. auch sehr alte Daten zur Aktualisierung auftauchen.

Die Import-Datei begint immer mit

REQUIRE VERSION

Zur Kontrolle der vollständigen Übertragung endet eine Datei immer mit ENDDOC. Sollte ENDDOC nicht erreicht worden sein, darf die Dist-ID nicht übernommen werden und die Aktualisierung muss als gescheitert gewertet werden

** Hinweis: 
Zur Kommunikation mit dem Server sind die XML-Abrufformate empfehlenswert (_ct=1, _ct=8) oder JSON (_ct=9)
Zum Abruf der Daten sollte _ct=6 (Isd-Csv-Format) verwendet werden, da es praktisch wie Csv ist, aber hilfreiche Zusatzinformationen bietet
0 Вложения
15290 Просмотров
Среднее (0 Голоса)
Comments
Пока нет комментариев. Будь первым.