Um mir selbst die Sache etwas zu erleichtern habe ich mir eine Funktion zur Ermittlung von Userdaten auf Basis dessen IP-Adresse geschrieben. Notwendig ist hierzu lediglich ein Account bei MaxMind.
Den Namen der Stadt, aus der der WebSiteUser sich eingewählt hat, kann man sich somit wie folgt anzeigen lassen:
#getRemoteUserInfo(‚217.162.206.5′,’EZKdtZojDp3m‘).byName.City#
Und nun die eigentliche Funktion:
name= "getRemoteUserInfo" access= "remote" returntype= "struct" output= "false" hint= "liest Userdaten aufgrund einer IP-Adresse aus" >
name= "myAdress" type= "string" default= "#CGI.REMOTE_ADDR#" hint= "Die IP-Adresse zur Abfrage" >
name= "myLicenseKey" type= "string" required= "true" hint= "Dein LizenzKey von MaxMind" >
var qMaxMindByID = structNew () />
var qMaxMindByName = structNew () />
var thisField = "country,region,city,undefined,latitude,longitude,DMA,area,ISP,organization" />
var thisPos = 1 />
var thisValue = "" />
var stringField = "false" />
var resultMaxMind = "" >
method= "get" url= "http://maxmind.com:8010/f?l=#arguments.myLicenseKey#&i=#arguments.myAdress#" >
resultMaxMind = cfhttp.FileContent >
from= "1" to= "#Len(resultMaxMind)#" index= "mmField" >
mid (resultMaxMind,mmField, 1 ) IS ‚,‘ AND NOT stringField >
qMaxMindByID[thisPos] = thisValue >
qMaxMindByName[ ‚#ListgetAt(thisField,thisPos)#‘ ] = thisValue >
thisPos = thisPos + 1 />
thisValue = "" />
mid (resultMaxMind,mmField, 1 ) IS ‚"‘ >
stringField = iif (stringField, "false" , "true" ) />
thisValue = thisValue & mid (resultMaxMind,mmField, 1 ) />
Len (resultMaxMind) EQ mmField >
qMaxMindByID[thisPos] = thisValue />
qMaxMindByName[ ‚#ListgetAt(thisField,thisPos)#‘ ] = thisValue >
resultMaxMind = structNew () >
resultMaxMind.byID = qMaxMindByID >
resultMaxMind.byName = qMaxMindByName >
resultMaxMind >
Der einfachheithalber habe ich auf eine sichere Konvertierung der Daten von CSV verzichtet, welche aber in Beitrag CSVtoArray nachgelesen und übernommen werden können.