[TUTORIAL] Pobieranie danych z API skrytpem PHP

User avatar
Lector
Posts: 2469
Joined: Fri Nov 17, 2017 2:26 pm
Location: Poznań
Has thanked: 13 times
Been thanked: 24 times

Post

Podzielę się w jaki sposób ja pobieram dane z API aby prezentować temperatury na stronie WWW https://pool.lector.top/

Potrzebny jest TOKEN do naszego konta który generujemy pod adresem https://cloud.supla.org/security/personal-access-tokens
Podajemy jego nazwę i w okienku kanał zaznaczamy odczyt, zapisujemy i kopiujemy ciąg znaków który się pokażę.

Tworzymy skrypt supla.php

Code: Select all

<?php
// TOKEN DO KOMUNIKACJI Z SEREWREM SUPLA 
$token = "nasz_token";

// ID TEMPERATURY 
$temp = 0000; // podaj swój numer kanału

// KOD DO POBIERANIA DANYCH
$serverUrl = base64_decode(explode('.', $token)[1]);
$ch = curl_init($serverUrl . '/api/v3/channels?include=state');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'accept: application/json',
   'Authorization: Bearer ' . $token
   ));
$data = curl_exec($ch);
$data = json_decode($data, true);
curl_close($ch);

// SPRAWDANIE BŁĘDÓW, JEŚLI SĄ
if (isset($data['error'])) {
	$error = $data['error'];
	$info = $data['error_description'];
} 
if (isset($data['status'])) {
	$error = $data['status'];
	$info = $data['message'];
}

// FUNKCJA SZUKANIA KANAŁU PO ID
function searchByValue($id, $array) {
	foreach ($array as $key => $val) {
		if ($val['id'] === $id) {
			$resultSet['key'] = $key;
			$resultSet['id'] = $val['id'];
			return $resultSet;
		}
	}
	return null;
}

// ODCZYT TEMPERATURY JEŚLI NIE MA BŁĘDÓW 
if (empty($error)) {

	// TABLICA Z DANYMI
	// print_r($data); // usuń // na początku linii, aby była bardziej czytelna po uruchomieniu pliku kliknij prawym klawiszem myszy i pokaż źródło
	
	$ID_temp = searchByValue($temp, $data)['key'];
	$connect = $data[$ID_temp]['state']['connected'];
	
	if ($connect == true) {
		//TA ZMIENNA BĘDZIE NASZĄ AKTUALNĄ TEMPERATURĄ
		$temperatura = $data[$ID_temp]['state']['temperature'];
		
		//POKAŻ TEMPERATURĘ
		echo $temperatura; // dodaj // na początku linii aby ukryć jeżeli chcesz zobaczy tylko dane z  tablicy

	} else {
		echo "Brak połączenia z urządzeniem.";
	}
} else {
	// KOMUNIKAT BŁĘDU JEŚLI JEST
	echo $info;
}	
?>
Naszą zmienną możemy zapisać do bazy danych i wykorzystać do czego mamy ochotę.
Zmienna $data jest to tablica i można z niej pobrać inne dane.
Po podstawieniu swoich danych i wrzuceniu pliku na serwer z PHP naszym oczom ukaże się aktualna temperatura z wybranego kanału.
Last edited by Lector on Thu May 29, 2025 7:23 am, edited 8 times in total.
Niespełniony automatyk. :mrgreen:
https://3d-lamp.photos/
https://pool.lector.top/
User avatar
vajera
Posts: 7285
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 288 times
Been thanked: 161 times

Post

Super! Krok po kroku, dobrze opisany kod, wszystko jasne.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
Lector
Posts: 2469
Joined: Fri Nov 17, 2017 2:26 pm
Location: Poznań
Has thanked: 13 times
Been thanked: 24 times

Post

@vajera dzięki za opinie :mrgreen:

Dla osób które nie bardzo wiedzą jak się dobrać do innych danych, dodałem linię

Code: Select all

	// TABLICA Z DANYMI
	// print_r($data); // usuń // na początku linii, aby była bardziej czytelna po uruchomieniu pliku kliknij prawym klawiszem myszy i pokaż źródło
aby ułatwić podgląd jakie dane możemy sobie pobrać i przetwarzać.

Oczywiście jak będą jakie problemy, pytania chętnie pomogę.
Niespełniony automatyk. :mrgreen:
https://3d-lamp.photos/
https://pool.lector.top/
User avatar
fracz
Posts: 2342
Joined: Fri Oct 28, 2016 10:56 pm
Location: Kraków
Has thanked: 4 times
Been thanked: 6 times

Post

To ja zdradzę sekret, że zawartość tokenu po kropce to jest zakodowany w base64 pełny adres serwera, z którego token pochodzi. W takich skryptach i integracjach można więc podawać tylko token, a adres może odkryć się sam.

Code: Select all

$serverUrl = base64_decode(explode('.', $token)[1]);
User avatar
Lector
Posts: 2469
Joined: Fri Nov 17, 2017 2:26 pm
Location: Poznań
Has thanked: 13 times
Been thanked: 24 times

Post

Ooo, dzięki za info.
Kod uaktualniłem.
Niespełniony automatyk. :mrgreen:
https://3d-lamp.photos/
https://pool.lector.top/
User avatar
Lector
Posts: 2469
Joined: Fri Nov 17, 2017 2:26 pm
Location: Poznań
Has thanked: 13 times
Been thanked: 24 times

Post

Jako ze pogoda nie sprzyja, to wymyśliłem sobie zrobienie porównania rok do roku.
W lipcu będzie ciekawiej :mrgreen:
https://pool.lector.top/months.html
Niespełniony automatyk. :mrgreen:
https://3d-lamp.photos/
https://pool.lector.top/

Return to “FAQ / Jak to zrobić”