•  
     

Infos da Gametracker de seus servers no fórum em tempo real

Bom depois de tanto escovar bit com AS2_INFO para tentar achar uma forma de converter o bit que mostra os players online e o número máximo de players em server non-steam (descobri que é o dproto o culpado por mostrar o número errado e não sei como corrigir) decidi partir para outra estratégia e pensei.. pensei.. e pensei... então jesus falou no meu ouvido... "A gametracker exibe essas informações no site.. pq vc não faz um proxy e parseia o resultado como vc precisa?" e eu então respondi.. Caramba Jesus.. Você é criativo é essa alternativa é até super simples de fazer.. Obrigado Senhor!!!!! kkkkkkkkkkk...

Bom diante dessa alternativa coloquei os neurônios para funcionar e elaborei um php que faz um get na página de busca, parseia o resultado.. e retorna um json (em mais a diante vou falar o pq de retornar um JavaScript Objetct Notation )..

O código php é o seguinte [small](Salve esse código como ajax_servers.php na raiz de seu fórum phpBB)[/small]

Código: Selecionar todos

<?php
$file = file_get_contents('http://www.gametracker.com/search/?query=dxbr');

$dom = new DOMDocument;
$dom->loadHTML( $file );

$tabelas = $dom->getElementsByTagName( 'table' );
$props = array( 'rank', 'server', 'players', 'ip', 'mapa' );
$table_target_class = "table_lst table_lst_srs";

$servers = array();

foreach( $tabelas as $tabela ){
	
	$class = strtolower( $tabela->getAttribute( 'class' ) );
	if( $table_target_class == $class)
	{
		$trs = $tabela->getElementsByTagName( 'tr' );
		
		foreach( $trs as $tr ){
				
				$tds = $tr->getElementsByTagName( 'td' );
				$i = 0;
				$tmp_info = array();
				
				foreach( $tds as $td ){
					$info = trim($td->nodeValue);
					
					if( !empty( $info ) && isset( $props[ $i ] ) ){
						$tmp_info[ $props[ $i ] ] = $info;
						$i++;
					}
				}
				
				array_push( $servers, $tmp_info );
		}
		
		break;
	}
	continue;
}

array_pop( $servers );
array_shift( $servers );

die( json_encode( $servers ) );
?>


Como estamos obtendo uma url externa e o site do gametracker pode estar instável e se inserirmos direto no template isso pode atrasar significativamente o carregamento da página então preferi fazer com AJAX (Não é time de futebol e nem Sabão em pó rs)

Abra a página index_body.html de seu tema e crie uma tabela com a estrutra parecida com essa:(Lembre-se de usar as classes de acordo com seu tema)

Código: Selecionar todos


<table class="tablebg" width="100%" cellspacing="1" id="tabelaServidores">
	<tr>
		<td height="70" align="center">
			<img src="./styles/subsilver2/imageset/upload_bar.gif"><br />
			Carregando lista de servidores da Gametracker...
		</td>
	</tr>
</table>
<!-- fim da lista de servers -->


Ainda na página index_body.html no final do arquivo depois de tudo, insira o seguinte código:

Código: Selecionar todos


<script src="//code.jquery.com/jquery-1.8.3.min.js"></script>
<script>
;(function( $ ){
	$(function(){
		console.log( 'ready' );
		$.getJSON( './ajax_servers.php', function( data ){
			var htmlResult = "<tr><th>GTRank</th><th>Servidor</th><th>Players</th><th>IP</th><th>Mapa</th></tr>";
			
			if( data.length == 0 ) 
			{
				$( '#tabelaServidores' )
					.find( 'td' )
					.text( 'Desculpe... Nenhum dado recebido da gametracker.' );
				
				return;
			}
			
			for( var i = 0; i < data.length; i++ )
			{
				htmlResult += "<tr>";
				htmlResult += "<td class='row1' align='center' height='30'><p class='topicdetails'>"+ data[i].rank.replace( '.', '' ) +"</p></td>";
				htmlResult += "<td class='row1'><p class='topicdetails'><b class='topictitle'>"+ data[i].server +"</b></p></td>";
				htmlResult += "<td class='row1' align='center'><p class='topicdetails'>"+ data[i].players +"</p></td>";
				htmlResult += "<td class='row1' align='center'><p class='topicdetails'>"+ data[i].ip +"</p></td>";
				htmlResult += "<td class='row1'  align='center'><p class='topicdetails'>"+ data[i].mapa +"</p></td>";
				htmlResult += "</tr>";
			}
			
			$( '#tabelaServidores' ).find( 'tbody' ).html( htmlResult );
			
		}).fail(function(){
			 $( '#tabelaServidores' )
					.find( 'td' )
					.text( 'Desculpe... Ocorreu um erro ao receber os dados.' );
		});
	});
}( jQuery ));
</script>


Pronto a modificação está pronta! Limpe o cache do fórum pelo ACP e de um F5 na home do fórum.. O resultado você pode ver no print abaixo:

Imagem

Lembre-se de no arquivo ajax_servers.php de colocar a url de busca dos seus servers na gametracker como parâmetro da função file_get_contents()

Ex:

Código: Selecionar todos

$file = file_get_contents('http://www.gametracker.com/search/?query=dxbr');


Alterar para:

Código: Selecionar todos

$file = file_get_contents('http://www.gametracker.com/search/?query=PALAVRA-CHAVE-NO-NOME-DOS-SEUS-SERVIDORES');


E se você tiver um pouquinho de conhecimento PHP/JS e criatividade.. você pode até colocar um status do server conforme mostra na home do fórum..

Imagem
Anexos
ajax_servers.zip
(649 Bytes) Transferido 106 vezes
 
Qual é teu site :icon_question:
 
Po show de bola, mas pelo visto você uso no phpbb 3.0.12 ja tento ve se e funcional no 3.1?
 
*+RenaN+* Escreveu:Po show de bola, mas pelo visto você uso no phpbb 3.0.12 ja tento ve se e funcional no 3.1?


Como o arquivo é um arquivo PHP puro (pq não sei fazer mods para phpBB).. funciona em qualquer site.. O único pré-requisito é que a linguagem desse servidor seja PHP :icon_mrgreen:
 
puma; Escreveu:Qual é teu site :icon_question:
Tá no finalzinho do post...
 
Testei aqui e ficou legal

Ele foi feito para funcionar em themes baseado em subsilver