leco_123 1 Denunciar post Postado Junho 16, 2011 Olá pessoa estou tentando pegar a tabela de campeonato do site e desponibilizar no site que estou desenvolvendo, mais o que acontece é que somente consigo pegar o site inteiro e queria somente a tabela de classificação esse foi o código que fiz até o momento, não tenho noção de como continuar, desde de já agradeço. <?php /* pegando url do site futsal parana*/ $url = file_get_contents('http://www.futsalparana.com.br/index.php?option=com_joomsport&view=ltable&sid=13&gr_id=0&Itemid=91'); echo $url; ?> Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 16, 2011 Olá, veja se é o que você precisa <?php $DOMDocument = new DOMDocument( '1.0', 'utf-8' ); $WebSite = 'http://www.futsalparana.com.br/index.php?option=com_joomsport&view=ltable&sid=13&gr_id=0&Itemid=91'; $DOMDocument->preserveWhiteSpace = false; @$DOMDocument->loadHTML( file_get_contents( $WebSite ) ); $DOMXPath = new DOMXPath( $DOMDocument ); foreach( $DOMXPath->query( './/table[@id="s_table_0"]/tbody/tr[@class=contains( @class, "etblraw" )]/td[ preceding-sibling::* ]' ) as $Nodes ){ foreach( $Nodes->childNodes as $Node ){ $Data[] = utf8_decode( preg_replace( '/\s/', null, $Node->nodeValue ) ); } } echo '<pre>'; print_r( array_filter( $Data ) ); Saída: Array ( [2] => PatoFutsal [3] => 8 [4] => 7 [5] => 1 [7] => 2.13 [8] => 18 [9] => 34 [10] => 16 [11] => 22 [14] => SMEL/Araucária [15] => 8 [16] => 5 [17] => 2 [18] => 1 [19] => 1.46 [20] => 11 [21] => 35 [22] => 24 [23] => 17 [26] => LojãodoKeimaFutsal [27] => 9 [28] => 5 [29] => 2 [30] => 2 [31] => 1.65 [32] => 11 [33] => 28 [34] => 17 [35] => 17 [38] => A.E.C./Camifra/Siviero [39] => 9 [40] => 4 [41] => 1 [42] => 4 [43] => 0.96 [44] => -1 [45] => 25 [46] => 26 [47] => 13 [50] => Cipauto/Romera/ToledoFutsal [51] => 8 [52] => 4 [53] => 1 [54] => 3 [55] => 1.29 [56] => 5 [57] => 22 [58] => 17 [59] => 13 [62] => LaboratórioSantaMaria [63] => 8 [64] => 4 [66] => 4 [67] => 0.83 [68] => -5 [69] => 24 [70] => 29 [71] => 12 [74] => Pitanga/Futsal/UCP [75] => 8 [76] => 3 [77] => 1 [78] => 4 [79] => 0.61 [80] => -13 [81] => 20 [82] => 33 [83] => 10 [86] => ClubeAtléticoCantagalo [87] => 8 [88] => 3 [89] => 1 [90] => 4 [91] => 0.83 [92] => -4 [93] => 20 [94] => 24 [95] => 10 [98] => UnipaMorumbiFutsal [99] => 8 [100] => 2 [101] => 1 [102] => 5 [103] => 0.82 [104] => -3 [105] => 14 [106] => 17 [107] => 7 [110] => CambéFutsal [111] => 8 [112] => 2 [114] => 6 [115] => 0.93 [116] => -2 [117] => 28 [118] => 30 [119] => 6 [122] => C.E.R.Aquárius [123] => 8 [124] => 1 [126] => 7 [127] => 0.51 [128] => -17 [129] => 18 [130] => 35 [131] => 3 ) Compartilhar este post Link para o post Compartilhar em outros sites
leco_123 1 Denunciar post Postado Junho 16, 2011 muito obrigado mesmo esta precisando muito desse código se for possível teria como comentar o código pra que eu possa enternder eu não estou entendendo o que segnifica e o que faz algumas linhas desde já obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 16, 2011 Cara o DOMXPath, não tem como eu te explicar todas as funções dele aqui não pois é muita coisa :P, então vou te explicar o que a query faz ok ? segue o código abaixo: <?php /** * Nova instância de DOMDocument */ $DOMDocument = new DOMDocument( '1.0', 'utf-8' ); /** * URL Do site que você deseja extrair o conteudo */ $WebSite = 'http://www.futsalparana.com.br/index.php?option=com_joomsport&view=ltable&sid=13&gr_id=0&Itemid=91'; /** * Não preservar espaços em branco redundantes */ $DOMDocument->preserveWhiteSpace = false; /** * Carrega o conteudo do site */ @$DOMDocument->loadHTML( file_get_contents( $WebSite ) ); /** * Nova instância do DOMXPath */ $DOMXPath = new DOMXPath( $DOMDocument ); /** * Procura no Documento, um elemento 'table' que o id é igual a .. então avança pra seu filho 'tbody' * depois avança para o filho de 'tbody', que é o 'tr' que o atributo 'class' contenha uma substring de 'etblraw' * então avança para 'td', que recupera todos os valores de cada 'td' que não seje a primeira coluna na tabela * porque é a sequencia deles, creio que não seje útil pra você */ foreach( $DOMXPath->query( './/table[@id="s_table_0"]/tbody/tr[@class=contains( @class, "etblraw" )]/td[ preceding-sibling::* ]' ) as $Nodes ){ /** * Procura por todos os filhos de TD, que pode ser hrefs, ou textos .. etc */ foreach( $Nodes->childNodes as $Node ){ /** * Monta um array com os valores encontrados, removendo os espaços em brancos adicionais */ $Data[] = utf8_decode( preg_replace( '/\s/', null, $Node->nodeValue ) ); } } echo '<pre>'; /** * Filtra todo o array, removendo índices vazios */ print_r( array_filter( $Data ) ); Compartilhar este post Link para o post Compartilhar em outros sites
leco_123 1 Denunciar post Postado Junho 16, 2011 Nossa muito obrigado pela explicação consegui entede, ficou muito claro, aparte comentada, creio muita gente vai usar este post. tenho só mais uma duvida como que faço para colocar essas informações em uma tabela, conforme mostra no site federação paranaense, sou meio leigo neste assunto, me desculpe se estou fazendo alguma pergunta, vamos dizer assim boba, pra mim está sendo muito útil mesmo e como disse tenho só agradecer e parabéns por tanta sabedoria assim. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 16, 2011 Opá, tem sim, foi mal a demora, tava resolvendo uns problemas aqui .. enfim, basta você fazer um implode nos valores retornados .. $Data = array_chunk( $Data, 12 ); foreach( $Data as $index => $data ){ foreach( $Data[ $index ] as $values ){ if( is_numeric( $values ) ){ $val[ $index ][] = intval( $values ); }else{ $val[ $index ][] = sprintf( "'%s'", $values ); } } } for( $i = 0; $i < sizeof( $val ); ++$i ){ $preparedValues[] = sprintf( '(%s)', implode( ', ', $val[$i] ) ); } print_r( $preparedValues ); A Saída: Array ( [0] => ('', '', 'PatoFutsal', 8, 7, 1, 0, 2, 18, 34, 16, 22) [1] => ('', '', 'SMEL/Araucária', 8, 5, 2, 1, 1, 11, 35, 24, 17) [2] => ('', '', 'LojãodoKeimaFutsal', 9, 5, 2, 2, 1, 11, 28, 17, 17) [3] => ('', '', 'A.E.C./Camifra/Siviero', 9, 4, 1, 4, 0, -1, 25, 26, 13) [4] => ('', '', 'Cipauto/Romera/ToledoFutsal', 8, 4, 1, 3, 1, 5, 22, 17, 13) [5] => ('', '', 'LaboratórioSantaMaria', 8, 4, 0, 4, 0, -5, 24, 29, 12) [6] => ('', '', 'Pitanga/Futsal/UCP', 8, 3, 1, 4, 0, -13, 20, 33, 10) [7] => ('', '', 'ClubeAtléticoCantagalo', 8, 3, 1, 4, 0, -4, 20, 24, 10) [8] => ('', '', 'UnipaMorumbiFutsal', 8, 2, 1, 5, 0, -3, 14, 17, 7) [9] => ('', '', 'CambéFutsal', 8, 2, 0, 6, 0, -2, 28, 30, 6) [10] => ('', '', 'C.E.R.Aquárius', 8, 1, 0, 7, 0, -17, 18, 35, 3) ) Depois outro implode pra colocar no SQL, ficando assim: printf( 'INSERT INTO `tabela`( `campo1`, `campo2`, `campo3` ... ) VALUES %s', implode( ',', $preparedValues ) ); Saída: INSERT INTO `tabela`( `campo1`, `campo2`, `campo3` ... ) VALUES ('', '', 'PatoFutsal', 8, 7, 1, 0, 2, 18, 34, 16, 22), ('', '', 'SMEL/Araucária', 8, 5, 2, 1, 1, 11, 35, 24, 17),('', '', 'LojãodoKeimaFutsal', 9, 5, 2, 2, 1, 11, 28, 17, 17), ('', '', 'A.E.C./Camifra/Siviero', 9, 4, 1, 4, 0, -1, 25, 26, 13),('', '', 'Cipauto/Romera/ToledoFutsal', 8, 4, 1, 3, 1, 5, 22, 17, 13), ('', '', 'LaboratórioSantaMaria', 8, 4, 0, 4, 0, -5, 24, 29, 12),('', '', 'Pitanga/Futsal/UCP', 8, 3, 1, 4, 0, -13, 20, 33, 10), ('', '', 'ClubeAtléticoCantagalo', 8, 3, 1, 4, 0, -4, 20, 24, 10),('', '', 'UnipaMorumbiFutsal', 8, 2, 1, 5, 0, -3, 14, 17, 7), ('', '', 'CambéFutsal', 8, 2, 0, 6, 0, -2, 28, 30, 6),('', '', 'C.E.R.Aquárius', 8, 1, 0, 7, 0, -17, 18, 35, 3) Compartilhar este post Link para o post Compartilhar em outros sites
leco_123 1 Denunciar post Postado Junho 16, 2011 Valeu vou tentar arrumar obrigado novamente Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 16, 2011 Dê uma estudada na DOMDocument, XPath .. ;) Compartilhar este post Link para o post Compartilhar em outros sites
leco_123 1 Denunciar post Postado Junho 16, 2011 Valeu pode deixar vou fazer isso sim por enquanto era isso Andrey Compartilhar este post Link para o post Compartilhar em outros sites