Files
PAA/ephemeris_engine.php
2026-03-10 07:01:52 +05:45

128 lines
3.4 KiB
PHP

<?php
require_once 'astro_functions.php';
const SWISSEPH_API_BASE_URL = 'http://bibgit.com:8081/api.php';
const SWISSEPH_API_TIMEOUT = 20;
function buildSwissephApiUrl(
string $date,
string $time,
float $latitude,
float $longitude,
string $timezone = 'Asia/Kathmandu'
): string {
return SWISSEPH_API_BASE_URL
. '?date=' . urlencode($date)
. '&time=' . urlencode($time)
. '&timezone=' . urlencode($timezone)
. '&latitude=' . urlencode((string)$latitude)
. '&longitude=' . urlencode((string)$longitude);
}
function fetchRemoteSwissephResponse(
string $date,
string $time,
float $latitude,
float $longitude,
string $timezone = 'Asia/Kathmandu'
): array {
$url = buildSwissephApiUrl($date, $time, $latitude, $longitude, $timezone);
if (function_exists('curl_init')) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, SWISSEPH_API_TIMEOUT);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$response = curl_exec($ch);
$httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlErr = curl_error($ch);
curl_close($ch);
if ($response === false || $httpCode !== 200) {
return [
'success' => false,
'error' => $curlErr ?: ('Remote API returned HTTP ' . $httpCode),
'data' => []
];
}
} else {
$context = stream_context_create([
'http' => [
'timeout' => SWISSEPH_API_TIMEOUT
]
]);
$response = @file_get_contents($url, false, $context);
if ($response === false) {
return [
'success' => false,
'error' => 'Could not connect to remote Swiss Ephemeris API.',
'data' => []
];
}
}
$decoded = json_decode($response, true);
if (!is_array($decoded)) {
return [
'success' => false,
'error' => 'Invalid JSON received from remote API.',
'data' => []
];
}
return [
'success' => true,
'error' => '',
'data' => $decoded
];
}
function getRealPlanetaryData(
string $date,
string $time,
float $latitude,
float $longitude,
string $timezone = 'Asia/Kathmandu'
): array {
$remote = fetchRemoteSwissephResponse($date, $time, $latitude, $longitude, $timezone);
if (!$remote['success']) {
return [
'planets' => [],
'ascendant' => null,
'error' => $remote['error']
];
}
$data = $remote['data'];
$results = [];
if (isset($data['planets']) && is_array($data['planets'])) {
foreach ($data['planets'] as $planet) {
if (!is_array($planet) || !isset($planet['key']) || !isset($planet['longitude'])) {
continue;
}
if (!in_array($planet['key'], PLANET_KEYS, true)) {
continue;
}
$results[] = [
'key' => $planet['key'],
'longitude' => normalizeLongitude((float)$planet['longitude'])
];
}
}
return [
'planets' => $results,
'ascendant' => isset($data['ascendant']) ? (float)$data['ascendant'] : null,
'error' => ''
];
}