mirror of
https://github.com/Terranom674/Piwigo_Bratonien_Tools.git
synced 2026-09-19 19:54:31 +00:00
Accept XML responses in connector runtime
This commit is contained in:
@@ -21,7 +21,7 @@ function http_request($url, array $fields, array $headers = array(), $cookie_fil
|
|||||||
CURLOPT_CONNECTTIMEOUT => 10,
|
CURLOPT_CONNECTTIMEOUT => 10,
|
||||||
CURLOPT_TIMEOUT => 900,
|
CURLOPT_TIMEOUT => 900,
|
||||||
CURLOPT_FOLLOWLOCATION => false,
|
CURLOPT_FOLLOWLOCATION => false,
|
||||||
CURLOPT_USERAGENT => 'Bratonien-NC-Connector/0.9.3.17',
|
CURLOPT_USERAGENT => 'Bratonien-NC-Connector/0.9.3.18',
|
||||||
);
|
);
|
||||||
if ($headers)
|
if ($headers)
|
||||||
{
|
{
|
||||||
@@ -51,12 +51,67 @@ function http_request($url, array $fields, array $headers = array(), $cookie_fil
|
|||||||
return (string)$body;
|
return (string)$body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function xml_value_sync(SimpleXMLElement $node)
|
||||||
|
{
|
||||||
|
$children = $node->children();
|
||||||
|
if (count($children) === 0)
|
||||||
|
{
|
||||||
|
return (string)$node;
|
||||||
|
}
|
||||||
|
$result = array();
|
||||||
|
foreach ($children as $name => $child)
|
||||||
|
{
|
||||||
|
$value = xml_value_sync($child);
|
||||||
|
if (array_key_exists($name, $result))
|
||||||
|
{
|
||||||
|
if (!is_array($result[$name]) || !array_is_list($result[$name]))
|
||||||
|
{
|
||||||
|
$result[$name] = array($result[$name]);
|
||||||
|
}
|
||||||
|
$result[$name][] = $value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$result[$name] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
function decode_ws($body)
|
function decode_ws($body)
|
||||||
{
|
{
|
||||||
$decoded = json_decode((string)$body, true);
|
$decoded = json_decode((string)$body, true);
|
||||||
if (!is_array($decoded))
|
if (!is_array($decoded))
|
||||||
{
|
{
|
||||||
fail_sync('Piwigo lieferte keine gueltige JSON-Antwort.');
|
if (!function_exists('simplexml_load_string'))
|
||||||
|
{
|
||||||
|
fail_sync('Piwigo lieferte XML, aber SimpleXML ist nicht verfuegbar.');
|
||||||
|
}
|
||||||
|
$previous = libxml_use_internal_errors(true);
|
||||||
|
$xml = simplexml_load_string((string)$body);
|
||||||
|
libxml_clear_errors();
|
||||||
|
libxml_use_internal_errors($previous);
|
||||||
|
if ($xml === false || $xml->getName() !== 'rsp')
|
||||||
|
{
|
||||||
|
fail_sync('Piwigo lieferte weder gueltiges JSON noch eine gueltige XML-Webservice-Antwort.');
|
||||||
|
}
|
||||||
|
$decoded = array('stat'=>(string)$xml['stat']);
|
||||||
|
foreach ($xml->children() as $name => $child)
|
||||||
|
{
|
||||||
|
$value = xml_value_sync($child);
|
||||||
|
if (array_key_exists($name, $decoded))
|
||||||
|
{
|
||||||
|
if (!is_array($decoded[$name]) || !array_is_list($decoded[$name]))
|
||||||
|
{
|
||||||
|
$decoded[$name] = array($decoded[$name]);
|
||||||
|
}
|
||||||
|
$decoded[$name][] = $value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$decoded[$name] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (($decoded['stat'] ?? '') !== 'ok')
|
if (($decoded['stat'] ?? '') !== 'ok')
|
||||||
{
|
{
|
||||||
@@ -176,7 +231,7 @@ try
|
|||||||
{
|
{
|
||||||
$headers = array(
|
$headers = array(
|
||||||
'X-PIWIGO-API: '.$api['key_id'].':'.$api['key_secret'],
|
'X-PIWIGO-API: '.$api['key_id'].':'.$api['key_secret'],
|
||||||
'Accept: application/json',
|
'Accept: application/json, text/xml;q=0.9',
|
||||||
'Content-Type: application/x-www-form-urlencoded',
|
'Content-Type: application/x-www-form-urlencoded',
|
||||||
);
|
);
|
||||||
decode_ws(http_request(
|
decode_ws(http_request(
|
||||||
@@ -220,7 +275,7 @@ try
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$login = decode_ws(http_request(
|
decode_ws(http_request(
|
||||||
$base_url.'/ws.php?format=json',
|
$base_url.'/ws.php?format=json',
|
||||||
array('method'=>'pwg.session.login', 'username'=>$fallback_user, 'password'=>$fallback_password),
|
array('method'=>'pwg.session.login', 'username'=>$fallback_user, 'password'=>$fallback_password),
|
||||||
array(),
|
array(),
|
||||||
|
|||||||
Reference in New Issue
Block a user