From 96c7dab513520f9137899d87944ed0ed6fb373b0 Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Sat, 21 Feb 2015 16:22:54 +0100 Subject: [PATCH] new module ipapi for CapGeolocIp --- modules/ipapi/__init__.py | 3 ++ modules/ipapi/favicon.png | Bin 0 -> 766 bytes modules/ipapi/module.py | 64 ++++++++++++++++++++++++++++++++++++++ modules/ipapi/test.py | 28 +++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 modules/ipapi/__init__.py create mode 100644 modules/ipapi/favicon.png create mode 100644 modules/ipapi/module.py create mode 100644 modules/ipapi/test.py 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 0000000000000000000000000000000000000000..be0d3f65e4d0f010f45ef949fe11779f08a97938 GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~lPI4EbAMBG5d#BLx2KC^NX4zUx6Wr@PLN>#kbfyB z_N7;>K-2`$>zCwj?^l?2Bz}QL2lGrTkt^L5Hx4#de2D+B=)pn7!xt@=J3IPU3F|k> zHbtenhNqU4ZYu4Kx~(GjXp_U{nUlm){_YF#xM!0;&wT!}^Rq8;t(tV@;xS*B+2%|F z4Gb&_42&EO3|N^B+cGbuvD^MzvvaMMC&Phx&7V)yuUxnxqIuDa2`USgA8!s>B>emP zufl(C%uZ}t{;-pWulDE{pPP5=t9D3Vekog8*!yhzZnkV;v){QF@-}Qezpm9u&ZhcO z_rEFEKOQ~*e02x!lLeX6qJvqU-E$Ls`SwPEpWmnd+y}0@J4ALpKK|X}-kw{X%I&)t z8CsjVCSE++cCPsIwM~^DAKjPCoOSX3t3T@)cI|Sh*sH|$YwwOi+mvtnD}G-7Xt^p> zHu5o8F`Bj2E z?Y0&FOqx;_6(9bwwOCi@ih$=C$IA?k3`OsI7JYxYIZ)(!meapvo`)NrSnZD$oD#Es zv5>;)V@4$j^W~qPvxsL?e>e5aqvfw1; X@z3nZ8. + + +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')