[solved] Διαύγεια opendata σε php

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

[solved] Διαύγεια opendata σε php

Δημοσίευση από dva_dev » 24 Μάιος 2012 22:18

Προσπαθώ να πάρω μερικές πληροφορίες για συγκεκριμένα έγγραφα από το web service της διαύγειας, σύμφωνα με αυτά που αναφέρονται στο http://opendata.diavgeia.gov.gr/

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

Κώδικας: Επιλογή όλων

<?php
$ada = 'Β4ΩΛΧ-ΨΚΒ';
$url = 'http&#58;//opendata.diavgeia.gov.gr/api/decisions?ada='.urlencode&#40;$ada&#41;;

function works&#40;$url&#41;
&#123;
	$ch = curl_init&#40;&#41;;
	curl_setopt&#40;$ch, CURLOPT_URL,$url&#41;;
	curl_setopt&#40;$ch, CURLOPT_HEADER, false&#41;;
	curl_setopt&#40;$ch, CURLOPT_RETURNTRANSFER, true&#41;;
	$xmlstr = curl_exec&#40;$ch&#41;;
	curl_close&#40;$ch&#41;;
	
	return $xmlstr;
&#125;

function fails&#40;$url&#41;
&#123;
	$xmlstr = file_get_contents&#40;$url&#41;;
	return $xmlstr;
&#125;

$xml1 = simplexml_load_string&#40;works&#40;$url&#41;&#41;;
$xml2 = simplexml_load_string&#40;fails&#40;$url&#41;&#41;;

print_r&#40;$xml1&#41;;
print_r&#40;$xml2&#41;;
?>
Υπάρχει κάποιος που να έχει ασχοληθεί με τη διαύγεια ή να γνωρίζει αυτό το κάτι που δεν ξέρω στην php και να μπορεί να εξηγήσει γιατί το ένα παίζει ενώ το άλλο όχι;


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

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

Κώδικας: Επιλογή όλων

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

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

Αντίστοιχο πρόβλημα έχω και με παρόμοιο κώδικα σε C# (.net 2.0) με χειρότερα αποτελέσματα).
Τουλάχιστον σε php μπορεί να παίρνω 500 internal server error, αλλά μπορώ από web browser να δω τη σελίδα του web service και να πάρω το xml, ενώ σε C# κρεμάει εντελώς το web service. :evil:
Τελευταία επεξεργασία από το μέλος dva_dev την 25 Μάιος 2012 01:05, έχει επεξεργασθεί 1 φορά συνολικά.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

[solved] Διαύγεια opendata σε php

Δημοσίευση από Apostolis_38 » 24 Μάιος 2012 23:31

"Alternatively, you can use the file_get_contents function remotely, but many hosts don't allow this."

Από εδώ: http://davidwalsh.name/download-urls-content-php-curl

Οπότε μάλλον πρέπει να μείνεις στη curl.
Τώρα γιατί δεν παίζει. :-?

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

[solved] Διαύγεια opendata σε php

Δημοσίευση από dva_dev » 25 Μάιος 2012 00:15

Apostolis_38 έγραψε:"Alternatively, you can use the file_get_contents function remotely, but many hosts don't allow this."
Αυτό αναφέρεται στο ότι θα πρέπει να βάλεις στο php.ini το allow_url_fopen=on

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

[solved] Διαύγεια opendata σε php

Δημοσίευση από Apostolis_38 » 25 Μάιος 2012 00:20

Ναι, από την απάντησή σου φαντάζομαι πως το έχει κάνει ήδη.
Δυστυχώς δεν έχω βρεί κάτι άλλο που να μπορεί να σε βοηθήσει.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

[solved] Διαύγεια opendata σε php

Δημοσίευση από dva_dev » 25 Μάιος 2012 01:04

Τελικά έτσι έπαιξε

Κώδικας: Επιλογή όλων

function fails&#40;$url&#41;
&#123;
   $opts = array&#40;
     'http'=>array&#40;
       'method'=>"GET",
       'header'=>"Connection&#58;Keep-Alive\r\nAccept&#58;*/*\r\n"
     &#41;
   &#41;;

   $context = stream_context_create&#40;$opts&#41;;
   $xmlstr = file_get_contents&#40;$url,false,$context&#41;;
   return $xmlstr;
&#125;
Τώρα γιατί θέλει σώνει και καλά να του δώσεις options και context δεν έχω ιδέα. Βέβαια δεν πάει όσο γρήγορα πάει με curl, αλλά "φαίνεται να παίζει". :-?

Ευχαριστώ όσους έκαψαν μερικές χιλιάδες εγκεφαλικά κύτταρα και αν υπάρχει καμιά πρόταση ακόμα καλοδεχούμενη.

Μένει να δώ το άλλο σε C# πω θα ξεπεράσω...

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες