laravel服务层使用高德天气的api
1.你要注册一个高德开放平台的账号,创建一个项目,然后获取app_key.
2.下面是将调用的数据封装在了服务层,使用的时候只需要调用这个Services就可以了。
namespace AppServices;
use GuzzleHttpClient;
class WeatherService
{
/**
* @var string
*/
protected $key;
/**
* @var array
*/
protected $guzzleOptions = [];
/**
* Weather constructor.
*
*/
public function __construct()
{
$this->key = config(app.api_key, xxxxxxxxxxxxxx);
}
/**
* @return GuzzleHttpClient
*/
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 PsrHttpMessageResponseInterface
*
* @throws Exception
*/
public function getLiveWeather($city, $format = json)
{
return $this->getWeather($city, base, $format);
}
/**
* @param string $city
* @param string $format
*
* @return PsrHttpMessageResponseInterface
*
* @throws Exception
*/
public function getForcastsWeather($city, $format = json)
{
return $this->getWeather($city, all, $format);
}
/**
* @param string $city
* @param string $type
* @param string $format
*
* @return PsrHttpMessageResponseInterface
*
* @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);
}
}
}
上一篇:
IDEA上Java项目控制台中文乱码
