1.你要注册一个高德开放平台的账号,创建一个项目,然后获取app_key.
2.下面是将调用的数据封装在了服务层,使用的时候只需要调用这个Services就可以了。
namespace App\Services;
use GuzzleHttp\Client;
class WeatherService
{
/**
* @var string
*/
protected $key;
/**
* @var array
*/
protected $guzzleOptions = [];
/**
* Weather constructor.
*
*/
public function __construct()
{
$this->key = config('app.api_key', 'xxxxxxxxxxxxxx');
}
/**
* @return \GuzzleHttp\Client
*/
public function getHttpClient()
{
return new Client($this->guzzleOptions);
}
/**
* @param array $options
*/
public function setGuzzleOptions(array $options)
{
$this->guzzleOptions = $options;
}
/**
* @param string $city
* @param string $format
*
* @return \Psr\Http\Message\ResponseInterface
*
* @throws \Exception
*/
public function getLiveWeather($city, $format = 'json')
{
return $this->getWeather($city, 'base', $format);
}
/**
* @param string $city
* @param string $format
*
* @return \Psr\Http\Message\ResponseInterface
*
* @throws \Exception
*/
public function getForcastsWeather($city, $format = 'json')
{
return $this->getWeather($city, 'all', $format);
}
/**
* @param string $city
* @param string $type
* @param string $format
*
* @return \Psr\Http\Message\ResponseInterface
*
* @throws \Exception
*/
public function getWeather($city, $type = 'base', $format = 'json')
{
$url = 'https://restapi.amap.com/v3/weather/weatherInfo';
if (!in_array(strtolower($format), ['xml', 'json'])) {
throw new \Exception('Invalid response format: '.$format);
}
if (!in_array(strtolower($type), ['base', 'all'])) {
throw new \Exception('Invalid type value(base/all): '.$type);
}
$query = array_filter([
'key' => $this->key,
'city' => $city,
'output' => $format,
'extensions' => $type,
]);
try {
$response = $this->getHttpClient()->get($url, [
'query' => $query,
])->getBody()->getContents();
return 'json' === $format ? \json_decode($response, true) : $response;
} catch (\Exception $e) {
throw new \Exception($e->getMessage(), $e->getCode(), $e);
}
}
}