The following code should return with the coordinates of the place, but it returns with a comma only....
<?php
function getCoordinates($address){
$address = str_replace(" ", "+", $address);
$url = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=$address";
$response = file_get_contents($url);
$json = json_decode($response,TRUE);
return ($json['results'][0]['geometry']['location']['lat'].",".$json['results'][0]['geometry']['location']['lng']);
}
echo getCoordinates('740 Story Rd San Jose CA 95122');
?>
I have solved half of the problem:
{ "error_message" : "You have exceeded your daily request quota for this API.", "results" : [], "status" : "OVER_QUERY_LIMIT" }
Because I had not set my API KEY i had limited access.
Can anyone show me how can i set my APIkey in php?
Related
I have a json i am fetching remotely in php,
the Json returned is as follow:
{
"base_currency_code":"USD",
"base_currency_name":"United States dollar",
"amount":"1.0000",
"updated_date":"2022-01-30",
"rates":{
"KWD":{
"currency_name":"Kuwaiti dinar",
"rate":"0.3030",
"rate_for_amount":"0.3030"
}
},
"status":"success"
}
the i try to get the specific value from key : rate :
$url='https://...';
$json = file_get_contents($url);
$obj = json_decode($json,true);
echo $obj['rates']['KWD']['rate'];
but I have no output, when I would like to have 0.3030. Why is this?
test.json
{
"base_currency_code":"USD",
"base_currency_name":"United States dollar",
"amount":"1.0000",
"updated_date":"2022-01-30",
"rates":{
"KWD":{
"currency_name":"Kuwaiti dinar",
"rate":"0.3030",
"rate_for_amount":"0.3030"
}
},
"status":"success"
}
test.php
<?php
$url='test.json';
$json = file_get_contents($url);
$obj = json_decode($json,true);
echo $obj['rates']['KWD']['rate'];
Result 0.3030
If it is not working, you cannot access the site remotely.
try it and make sure it works
<?php
$url='https......';
$json = file_get_contents($url);
echo $json;
I'm uploading a csv file and getting address field in $address variable, but when I pass $address to google maps, its showing me error,
file_get_contents(http://maps.googleapis.com/maps/api/geocode/json?address=9340+Middle+River+Street%A0%2COxford%2CMS%2C38655): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request.
I searched for its solution, I found one that to encode only address but its also not working for me...
CODE
if (!empty($address)) {
$geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($address));
$geo = json_decode($geo, true);
if ($geo['status'] = 'OK') {
if (!empty($geo['results'][0])) {
$latitude = $geo['results'][0]['geometry']['location']['lat'];
$longitude = $geo['results'][0]['geometry']['location']['lng'];
}
$mapdata['latitude'] = $latitude;
$mapdata['longitude'] = $longitude;
return $mapdata;
} else {
$mapdata['latitude'] = "";
$mapdata['longitude'] = "";
return $mapdata;
}
}
Error is at line
$geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($address));
Have I missed anything.!
Any help is much appreciated.. Thanks
you need to use google api key
function getLatLong($address){
if(!empty($address)){
//Formatted address
$formattedAddr = str_replace(' ','+',$address);
//Send request and receive json data by address
$geocodeFromAddr = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address='.$formattedAddr.'&sensor=false');
$output = json_decode($geocodeFromAddr);
//Get latitude and longitute from json data
$data['latitude'] = $output->results[0]->geometry->location->lat;
$data['longitude'] = $output->results[0]->geometry->location->lng;
//Return latitude and longitude of the given address
if(!empty($data)){
return $data;
}else{
return false;
}
}else{
return false;
}
}
Use getLatLong() function like the following.
$address = 'White House, Pennsylvania Avenue Northwest, Washington, DC, United States';
$latLong = getLatLong($address);
$latitude = $latLong['latitude']?$latLong['latitude']:'Not found';
$longitude = $latLong['longitude']?$latLong['longitude']:'Not found';
To specify a Google API key in your request, include it as the value of a key parameter.
$geocodeFromAddr = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address='.$formattedAddr.'&sensor=true_or_false&key=GoogleAPIKey');
i hope this will help you.
It looks like the problem is with your data set. The part of the url that is being encoded as %A0 by urlencode($address) is a special non-breaking space character, rather than a regular space.
See here for more information on the difference:
Difference between "+" and "%A0" - urlencoding?
The %A0 character isn't accepted in this context, but you can do a quick str_replace() on the result of urlencode() to replace all these special space characters with the + symbols that regular spaces would have resulted in.
$geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address=' . str_replace('%A0', '+', urlencode($address)));
I have added new data to my API. I want to return it as plain text
This is the API response PHP returns.
{
"apiVersion":"1.0",
"data":{
"location":"London",:
{
"pressure":"1021",
"temperature":"23",
"skytext":"Sky is Clear",
"humidity":"40",
"wind":"18.36 km/h",
"date":"07-10-2015",
"day":"Friday"
}
}
I want to return the pressure value on my html page so my users can see the reading. I am having issues displaying it.
This is my PHP api.php
require_once('./includes/config.php');
require_once('./includes/functions.php');
error_reporting(0);
header('Content-Type: text/plain; charset=utf-8;');
$city = $_GET['city'];
if(isset($city)) {
$weather = new Weather($conf['apikey'], $_GET['f']);
$weather_current = $weather->get($city, 0, 0, null, null);
$now = $weather->data(0, $weather_current);
if($now['location'] !== NULL) {
echo '{"apiVersion":"1.0", "data":{ "location":"'.$now['location'].'", "temperature":"'.$now['temperature'].'", "pressure":"'.$now['pressure'].'", "skytext":"'.$now['description'].'", "humidity":"'.$now['humidity'].'", "wind":"'.$now['windspeed'].'", "date":"'.$now['date'].'", "day":"'.$now['day'].'" } }';
} else {
echo '{"apiVersion":"1.0", "data":{ "error":"The \'city\' requested is not available, make sure it\'s a valid city." } }';
}
} else {
echo '{"apiVersion":"1.0", "data":{ "error":"You need to specify the city parameter" } }';
}
In order to fetch data from a JSON source you should parse the data with the json_decode() method. You can then use the second parameter to parse it into an array. If you omit the second parameter you would get an array of objects.
Important: It seems your JSON has a syntax error too. I have added a weather key before the weather information.
$data = '{
"apiVersion":"1.0",
"data":{
"location":"London",
"weather":{ // Notice the new key!
"pressure":"1021",
"temperature":"23",
"skytext":"Sky is Clear",
"humidity":"40",
"wind":"18.36 km/h",
"date":"07-10-2015",
"day":"Friday"
}
}
}';
$json = json_decode($data, true);
You should then be able to fetch the pressure as an associative array.
$pressure = $json['data']['weather']['pressure']; // Equals: 1021
Hope this can help you, happy coding!
First of all, you need to validate your JSON. It is missing some key things that will keep you from being able to parse it. Use JSONLint to verify your JSON.
After modification the JSON to make it valid I did the following:
$json = '{"apiVersion":"1.0", "data":{ "location":"London", "data":{ "pressure":"1021", "temperature":"23", "skytext":"Sky is Clear", "humidity":"40", "wind":"18.36 km/h", "date":"07-10-2015", "day":"Friday" }}}';
$obj_style = json_decode($json);
$array_style = json_decode($json, true);
echo $obj_style->data->data->pressure;
echo $array_style['data']['data']['pressure'];
Using json_decode() I was able to setup a way to parse the JSON two ways, once as an object and once as an array (adding the true flag returns the results as an array).
From there all you have to do is drill town to the bits of information that you want to display.
I am using ipinfo.io for some simple lookups, but I have one little problem with echo $details->org; It outputs "AS15169 Google Inc.", but I want only the ISP part so "Google Inc.".
Example code:
<?
function ip_details($ip) {
$json = file_get_contents("http://ipinfo.io/{$ip}");
$details = json_decode($json);
return $details;
}
$details = ip_details($_SERVER['REMOTE_ADDR']);
echo $details->org;
?>
Example output: http://ipinfo.io/8.8.8.8/org
Need some help, anyone?
If you just want the org field you can query http://ipinfo.io/{$ip}/org which will give you the org as a string, which will save you from having to parse any JSON:
$org = file_get_contents("http://ipinfo.io/{$ip}/org");
We can split the org string into the ASN and name by exploding on the first space:
list($asn, $name) = explode(" ", $org, 2);
Putting it all together we get:
function org_name($ip) {
$org = file_get_contents("http://ipinfo.io/{$ip}/org");
list($asn, $name) = explode(" ", $org, 2);
return $name;
}
echo org_name("8.8.8.8");
// => Google Inc.
echo org_name("189.154.55.170");
// => Uninet S.A. de C.V.
echo org_name("172.250.147.230");
// => Time Warner Cable Internet LLC
See http://ipinfo.io/developers for more details about the different endpoints, and rate limits.
Use regex to find anything between word boundaries that starts with AS and has one or more digits followed by a space and then replace it with a blank string.
I'm not great with regex so someone might come in with a better solution that this. But I tested it at PHP Live Regex and it worked for the few test cases I tried.
<?
function ip_details($ip) {
$json = file_get_contents("http://ipinfo.io/{$ip}");
$details = json_decode($json);
return $details;
}
$details = ip_details($_SERVER['REMOTE_ADDR']);
$org = preg_replace('/\bAS\d+\s\b/i', '', $details->org);
echo $org;
?>
I have a problem when I try to convert an address into latitude and longitude via google service. My address is 1456 sok. no: 10/1 kat:8 Alsancak. The problem is when I write this address to url, correct result is returned, however when I use the php code below, I get zero results.
No problem with result :
http://maps.google.com/maps/api/geocode/json?address=1456%20sok.%20no:%2010/1%20kat:8%20Alsancak&sensor=true
Problem with php :
<?php
header('Content-Type: text/html; charset=utf-8');
getGoogleAddressCoordinates("1456 sok. no: 10/1 kat:8 Alsancak");
function getGoogleAddressCoordinates($address)
{
//$address = urlencode($address);
$address = str_replace(" ", "%20", $address);
$request = file_get_contents('http://maps.google.com/maps/api/geocode/json?address=' . $address . '&sensor=true');
$json = json_decode($request, true);
print_r ($json);
}
?>
The address 1456 sok. no: 10/1 kat:8 Alsancak is not valid. If you try it in google maps you get zero results, too.
Try it with: 1456 sok. 10/1 Alsancak and uncomment the line $address = urlencode($address); and clear the line $address = str_replace(" ", "%20", $address);.
The url should look like:
http://maps.google.com/maps/api/geocode/json?address=1456%20sok.%2010%2F1%20Alsancak&sensor=true