move external_ip to separate file
return empty dict instead of False if requests fails to import