Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: cURL palauttaa outoa dataa (Veikkaus API)

Pentu [19.11.2014 22:27:59]

#

Moikka! Innostuin kokeilemaan itsekkin tuota veikkauksen APIa, Santtu55:n innoittamana.

Omaa versiotani olen yrittänyt toteuttaa PHP:llä, cURL -kirjastoa käyttäen.
Jostain syystä en kuitenkaan saa dataa tulostettua onnistuneesti. Alkuun sain tulostettua pelkkää tyhjää.

Ja kun otin SSL-sertifikaatin tarkistusuksen pois, vastaus näyttää tältä:

�‹��í•Mkã0�†ÿJ˜s�Qü�Û7o�´�Ò�—²ô0µE#¢H©$§-Áÿ½#ÇiCIwÓÝ�zXƒ1£�FïÃŒwP�|´ýÚÁ=®ùŒ^È �_-&Ї;ƒªêÖXB�¢"oÂ"�a�ºšöÂÕ|2#[o¸º�>��Y�Äi<ðO�J©-�ó„!�:?ýÈ�„aç0ÜÖÒÙ|‹Bâ<Þý�ä+^Ô’�ÜA¶ƒ5>�\òÒ	­¨,F'ÓÒ܈’J:œøP‹r5§÷55dÎÔœb…*�®ÚØvgg±ý%tUÙë獗ç&_\æ?¦�hú`t'_+Í€dpÛñ�•âÒGr±Z!‰DêÔ®Ô^œ�,»¯Ú«=–|Ë%)íóá#>û˜ÎW êåÊi%44䶥6m�ª�²ÑþŠt×လ”F¹Ë�QœFI�Ž ¹mú�F;¤ú�h�#2þ�m˜~k´�óËØ ´è~KvR­µ‡w�ì ªR×[nN`}¥�½‡Ê‚8L΄š�Aeá�¨�6ìǝ9ûÙ[ ºçÆž 8_Òhª¸Ü,�~�♝9ô�åЙ,ú'ˆIò­;3øºÆ

Hieman vaikea tota on käsitellä. Elikkäs, mitä teen väärin? mitä mun pitäs muokata koodissa, että pääsen käsitteleen tuota dataa?

Ohjelma on tämän näköinen:

function veikkaus_v1($game){
	$host = "https://www.veikkaus.fi";
	$header = array(
		"Accept: application/json",
		"Content-Type: application/json",
		"X-ESA-API-Key: ROBOT"
	);
	// TODO tarkastetaan syötetyt parametrit

	// Rakennetaan url
	$url = $host ."/api/v1/sport-games/draws?game-names=". $game;

	// Alustetaan cURL
	$ch = curl_init();

	// Poistetaan SSL -sertifikaatin tarkistus.
	curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);

	// säädöt ennen pyynnön suorittamista
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);	// Data palautetaan muuttujaan
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_POST, 0);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $header);	// Annetaan header -data

	// Suoritetaan pyyntö
	$data = curl_exec($ch);

	// Suljetaan cURL
	curl_close($ch);

	return $data;
}

echo veikkaus_v1("SCORE");

-tossu- [19.11.2014 22:50:52]

#

Palvelimen vastaus on gzip-pakattu, joten se ei näytä suoraan tulostettuna järkevältä. Helpoiten saat koodin toimimaan asettamalla CURLOPT_ENCODING:n.

curl_setopt($ch, CURLOPT_ENCODING, "identity");

Pentu [19.11.2014 23:19:28]

#

Kiitoksia! Niin pienestä se oli kiinni. Ja olihan tuo mainittu kun lueskeli eteenpäin tuota ReadMe -filua..

Veikkaus kirjoitti:

Veikkauksen palvelu pyrkii palauttamaan datan pakattuna aina, kun se on mahdollista. Tästä syystä palvelun käyttämistä helpottaa mikäli käytössä on kirjasto, joka osaa purkaa gzip pakatut vastaukset automaattisesti.

Metabolix [22.11.2014 11:07:30]

#

Parempi ratkaisu on asettaa tuohon asetukseen tyhjä teksti, jolloin (manuaalin mukaan) kaikki tuetut pakkaustavat ovat käytössä ja myös puretaan automaattisesti.

curl_setopt($ch, CURLOPT_ENCODING, "");

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta