在這篇文章中,我們將探討如何將PHP 的date_sunset()函數封裝成一個REST API。這樣,其他應用或系統就可以通過HTTP 請求來獲取日落時間,而無需直接運行PHP 腳本。
PHP 的date_sunset()函數用於計算指定地點的日落時間。該函數返回一個Unix 時間戳,表示當天的日落時刻。其基本用法如下:
$timestamp = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude);
echo "Sunset time: " . date("Y-m-d H:i:s", $timestamp);
在上面的例子中, $latitude和$longitude表示位置的經緯度, SUNFUNCS_RET_TIMESTAMP表示返回Unix 時間戳格式。
將date_sunset()封裝成REST API 後,您可以將該功能提供給其他應用程序,允許它們通過標準的HTTP 請求來獲取日落時間。這種方法適用於想要在沒有PHP 環境的情況下訪問日落時間數據的場景,或者將該功能集成到其他服務中。
我們將使用Slim Framework,它是一個輕量級的PHP 框架,特別適用於構建RESTful API。首先,確保您的開發環境中已經安裝了Composer 依賴管理工具,並安裝Slim Framework。
通過Composer 安裝Slim Framework:
composer require slim/slim:"4.*"
composer require slim/psr7
接下來,我們創建一個簡單的PHP 腳本,將date_sunset()函數封裝成一個API。
<?php
require 'vendor/autoload.php';
use Slim\Factory\AppFactory;
$app = AppFactory::create();
// 定義一個 REST API 路由
$app->get('/sunset', function ($request, $response, $args) {
// 獲取請求參數
$latitude = $request->getQueryParams()['latitude'] ?? 0;
$longitude = $request->getQueryParams()['longitude'] ?? 0;
// 確保經緯度有效
if (!is_numeric($latitude) || !is_numeric($longitude)) {
$response->getBody()->write(json_encode(['error' => 'Invalid latitude or longitude']));
return $response->withStatus(400)->withHeader('Content-Type', 'application/json');
}
// 獲取日落時間
$timestamp = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude);
// 格式化輸出
$dateTime = date("Y-m-d H:i:s", $timestamp);
// 返回 JSON 響應
$response->getBody()->write(json_encode(['sunset' => $dateTime]));
return $response->withHeader('Content-Type', 'application/json');
});
// 運行應用
$app->run();
在這個代碼片段中,我們使用Slim Framework 創建了一個簡單的REST API 路由/sunset ,該路由接受latitude和longitude作為查詢參數,計算並返回日落時間。返回的結果是JSON 格式,包含了計算出來的日落時間。
啟動該PHP 腳本後,您可以通過以下URL 來測試API:
http://m66.net/sunset?latitude=34.0522&longitude=-118.2437
這將返回類似以下的JSON 響應:
{
"sunset": "2025-04-26 19:42:00"
}
如果您希望將這個API 部署到生產環境,您可以選擇將其託管在任何支持PHP 的服務器上,或者使用雲服務(例如AWS、Heroku 等)。只要您的服務器支持PHP 和HTTP 請求,就可以運行此API。
您可以根據需要擴展此API。例如,您可以添加更多查詢參數,如日期、返回不同格式的數據(如Unix 時間戳或UTC 時間),或者通過認證機制保護API,使其只能被授權用戶調用。