@@ -205,6 +205,34 @@ def _ifconfig_co_ipv6(geo: bool=False, timeout: Union[float, Tuple[float, float]
205205 return {"status" : False , "error" : str (e )}
206206
207207
208+ def _reallyfreegeoip_org_ipv6 (geo : bool = False , timeout : Union [float , Tuple [float , float ]]
209+ = 5 ) -> Dict [str , Union [bool , Dict [str , Union [str , float ]], str ]]:
210+ """
211+ Get public IP and geolocation using reallyfreegeoip.org.
212+
213+ :param geo: geolocation flag
214+ :param timeout: timeout value for API
215+ """
216+ try :
217+ data = _get_json_force_ip (url = "https://reallyfreegeoip.org/json/" , timeout = timeout , version = "ipv6" )
218+ result = {"status" : True , "data" : {"ip" : data ["ip" ], "api" : "reallyfreegeoip.org" }}
219+ if geo :
220+ geo_data = {
221+ "city" : data .get ("city" ),
222+ "region" : data .get ("region_name" ),
223+ "country" : data .get ("country_name" ),
224+ "country_code" : data .get ("country_code" ),
225+ "latitude" : data .get ("latitude" ),
226+ "longitude" : data .get ("longitude" ),
227+ "organization" : None , # does not provide organization
228+ "timezone" : data .get ("time_zone" )
229+ }
230+ result ["data" ].update (geo_data )
231+ return result
232+ except Exception as e :
233+ return {"status" : False , "error" : str (e )}
234+
235+
208236IPV6_API_MAP = {
209237 IPv6API .IP_SB : {
210238 "thread_safe" : True ,
@@ -236,6 +264,11 @@ def _ifconfig_co_ipv6(geo: bool=False, timeout: Union[float, Tuple[float, float]
236264 "geo" : True ,
237265 "function" : _ifconfig_co_ipv6
238266 },
267+ IPv6API .REALLYFREEGEOIP_ORG : {
268+ "thread_safe" : False ,
269+ "geo" : True ,
270+ "function" : _reallyfreegeoip_org_ipv6
271+ },
239272}
240273
241274
0 commit comments