PHP: $server_IP = "example.com";$server_port = 19132;$MCAPI = json_decode(file_get_contents("http://mcapi.ca/query/" . $server_IP . ":" . $server_port . "/mcpe"));$online_players = $MCAPI->players->online;foreach($online_players as $player){ // code here...} I suggest you not to run this on the main thread, as this WILL cause your server to stop for a few seconds.
I don't suggest working with an API of someone else. What if this site is down? What if it gets shut down? Better create your own query or simply use MySQL.
This is the way i do it (the doQuery function is not fully written by me though) And please note that this code is in a async task PHP: private function doQuery($ip, $port){ echo("doQuery:\n"); $sock = @fsockopen("udp://".$ip,$port); if(!$sock){return [-1, NULL];} socket_set_timeout($sock, 0, 500000); if([email protected]fwrite($sock, "\xFE\xFD\x09\x10\x20\x30\x40\xFF\xFF\xFF\x01")){return [0, NULL];} $challenge = fread($sock, 1400); if(!$challenge){return [0, NULL];} $challenge = substr(preg_replace("/[^0-9\-]/si", "", $challenge ), 1); $query = sprintf( "\xFE\xFD\x00\x10\x20\x30\x40%c%c%c%c\xFF\xFF\xFF\x01", ($challenge >> 24), ($challenge >> 16), ($challenge >> 8), ($challenge >> 0) ); if([email protected]fwrite($sock, $query)){return [0, NULL];} $response = array(); for($x = 0; $x < 2; $x++){ $response[] = @fread($sock,2048); } if($this->debug){ var_dump($response);# } $response = implode($response); $response = substr($response,16); $response = explode("\0",$response); if($this->debug){ var_dump($response);# } array_pop($response); array_pop($response); array_pop($response); array_pop($response); $return = []; $type = 0; if($this->debug){ var_dump($response);# } foreach ($response as $key){ if ($type == 0) $val = $key; if ($type == 1) $return[$val] = $key; $type == 0 ? $type = 1 : $type = 0; } return [1, $return]; echo("DoQueryEnd\n"); } public function onRun(){ echo("DoCheckServer:\n"); if($this->debug){ var_dump($this->doCheckServer);# } foreach($this->doCheckServer as $server){ $doCheck = $server[1]; if($doCheck){ $ip = $server[0]; $deParsedIP = $ip[0]; $port = $ip[1]; $return = $this->doQuery($deParsedIP, $port); $returnState = $return[0]; $queryResult = $return[1]; $serverData = []; echo("returnState:\n"); var_dump($returnState); switch($returnState){ case -1; $serverData[2] = false; break; case 0: $serverData[2] = false; break; case 1: $serverData[0] = [$queryResult['numplayers'], $queryResult['maxplayers']]; $serverData[1] = $queryResult['hostname']; $serverData[2] = true; } $serverFINALdata[$deParsedIP.$port] = $serverData; $this->setResult($serverFINALdata); } }
Yes, it was just simple example plus, you could just open a quick socket to the host to check if it's down.