2012-02-28 3 views
0

J'ai ce code, qui recherche essentiellement une adresse IP quand un utilisateur frappe le http://domain.tld/stats/1.gif et utilise la bibliothèque geoip-lite pour retourner lat et long sur une carte raphael.geoip-lite formatage de chareurs

var http = require('http'), 
    util = require('util'), 
    static = require('node-static'), 
    faye = require('faye'), 
    url = require('url'), 
    geoip = require('geoip-lite'); 

    function LiveStats(options) { 
    if (! (this instanceof arguments.callee)) { 
     return new arguments.callee(arguments); 
    } 

    ... 

    } else if (location.pathname == '/stats/1.gif' && request.method == 'GET') { 
     var origin; 
     response.writeHead(200, { 
       'Content-Type': 'image/gif' 
     }); 
     origin = /\/(.*)\.gif/.exec(request.url); 
     if (origin) { 
     var ip = request.connection.remoteAddress; 
     var geo = geoip.lookup(ip); 
     console.log(geo); 
     self.bayeux.getClient().publish('/stat', { 
       title: 'user' 
       , latitude: geo.ll[0] 
       , longitude: geo.ll[1] 
       , ip: ip 
      }); 
      } 
      response.end("OK"); 
} else { 
     file.serve(request, response); 
     } 
    }); 
    }); 
    return server; 
}; 

module.exports = LiveStats; 

console.log (geo);

retours par exemple:

{ range: [ 1391911936, 1391915007 ], 
    country: 'FR', 
    region: 'A9', 
    city: 'N?mes', 
    ll: [ 43.8333, 4.35 ] } 

où la mise en forme de la ville est tout faux, comment dois-je corriger cela, pour qu'il imprime Nîmes

Un grand merci

Répondre

1

J'ai essayé votre adresse IP avec geoip-lite, et comme vous le dites, les caractères 8 bits ne semblent pas fonctionner. J'ai eu beaucoup de chance en utilisant geoip, qui non seulement gère les caractères larges, mais il semble avoir une résolution plus élevée, aussi. Je vous suggère d'essayer, si vous ne pouvez pas résoudre ce problème.

MISE À JOUR: Utilisation de geoip. D'abord vous devez download GeoLiteCity.dat from Maxmind.

var City = require("geoip").City, 
    city = new City(__dirname + "/GeoLiteCity.dat"); 

city.lookup("82.246.239.255", function(err, location) { 
    console.log(location); 
} 

Donne-moi:

{ country_code: 'FR', 
    country_code3: 'FRA', 
    country_name: 'France', 
    region: 'A9', 
    city: 'Nîmes', 
    latitude: 43.83330154418945, 
    longitude: 4.349999904632568, 
    continent_code: 'EU' } 
+0

je vais essayer avec geoip, merci – khinester

+0

j'ai essayé de télécharger la base de données du site et l'ai mis dans le répertoire lib/mais je continue à obtenir: ----------------------- - Exception: Erreur: Base de données de ville non valide undefined ------------------------ pouvez-vous fourchette mon code https://github.com/nkhine/livestats et voir si vous pouvez le faire fonctionner? – khinester

+0

Cette erreur signifie qu'il peut trouver le fichier, je pense (sinon vous obtiendrez "Erreur d'ouverture du fichier" - est-il possible que vous avez téléchargé le fichier mais ne l'avez pas décompressé? Le fichier de Maxmind est gzippé, vous avez donc besoin –

0

Si je me souviens bien, la La base de données GeoIp de MaxMind vous donnera des résultats en UTF-8. Je suspecte que le lecteur du journal de console ne le décode pas correctement bien que le caractère correct soit présent.

Pouvez-vous ouvrir cet objet JSON avec quelque chose qui reconnaîtrait UTF-8?

+0

je suis en train de pousser ceci à une interface web, voici le code https://github.com/nkhine/livestats~~V~~aux~~singular~~3rd – khinester