Δι@ύγεια OpenData API – PHP Version

Δοκίμασα να κάνω μια διαφορετική δοκιμή να χρησιμοποιήσω το OpenData API της δι@ύγειας σε php αυτή τη φορά μήπως και έχω περισσότερη τύχη. Μετά από δοκιμές και άπειρα “500 internal errors” κατέληξα σε αυτά τα δύο κομμάτια κώδικα (μη ρωτήσετε που τα βρήκα, ούτε που θυμάμαι, κάπου στο internet) με όνομα works που δείχνει να δουλεύει και με όνομα fails που αρνείται πεισματικά και επιστρέφει πάντα 500 internal error.

<?php 
$ada = 'Β4ΩΛΧ-ΨΚΒ'; 
$url = 'http://opendata.diavgeia.gov.gr/api/decisions?ada='.urlencode($ada); 

function works($url) 
{ 
   $ch = curl_init(); 
   curl_setopt($ch, CURLOPT_URL,$url); 
   curl_setopt($ch, CURLOPT_HEADER, false); 
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
   $xmlstr = curl_exec($ch); 
   curl_close($ch); 

   return $xmlstr; 
} 

function fails($url) 
{ 
   $xmlstr = file_get_contents($url); //<-- line 19
   return $xmlstr; 
} 

$xml1 = simplexml_load_string(works($url)); 
$xml2 = simplexml_load_string(fails($url)); 

print_r($xml1); 
print_r($xml2); 
?>

Στο ini to allow_url_fopen το έχω on. Εκανα και το allow_url_include on (που δεν χρειάζεται αλλά να υπάρχει), έβαλα και το user_agent=”PHP” μιας και το ανέφερε και αυτό κάποιος στο documentation της file_get_contents.

Αυτό που παίρνω όταν τρέχω το αρχείο από κονσόλα είναι:

[dva@test ~]# php diavgeia.php 
PHP Warning:  file_get_contents(http://opendata.diavgeia.gov.gr/api/decisions?ada=%CE%924%CE%A9%CE%9B%CE%A7-%CE%A8%CE%9A%CE%92): failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error 
 in /var/www/html/test/xml/diavgeia.php on line 19 
SimpleXMLElement Object 
( 
    [queryInfo] => SimpleXMLElement Object 
        ( 
            [count] => 1 
            [from] => 1 
            [order] => desc 
            [total] => 1 
        ) 
)

Το οποίο δείχνει ότι η function works πέρασε, η fails κράσαρε κάτι στον server της διαύγειας, και μετά τυπώνει το xml που διάβασε η works, (για τη fails δε δείχνει τίποτα).

One Comment

  1. Τελικά έτσι έπαιξε και η function fails:
    function fails($url)
    {
    $opts = array(
    'http'=>array(
    'method'=>"GET",
    'header'=>"Connection:Keep-AlivernAccept:*/*rn"
    )
    );

    $context = stream_context_create($opts);
    $xmlstr = file_get_contents($url,false,$context);
    return $xmlstr;
    }

    Τώρα γιατί θέλει σώνει και καλά να του δώσεις options και context δεν έχω ιδέα. Βέβαια δεν πάει όσο γρήγορα πάει με curl, αλλά “φαίνεται να παίζει”.

    Αν υπάρχει καμιά ιδέα γιατί γίνεται αυτό καλοδεχούμενη…