The 0 Denunciar post Postado Março 27, 2013 fala galera, estou com um problema...heheheestou criando um pequeno sistema em PHP na minha empresa e vou fazer uma integração com um sistema de terceiro, será da seguinte maneira:Este sistema terceiro me disponibiliza uma página com dados XML (sou bem leigo ao XML) vou acessar esta página e pegar os dados xml, porém vem meu primeiro problema, tenho que acessar está página a cada 5 min para pegar estar informações, andei procurando e encontrei o agendador de tarefas do windows, o qual faço ele executar o IE e mais um parametro que executa o meu script php, não sei se é o meio mais adequado, mas foi uma forma que encontrei.Até ai é um problema de criar uma rotina que execute o código automaticamente, agora tenho outro problema...quero acessar está página pegar os dados xml e salvar no mysql, fiz várias procuras e encontrei o simplexml_load_string, mas somente tenho a url, tentei tbm pelo simplexml_load_file, porém para usar neste formato terei que acessar a url que tenho, salvar o arquivo em xml e executar o código, é um método também, mas como criar essa rotina está um pouco complicado....to procurando em vários lugares e não estou encontrando uma soluçãoolhem todos os métodos que já tentei, mas sem sucesso.... <?php $post = '<posicao><resposta><msg>OK</msg></resposta><veiculos><veiculo><placa>FGY3639</placa><vel>0.0</vel><lat>-23.703995</lat><lng>-46.573746</lng></veiculo><veiculo><placa>FGY2566</placa><vel>0.0</vel><lat>-30.004387</lat><lng>-51.205235</lng></veiculo></veiculos><url-autenticacao>http://www.xxxxxxxxxxxxxx.com.br/integracaoSv?id=4xx&senha=293157xxxxxxxxxxxxxxxxxxx8fbab48069a</url-autenticacao></transacao></posicao>'; $array1 = explode('<url-autenticacao>',$post); $array2 = explode('</url-autenticacao>',$array1[1]); echo $array2[0]; ?> <?php include "conexao.php"; $string = <<<XML <?xml version='1.0'?> <document> <posicao> <resposta> <msg>OK</msg> </resposta> <veiculos> <veiculo> <placa>EOM0000</placa> <vel>7.0</vel> <lat>-23.44747</lat> <lng>-46.317059</lng> </veiculo> <veiculo> <placa>EOM0000</placa> <vel>0.0</vel> <lat>-23.959021</lat> <lng>-46.3764</lng> </veiculo> </veiculos> </posicao> </document> XML; $xml = simplexml_load_string($string); var_dump($xml); ?> neste, vejo o mais correto, mas somente tenho a URL que me leva a estes dados.....quero que o sistema acessa a URL pega os dados e coloca no banco, mas nem estou conseguindo pegar os dados Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 27, 2013 simplexml_load_file criará um objeto SimpleXMLElement com o conteúdo do arquivo que foi especificado (a URL, por exemplo).Não há necessidade alguma em salvar o arquivo. No link abaixo, você encontrará diversos exemplos de uso.Basic SimpleXML usage Com o SimpleXMLElemente, não há necessidade de utilizar explode, como está utilizando no primeiro código. Basta correr pelos nós do arquivo, assim como verá nos exemplos. Compartilhar este post Link para o post Compartilhar em outros sites
The 0 Denunciar post Postado Março 28, 2013 vlw...muito obrigado....deixa eu estudar mais para fazer Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 28, 2013 Ótimo! Caso encontre alguma dúvida após os estudos, utilize este mesmo tópico. Bons estudos! Compartilhar este post Link para o post Compartilhar em outros sites
The 0 Denunciar post Postado Março 28, 2013 tentei de várias forma aqui <?php $sxe = new SimpleXMLElement('http://www.xxxxxxxxx.com.br/integracaoSv?id=42&senha=293xxxxxxxxxxxxxxxxxxxxxxxx69a', NULL, TRUE); echo $sxe->asXML(); ?> Desta maneira acima, consegui pegar a informação da url e mostrar na minha tela preciso pegar esta informação e salvar na minha tabela do mysql, assim modifiquei o código e fiz da seguinte maneira fiz da seguinte maneira <?php include "conexao.php"; $query = "insert into teste (placa, velocidade, lat, log1) values (”%s” , ”%s” , ”%s” , ”%s”)"; $sxml = new SimpleXMLElement('http://www.xxxxxxxxxxxxxg.com.br/integracaoSv?id=42&senha=2931xxxxxxxxxxxxxxxx069a'); foreach ($sxml as $linhaAtual) { $pl = (string) $linhaAtual->pl; $vel = (string) $linhaAtual->vel; $lat = (string) $linhaAtual->lat; $log1 = (string) $linhaAtual->log1; $tmpQuery = sprintf($query, $placa, $velocidade, $lat, $log1 ); mysql_query($tmpQuery); } ?> porém ele não executa e nem mostra erro Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 28, 2013 Adicione isso no código. mysql_query($tmpQuery) or die(mysql_error()); Entretanto, se nem assim funcionar, tente o seguinte: var_dump($tmpQuery); E execute a query direto no SGBD. Também estranhei uma coisa, seus apas duplas. São iguais de word e não as do "código" em si, veja a diferença desta: " -> ” Altere-as para simples apóstrofos. Compartilhar este post Link para o post Compartilhar em outros sites
loureirorg 6 Denunciar post Postado Abril 1, 2013 para um XML simples assim você pode usar o código abaixo: function array_combine_($keys, $values) { $result = array(); foreach ($keys as $i => $k) { $result[$k][] = $values[$i]; } array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;')); return $result; } function extract_data($str) { return (is_array($str))? array_map("extract_data", $str): ((!preg_match_all('#<([A-Za-z0-9_]*)[^>]*>(.*?)</\1>#s', $str, $matches))? $str: array_map(("extract_data"), array_combine_($matches[1], $matches[2]))); } Ex. com seus dados: $post = '<posicao><resposta><msg>OK</msg></resposta><veiculos><veiculo><placa>FGY3639</placa><vel>0.0</vel><lat>-23.703995</lat><lng>-46.573746</lng></veiculo><veiculo><placa>FGY2566</placa><vel>0.0</vel><lat>-30.004387</lat><lng>-51.205235</lng></veiculo></veiculos><url-autenticacao>http://www.xxxxxxxxxxxxxx.com.br/integracaoSv?id=4xx&senha=293157xxxxxxxxxxxxxxxxxxx8fbab48069a</url-autenticacao></transacao></posicao>'; print_r(extract_data($post)); Compartilhar este post Link para o post Compartilhar em outros sites
The 0 Denunciar post Postado Abril 5, 2013 galera acabei de conseguir, mas não usei o simpleXMLElement, acabei utilizando o API DOM, usei o DOMDocument::load, ficou mais fácil de entender e trabalhar, meu código ficou da seguinte maneira <?php $doc = new DOMDocument(); $doc ->load('http://www.txxxxxxxxxxxx.com.br/integracaoSv?id=4ccc&senha=76b020dxxxxxx7ec80'); $veiculos = $doc->getElementsByTagName("veiculo"); foreach($veiculos as $veiculo){ $placas = $veiculo->getElementsByTagName("placa"); $placa = $placas->item(0)->nodeValue; $vels = $veiculo->getElementsByTagName("vel"); $vel = $vels->item(0)->nodeValue; $lats = $veiculo->getElementsByTagName("lat"); $lat = $lats->item(0)->nodeValue; $lngs = $veiculo->getElementsByTagName("lng"); $lng = $lngs->item(0)->nodeValue; echo "Placa: "; echo $placa; echo "<br>"; echo "Velocidade: "; echo $vel; echo "<br>"; echo "Latitude: "; echo $lat; echo "<br>"; echo "Longitude: "; echo $lng; echo "<br>"; echo "<br>"; } ?> vou salvar dentro do mysql, mas como agora consigo ler e já tenho cada nó armazenado nas minhas variaveis é só utilizar o sql para fazer o input, ai é bem mais tranquilo hehehehehehehehe não sendo mais chato......preciso que este código rode a cada 2 min......como setar desta forma???????.para teste vou roda no localhost, pensei em utilizar o agendador de tarefa do windows que abra a página e rode, porém o agendador somente deixa executar uma vez no dia, como será que eu deve fazer??? Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Abril 5, 2013 Não conheço todas as configurações do agendador, mas como seu servidor é windows, utilize o agendador. Mas pergunte-se a si mesmo. Qual a necessidade real de rodar a cada 2 minutos? Necessita de um tempo de resposta tão baixo? Em alguns casos, a sincronização é feita somente na hora da consulta. Se eu quero determinada informação, é realizada a sincronização na hora da solicitação da consulta. Isso se a sincronização não for muito custosa. As vezes, você pode parametrizar tempos, por exemplo. Sincronizar automaticamente a cada uma hora, entretanto, se eu for consultar e, a ultima sincronização for a mais de 15 minutos, realize a sincronização novamente. Existe N exemplos, não gosto muito de processos contínuos. Muitas vezes, não há real necessidade. Compartilhar este post Link para o post Compartilhar em outros sites
The 0 Denunciar post Postado Abril 5, 2013 a cada 2 minutos o arquivo xml é atualizado e preciso pegar esta atualização, por isso desta minha necessidade......queria muito colocar no linux mas infelizmente terei que rodar no windows Compartilhar este post Link para o post Compartilhar em outros sites