APISMgr.php
3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
/**
* @class APISMgr
* @version $Id: APISMgr.php 2101 2014-02-19 10:12:21Z natacha $
*
*/
class APISMgr
{
function __construct()
{
}
function jdayToUTC($jday)
{
return round(($jday - 2440587.5) * 86400);
}
function jday($t) {
return $t / 86400 + 2440587.5;
}
function get($planet, $startTime, $stopTime)
{
$planetNewName = ucfirst($planet);
list($y, $mo, $d, $h, $mi, $s) = sscanf($startTime,"%4d-%02d-%02dT%02d:%02d:%02d");
$start = mktime($h,$mi,$s,$mo,$d,$y);
list($y, $mo, $d, $h, $mi, $s) = sscanf($stopTime,"%4d-%02d-%02dT%02d:%02d:%02d");
$stop = mktime($h,$mi,$s,$mo,$d,$y);
$req = "SELECT * FROM apis.epn_core";
$req .= " WHERE target_name='".$planetNewName."'";
$req .= " AND dataproduct_type='im'";
$req .= " AND time_min>".$this->jday($start);
$req .= " AND time_min<".$this->jday($stop);
$req .= " ORDER BY time_min";
$postfields = array(
'REQUEST' => 'doQuery',
'LANG' => 'ADQL',
'QUERY' => $req,
'TIMEOUT' => '5',
'FORMAT' => 'VOTable/td'
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, EPNTAP_APIS);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
$req_res = curl_exec($curl);
curl_close($curl);
if (!$req_res)
return array('success' => false, 'message' => 'Error during TAP request');
$xml = new DOMDocument();
$xml->preserveWhiteSpace = false;
$xml->formatOutput = true;
$xml->loadXML($req_res);
$fields = $xml->getElementsByTagName('FIELD');
$tabledatas = $xml->getElementsByTagName('TABLEDATA');
$result = array();
$crtDate = 0;
$folderIndex = -1;
//$log = fopen(USERWSDIR."log","w");
foreach ($tabledatas as $tabledata)
{
$trs = $tabledata->getElementsByTagName('TR');
foreach($trs as $tr)
{
$data = array();
$tds = $tr->getElementsByTagName('TD');
//fprintf($log,"=> ---------\n");
for ($i = 0; $i < $tds->length; $i++)
{
if ($fields->item($i)->getAttribute('ID') == 'time_min')
{
$time = $this->jdayToUTC($tds->item($i)->nodeValue);
$time = $time - ($time%86400);
//fprintf($log,"=> %s\n",$time);
if ($time != $crtDate)
{
$crtFolder = array('date' => date("Y-m-d H:i:s", $time), 'images' => array());
$crtDate = $time;
array_push($result,$crtFolder);
$folderIndex++;
}
}
if ($fields->item($i)->getAttribute('unit') == 'd')
{
$time = $this->jdayToUTC($tds->item($i)->nodeValue);
$data[$fields->item($i)->getAttribute('ID')] = date("Y-m-d H:i:s", $time);
//fprintf($log,"%s %s %s\n",$fields->item($i)->getAttribute('ID'),$tds->item($i)->nodeValue,$data[$fields->item($i)->getAttribute('ID')]);
}
else
$data[$fields->item($i)->getAttribute('ID')] = $tds->item($i)->nodeValue;
//fprintf($log,"%s = %s\n",$fields->item($i)->getAttribute('ID'),$data[$fields->item($i)->getAttribute('ID')]);
}
$data['name'] = basename($data['access_url']);
array_push($result[$folderIndex]['images'],$data);
}
}
return array('success' => true, 'result' => $result);
}
}
/*$tapMgr = new APISMgr();
$res = $tapMgr->get("uranus","1995-08-22T00:00:00","1995-08-23T00:00:00");*/
?>