diff --git a/modules/ipapi/__init__.py b/modules/ipapi/__init__.py new file mode 100644 index 00000000..7ccb0c73 --- /dev/null +++ b/modules/ipapi/__init__.py @@ -0,0 +1,3 @@ +from .module import IpapiModule + +__all__ = ['IpapiModule'] diff --git a/modules/ipapi/favicon.png b/modules/ipapi/favicon.png new file mode 100644 index 00000000..be0d3f65 Binary files /dev/null and b/modules/ipapi/favicon.png differ diff --git a/modules/ipapi/module.py b/modules/ipapi/module.py new file mode 100644 index 00000000..7830ea30 --- /dev/null +++ b/modules/ipapi/module.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2015 Julien Veyssier +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from weboob.capabilities.geolocip import CapGeolocIp, IpLocation +from weboob.tools.backend import Module +from weboob.browser.browsers import Browser +from weboob.tools.json import json + + +__all__ = ['IpapiModule'] + + +class IpapiModule(Module, CapGeolocIp): + NAME = 'ipapi' + MAINTAINER = u'Julien Veyssier' + EMAIL = 'julien.veyssier@aiur.fr' + VERSION = '1.1' + LICENSE = 'AGPLv3+' + DESCRIPTION = u"IP-API Geolocation API" + BROWSER = Browser + + def get_location(self, ipaddr): + res = self.browser.location('http://ip-api.com/json/%s' % ipaddr.encode('utf-8')) + jres = json.loads(res.text) + + if "status" in jres and jres["status"] == "fail": + raise Exception("IPAPI failure : %s" % jres["message"]) + + iploc = IpLocation(ipaddr) + iploc.city = u'%s'%jres['city'] + iploc.region = u'%s'%jres['regionName'] + iploc.zipcode = u'%s'%jres['zip'] + iploc.country = u'%s'%jres['country'] + if jres['lat'] != '': + iploc.lt = float(jres['lat']) + else: + iploc.lt = 0.0 + if jres['lon'] != '': + iploc.lg = float(jres['lon']) + else: + iploc.lg = 0.0 + #iploc.host = 'NA' + #iploc.tld = 'NA' + if 'isp' in jres: + iploc.isp = u'%s'%jres['isp'] + + return iploc diff --git a/modules/ipapi/test.py b/modules/ipapi/test.py new file mode 100644 index 00000000..561697ce --- /dev/null +++ b/modules/ipapi/test.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2015 Julien Veyssier +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from weboob.tools.test import BackendTest + + +class IpapiTest(BackendTest): + MODULE = 'ipapi' + + def test_ipapi(self): + self.backend.get_location('88.198.11.130')