Delphi - Irányítószámok keresése webservice használatával

forráskód letöltése
A www.animare.hu oldalon található egy irányítószám kereső szolgáltatás, Web Service formában. A szolgáltatás tartalmazza Magyarország összes településének irányítószámát. Budapest, Debrecen, Győr, Miskolc, Pécs és Szeged esetén az irányítószámokat utcákra lebontva szolgáltatja. Lehetőségünk van irányítószám szerint településeket, utcákat keresni, valamint település és utca név alapján irányítószámokat. A szolgáltatás használatához készítünk egy komponenst.
A mellékelt példaprogram megnyitása előtt az IRSZWS.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens két függvénnyel rendelkezik. A SearchByCity metódus segítségével város és azon belül utca megadásával kereshetünk.
function SearchByCity(CityName, StreetName: String): TRecordSet2Array;
A CityName paraméterben kell megadnunk a település nevét, a StreetName-ben pedig az utca nevét. Bármelyik paraméterben megadhatunk üres sztringet, a szerver csak azt a paramétert veszi figyelembe, amely adatot tartalmaz. Amikor megadunk egy szöveget, akkor a keresés minden olyan találatot visszaad, amelynek elején a megadott szó szerepel. Például ha a településnévhez azt írjuk be, hogy ’békés’, akkor a találati listában Békés, Békéscsaba, Békéssámson, stb. is szerepelni fog.
Ha azt akarjuk, hogy a keresés csak azt adja vissza, amit megadtunk, akkor a keresett szót idézőjelekben adjuk meg.
A másik függvény segítségével irányítószám megadása alapján kereshetünk.
function SearchByPostCode(PCode: Integer): TRecordSet1Array;
Mindkét függvény egy dinamikus tömbbel tér vissza.
TRecordSet1Array típus
Mezőnév Típus Megjegyzés
CityID Integer A település azonosító kódja
CountyName String[40] Megye neve
PostCode String[4] Irányítószám
CityName String[40] Település neve
CityNameExt String[20] Kiegészítő adat a településről
TRecordSet2Array típus
Mezőnév Típus Megjegyzés
CityID Integer A település azonosító kódja
CountyName String[40] Megye neve
PostCode String[4] Irányítószám
CityName String[40] Település neve
CityNameExt String[20] Kiegészítő adat a településről
StreetName String[60] Utca neve
StreetNameExt String[40] Kiegészítő adat az utcáról
Area String[10] Kerület
NumFrom Integer Részekre osztott utcák esetén a kezdő házszám
NumTo Integer Részekre osztott utcák esetén az utolsó házszám
NumFromChar String[2] Részekre osztott utcák esetén az első betű pl.: d
NumToChar String[2] Részekre osztott utcák esetén az utolsó betű pl.: e
A komponens elkészítése
A szolgáltatás az alábbi címen érhető el.
http://www.animare.hu/AnimareWebService/IRSZ.asmx
A web service szolgáltatás Visual Studio .Net-ben lett fejlesztve. A szolgáltatás függvényei olyan adattípust használnak visszatérési értékként, amelyet a Delphi nem tud feldolgozni.
A szolgáltatást nem a hagyományos módon érjük el, hanem URL címzésen keresztül.
Egy URL címben nem szerepelhetnek ékezetes karakterek. Létrehoztuk a StringToHTML függvényt, amely a megadott szövegben kicseréli az ékezetes karaktereket, majd eredményül visszaadja a módosított karaktersorozatot.
Egy URL cím letöltéséhez elkészítettük a LoadFromURL függvényt.
procedure LoadFromURL(URL: string);
A függvény a paraméterként megadott oldalt elmenti ’c:\temp.xml’ néven. A függvény megfelelő paraméterrel történő hívása esetén, az elmentett állomány tartalmazza a web service szolgáltatás eredménylistáját XML formátumban, amelyet hagyományos, szöveges állományként feldolgozhatunk.
A web service SearchByCity függvényének hívása a bonyolultabb, mert az két paramétert vár. Az egyik a city, a másik a street. A két paramétert az & jel választja el egymástól.
LoadFromUrl('http://www.animare.hu/AnimareWebService/IRSZ.asmx/SearchByCity?city='+
  StringToHTML(CityName)+'&street='+StringToHTML(StreetName));
A létrejövő Temp.xml állományt egy TStringList segítségével könnyedén megnyithatjuk, így minden sora külön elemet képez a TStringList-ben. Az XML állományban egy adatsorozat bejegyzése külön sorokban található, folyamatosan, egymás alatt elhelyezkedve. A legelső elem, amit meg kell keresnünk a <CityID> bejegyzés. A bejegyzések az alábbi formában szerepelnek:
<CityID>Adattag</CityID>
Nekünk csak az adattagot kell feljegyeznünk.
A SearchByCity függvény két fajta adattípussal tér vissza. Ha a keresésnél nem nagyváros nevét adjuk meg, akkor csak a rövidebb adatszerkezetet kapjuk vissza. Ha olyan települést adunk meg, ahol utcanevek is nyilván vannak tartva, akkor a függvény eredményül a hosszabb adatszerkezetet adja.