Ruivo 0 Report post Posted July 3, 2012 Bom dia pessoal estou com um problema usando o preg_match. Dantes eu usava o preg_match e estava tudo a funcionar. Mas agora o site onde eu obtinha os valores alterou ali um promenor. Que para se ver a pagina que contem os valores que eu quero é precisso de fazer Login. Então gostaria de saber como obter o valores? Cumprimentos Share this post Link to post Share on other sites
pedrosorio 4 Report post Posted July 3, 2012 O que é que o preg_match tem a ver com o resto? Estavas a ir buscar valores a um site (CURL?) e usavas preg_match para identificar esses valores. Agora é preciso fazer login. Portanto a tua dúvida é como fazer login, o preg_match não é para aqui chamado. Sem saber qual é o site ou o tipo de login, parece-me difícil ajudar-te. Não respondo a dúvidas por mensagem. Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 3, 2012 O site é este http://en.warrock.nexoneu.com/ Sim a minha duvida é como fazer login. Mais qualquer coisa eu digo. Tipo de login é penso que: User ID e Password. e é feito por cookies... Share this post Link to post Share on other sites
laeknishendr 0 Report post Posted July 4, 2012 Olá camarada Ruivo, pelo que entendi deseja usar cURL para fazer login, seria ótimo se você postasse os valores que você deseja pegar com os prefixos e sufixos, caso já tenha conseguido fazer login no sistema. Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 4, 2012 Olá camarada Ruivo, pelo que entendi deseja usar cURL para fazer login, seria ótimo se você postasse os valores que você deseja pegar com os prefixos e sufixos, caso já tenha conseguido fazer login no sistema. Os dados estão por exemplo nesta pagina: http://en.warrock.nexoneu.com/Ranking/Profile#/xhawkeye08 são as Kills, Deaths, Nick, Nivel e por ai... Quanto a cURL eu nunca usei nem faço a minima ideia. Eu não consigo pegar os dados declarando os cookies antes da script? Se não então que devo usar? Share this post Link to post Share on other sites
yoda 135 Report post Posted July 4, 2012 O que estás a tentar fazer é legal? before you post, what have you tried? - http://filipematias.info sense, purpose, direction Share this post Link to post Share on other sites
HappyHippyHippo 1,165 Report post Posted July 4, 2012 O que estás a tentar fazer é legal? se for só verificar o ranking deverá ser ... não vejo problemas em saber a informação estatística de um jogador no entanto os links dão informação que o site encontrasse em manutenção, por isso, daqui nada IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 4, 2012 se for só verificar o ranking deverá ser ... não vejo problemas em saber a informação estatística de um jogador no entanto os links dão informação que o site encontrasse em manutenção, por isso, daqui nada Sim é legal. Agora o site já deve estar disponivel. Share this post Link to post Share on other sites
laeknishendr 0 Report post Posted July 4, 2012 Ruivo, você primeiramente precisa usar cURL para fazer o login na página "http://passport.nexoneu.com/Login.aspx?nexoneuTheme=Warrock", deve também definir a constante CURLOPT_COOKIEJAR, para salvar os cookies após o login. Feito esse processo aí sim você deve acessar a página "http://en.warrock.nexoneu.com/Ranking/Profile#/xhawkeye08" Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 5, 2012 Estive a tentar <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://passport.nexoneu.com/Login.aspx?nexoneuTheme=Warrock"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_xec($ch); echo "$output"; $url = file_get_contents("http://en.warrock.nexoneu.com/Ranking/Profile/xhawkeye08", false, $context); preg_match('%<h1 class="catorzered">(.*?)<\/h1>%', $url, $nomeproduto); print 'Nome Produto: '.$nomeproduto[1].'<br>'; // Nome produto $nomeproduto preg_match('%<div class="profileInfo">(.*?)<\/div>%', $url, $precoproduto); print 'Preþo Produto: '.$precoproduto[1].'<br>'; //Preþo Produto $precoproduto curl_close($ch); ?> e dá-me o seguinte erro: Fatal error: Call to undefined function curl_init() in C:\Users\Rei120\Desktop\wos\www\warrock.php on line 2 Que está errado? Share this post Link to post Share on other sites
HappyHippyHippo 1,165 Report post Posted July 5, 2012 (edited) não tens instalado o módulo cURL do apache. faz este script <?php phpinfo(); ?> e verifica se realmente tens isso instalado Edited July 5, 2012 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 5, 2012 Pois eu procurei e nao encontrei nada relacionado com cURL na pagina phpinfo. Como posso instalar? Share this post Link to post Share on other sites
dash 3 Report post Posted July 5, 2012 Tens auxilio na página do cURL: http://curl.haxx.se/libcurl/php/install.html#windows Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 6, 2012 Muito obrigado pessoal já consegui instalar o cURL. Agora deparei-me com outro problema as expressões regulares que eu pensava estarem certas afinal devem ter qualquer coisa mal porque o valor não é apanhado Eu tenho assim: $url = file_get_contents("http://en.warrock.nexoneu.com/Ranking/Profile/xhawkeye08", false, $context); preg_match('%<td>KILLS<\/td>\n<td class="rTxt">[0-9.-]<\/td>%', $url, $kills); print 'Kills: '.$kills[1].'<br>'; e quero apanhar isto <tr> <td>KILLS</td> <td class="rTxt">318,717</td> </tr> Sendo o valor 318,717 o valor que eu quero que apanhe. Alguem me dá uma ajudinha? Share this post Link to post Share on other sites
HappyHippyHippo 1,165 Report post Posted July 6, 2012 (edited) estou a ver pelo menos alguns erros na expressão regular 1º - tens a seguinte combinação "[0-9.-]" para detectar um número, como vês, não tens o caracter virgula, caracter que aparece no número no HTML a ser interpretado "318,717" 2º - não estás a dizer que o grupo de elementos que determina o número pode aparecer 1 ou mais vezes, que na realidade deveria ser algo do genero: (-|)\d+(\,\d+|) isto indica : (-|) : sinal menos ou não \d+ : um dígito ou mais (\,\d+|) : uma virgula com um dígito ou mais ou nada 3º - lembra-te que o resultado será toda a entrada expressão regular, isto é, será todo o <td>KILLS</td> <td class="rTxt">318,717</td> podes usar o lookahead e o lookbehind para selecionar somente o que pretendes podes sempre usar sites online para testar a tua expressão regular como por exemplo : http://www.regextester.com/ Edited July 6, 2012 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 6, 2012 Desculpa mas nao estou a perceber. Será que me podes fazer a expressão regular em php? Share this post Link to post Share on other sites
yoda 135 Report post Posted July 6, 2012 Com esta classe safas-te melhor : http://php.net/manual/en/class.domxpath.php before you post, what have you tried? - http://filipematias.info sense, purpose, direction Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 6, 2012 Com esta classe safas-te melhor : http://php.net/manual/en/class.domxpath.php Eu nunca usei classes DOM e estive a ver e nao consegui perceber nada... Share this post Link to post Share on other sites
yoda 135 Report post Posted July 6, 2012 http://ditio.net/2008/12/01/php-xpath-tutorial-advanced-xml-part-1/ Aqui percebes o básico. É bastante fácil entender como funciona, e bem mais simples que expressões regulares. before you post, what have you tried? - http://filipematias.info sense, purpose, direction Share this post Link to post Share on other sites
laeknishendr 0 Report post Posted July 7, 2012 (edited) Olá ruivo, é simples para pegar o conteúdo dentro dessas tags: preg_match_all("/class=\"rTxt\">(.*?)<\/td>/", $var, $matches); Edited July 8, 2012 by brunoais geshi Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 7, 2012 (edited) Olá ruivo, é simples para pegar o conteúdo dentro dessas tags: preg_match_all("/class=\"rTxt\">(.*?)<\/td>/", $var, $matches); Coloquei isso no codigo e continua a nao dar Imprime Kills: Array Portanto penso que é algo que está errado com o codigo. <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://passport.nexoneu.com/Login.aspx?nexoneuTheme=Warrock"); curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, 'txtLogin0=USERNAME&txtpassword0=PASSWORD'); curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); $store = curl_exec ($ch); curl_setopt($ch, CURLOPT_URL, 'http://en.warrock.nexoneu.com/Ranking/Profile/xhawkeye08'); $content = curl_exec ($ch); $var = file_get_contents('http://en.warrock.nexoneu.com/Ranking/Profile/xhawkeye08'); preg_match_all("/class=\"rTxt\">(.*?)<\/td>/", $var, $matches); print 'Kills: '.$matches.'<br>'; curl_close($ch); ?> Edited July 8, 2012 by brunoais geshi Share this post Link to post Share on other sites
laeknishendr 0 Report post Posted July 7, 2012 Olá Ruivo, isso acontece porque você está tentando imprimir $matches como se fosse texto(string), porém $matches é uma matriz(array), isso significa que tem que especificar o valor que deseja exibir, no caso de um print_r($matches) para ver quais são suas opções. Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 7, 2012 Olá Ruivo, isso acontece porque você está tentando imprimir $matches como se fosse texto(string), porém $matches é uma matriz(array), isso significa que tem que especificar o valor que deseja exibir, no caso de um print_r($matches) para ver quais são suas opções. Fiz isso e ele imprime Array ( [0] => Array ( ) [1] => Array ( ) ) Share this post Link to post Share on other sites
laeknishendr 0 Report post Posted July 7, 2012 Mas a função file_get_contents está pegando o conteúdo do perfil do usuário corretamente? Share this post Link to post Share on other sites
Ruivo 0 Report post Posted July 7, 2012 Mas a função file_get_contents está pegando o conteúdo do perfil do usuário corretamente? Não sei... Desculpa a ignorancia Share this post Link to post Share on other sites