private function request($data = array()) { $data['api_token'] = $GLOBALS['CONFIG']['translation']['sync']['poeditor_api_key']; $data['id'] = $GLOBALS['CONFIG']['translation']['sync']['poeditor_project_id']; //log_debug($data); $res = downloadData('http://poeditor.com/api/', $data); $res = json_decode($res); if (!$res) { $this->Lasterror = "Error connecting to the POEditor API"; log_error($this->Lasterror); return false; } if ($res->response->code != 200) { $this->Lasterror = "POEditor API returned error: " . $res->response->message; log_error($this->Lasterror, "Details: ", $res); return false; } if (isset($res->details)) { $edited = (isset($res->details->added) ? $res->details->added : 0) + (isset($res->details->updated) ? $res->details->updated : 0); if ($edited == 0) { $this->Lasterror = "POEditor API did not add anything"; log_error($this->Lasterror, "Details:", $res, "Request was:", $data); return false; } } return $res; }
/** * Returns the timezone for an IP address. * * @param string $ip IP address to check (defaults to <get_ip_address>) * @return string Timezone identifier or false on error */ function get_timezone_by_ip($ip = false) { if ($ip === false) { $ip = $GLOBALS['current_ip_addr']; } if (starts_with($ip, "1.1 ") || starts_with($ip, "192.168.")) { return false; } $key = "get_timezone_by_ip." . getAppVersion('nc') . "-" . $ip; $ret = cache_get($key); if ($ret) { return $ret; } /* // new url with api key: $url = "https://api.ipinfodb.com/v3/ip-city/?key=ae4dea477cd8a36cc678c582c3f990fb57a5aae696f878b4e0eee70afa53bf1e&ip=".$GLOBALS['current_ip_addr']."&format=xml"; try { $xml = downloadData($url, false, false, 60 * 60, 2); }catch(Exception $ex){ WdfException::Log("Unable to get Timezone for ".$ip." ($url)",$ex); return false; } if( preg_match_all('/<timeZone>([^<]*)<\/timeZone>/', $xml, $zone, PREG_SET_ORDER) ) { $zone = $zone[0]; if($zone[1] != "") { cache_set($key,$zone[1], 24 * 60 * 60); return $zone[1]; } } // log_error("No timezone found for ".$GLOBALS['current_ip_addr']." via ipinfodb.com"); */ $url = "http://ip-api.com/php/" . $ip; try { $data = @unserialize(downloadData($url, false, false, 60 * 60, 2)); } catch (Exception $ex) { WdfException::Log("Unable to get Timezone for " . $ip . " ({$url}) " . $ex->getMessage(), $ex); return false; } if ($data && $data['status'] == 'success') { $zone = $data['timezone']; cache_set($key, $zone, 24 * 60 * 60); return $zone; } log_error("No timezone found for " . $ip . " via ip-api.com"); $coords = get_coordinates_by_ip($ip); if ($coords === false) { log_error("No timezone found for IP " . $ip . " (missing coordinates)"); // disaster-fallback: use our timezone: return "Etc/GMT+2"; } // ALTERNATIVE 1: // ws.geonames.org had only timeouts on 2/10/2010... // $url = "http://ws.geonames.org/timezone?lat=".$coords['latitude'].'&lng='.$coords['longitude']; $url = "http://api.geonames.org/timezone?lat=" . $coords['latitude'] . '&lng=' . $coords['longitude'] . "&username=scavix"; try { $xml = downloadData($url, false, false, 60 * 60, 2); } catch (Exception $ex) { WdfException::Log("Unable to get Timezone for " . $ip . " ({$url}) " . $ex->getMessage(), $ex); return false; } if (preg_match_all('/<timezoneId>([^<]*)<\\/timezoneId>/', $xml, $zone, PREG_SET_ORDER)) { $zone = $zone[0]; cache_set($key, $zone[1], 24 * 60 * 60); return $zone[1]; } log_error("No timezone found for " . $ip . " via geonames.org"); // ALTERNATIVE 2: $url = "http://www.earthtools.org/timezone/" . $coords['latitude'] . '/' . $coords['longitude']; try { $xml = downloadData($url, false, false, 60 * 60, 2); } catch (Exception $ex) { WdfException::Log("Unable to get Timezone for " . $ip . " ({$url})", $ex); return false; } if (preg_match_all('/<offset>([^<]*)<\\/offset>/', $xml, $zone, PREG_SET_ORDER)) { $zone = $zone[0]; $zone[1] = round($zone[1], 0); $ret = "Etc/GMT" . ($zone[1] < 0 ? $zone[1] : "+" . $zone[1]); cache_set($key, $ret, 24 * 60 * 60); return $ret; } log_error("No timezone found for " . $ip . " via earthtools.org"); // disaster-fallback: use our timezone: return "Etc/GMT+2"; }
/** * @shortcut <downloadData>($url,$postdata,$request_header,$cacheTTLsec,$request_timeout,$response_header,$cookie_file) */ function sendHTTPRequest($url, $postdata = false, $cacheTTLsec = false, &$response_header = false, $request_header = array(), $request_timeout = 120, $cookie_file = false) { return downloadData($url, $postdata, $request_header, $cacheTTLsec, $request_timeout, $response_header, $cookie_file); }
/** * Returns the timezone for an IP address. * * @param string $ip IP address to check (defaults to <get_ip_address>) * @return string Timezone identifier or false on error */ function get_timezone_by_ip($ip = false) { if ($ip === false) { $ip = $GLOBALS['current_ip_addr']; } if (starts_with($ip, "1.1 ") || starts_with($ip, "192.168.1.")) { return false; } $key = "get_timezone_by_ip." . getAppVersion('nc') . "-" . $ip; $ret = cache_get($key); if ($ret) { return $ret; } // new url with api key: $url = "http://api.ipinfodb.com/v2/ip_query.php?key=6a6ef9d4d82491036a4f3dbd465d52d2e2d5253d1285a3dda02b65752b5474f8&ip=" . $GLOBALS['current_ip_addr'] . "&timezone=true"; try { $xml = downloadData($url, false, false, 60 * 60, 2); } catch (Exception $ex) { WdfException::Log("Unable to get Timezone for " . $ip . " ({$url})", $ex); return false; } if (preg_match_all('/<TimezoneName>([^<]*)<\\/TimezoneName>/', $xml, $zone, PREG_SET_ORDER)) { $zone = $zone[0]; if ($zone[1] != "") { cache_set($key, $zone[1], 24 * 60 * 60); return $zone[1]; } } // log_error("No timezone found for ".$GLOBALS['current_ip_addr']." via ipinfodb.com"); $coords = get_coordinates_by_ip($ip); if ($coords === false) { log_error("No timezone found for IP " . $ip . " (missing coordinates)"); // disaster-fallback: use our timezone: return "Etc/GMT+2"; } // ALTERNATIVE 1: // ws.geonames.org had only timeouts on 2/10/2010... // $url = "http://ws.geonames.org/timezone?lat=".$coords['latitude'].'&lng='.$coords['longitude']; $url = "http://api.geonames.org/timezone?lat=" . $coords['latitude'] . '&lng=' . $coords['longitude'] . "&username=scendix"; try { $xml = downloadData($url, false, false, 60 * 60, 2); } catch (Exception $ex) { WdfException::Log("Unable to get Timezone for " . $ip . " ({$url}) " . $ex->getMessage(), $ex); return false; } if (preg_match_all('/<timezoneId>([^<]*)<\\/timezoneId>/', $xml, $zone, PREG_SET_ORDER)) { $zone = $zone[0]; cache_set($key, $zone[1], 24 * 60 * 60); return $zone[1]; } log_error("No timezone found for " . $ip . " via geonames.org"); // ALTERNATIVE 2: $url = "http://www.earthtools.org/timezone/" . $coords['latitude'] . '/' . $coords['longitude']; try { $xml = downloadData($url, false, false, 60 * 60, 2); } catch (Exception $ex) { WdfException::Log("Unable to get Timezone for " . $ip . " ({$url})", $ex); return false; } if (preg_match_all('/<offset>([^<]*)<\\/offset>/', $xml, $zone, PREG_SET_ORDER)) { $zone = $zone[0]; $zone[1] = round($zone[1], 0); $ret = "Etc/GMT" . ($zone[1] < 0 ? $zone[1] : "+" . $zone[1]); cache_set($key, $ret, 24 * 60 * 60); return $ret; } log_error("No timezone found for " . $ip . " via earthtools.org"); // disaster-fallback: use our timezone: return "Etc/GMT+2"; }