Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luiz Henrique Cota

Pegar dados de outro site - Banco Central

Recommended Posts

Pessoal,

Estou tentando pegar dados de outro site - Banco Central - https://www3.bcb.gov.br/iftimagem/IFTServlet?operacao=buscaquadro&codquadro=7002&nomequadro=BALANCO%20PATRIMONIAL&cnpj=60701190&ano=2001&trimestre=1&nomeInstituicao=ITAU%20UNIBANCO%20S%20A

 

Fiz um teste básico com o codigo abaixo, porem da o erro: failed to open stream: No error in C:\wamp\www\Teste.php on line 4

 

 

<?php

$site = "https://www3.bcb.gov.br/iftimagem/IFTServlet?operacao=buscaquadro&codquadro=7002&nomequadro=BALANCO%20PATRIMONIAL&cnpj=60701190&ano=2001&trimestre=1&nomeInstituicao=ITAU%20UNIBANCO%20S%20A";

$file = file_get_contents($site);

?>

 

Como faço para pegar a tabela do site e colocar em um banco de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega você esta com um grande problema. O site esta com HTTPS e não irá permitir este tipo de acesso, não conheço uma solução a única dica que posso dar e copiar o HTML e salvar em txt e depois realizar a leitura, irá dar muito trabalho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cURL não funcionaria neste caso? :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Fiz um teste com o código abaixo, porém gerou o erro: "Warning: file_get_contents(https://www3.bcb.gov.br/iftimagem/IFTServlet?operacao=buscaquadro&codquadro=7002&nomequadro=BALANCO PATRIMONIAL&cnpj=60701190&ano=2001&trimestre=1&nomeInstituicao=ITAU UNIBANCO S A) [function.file-get-contents]: failed to open stream: No error in C:\wamp\www\Teste3.php on line 8

"

 

Com isso gerou o arquivotemp.html em branco... Alguém sabe o motivo do erro? Será que a questão levantada pelo Wesley referente ao https?

 

<?php

 

$DOMDocument = new DOMDocument( '1.0', 'utf-8' );

$DOMDocument->loadHTML( file_get_contents("https://www3.bcb.gov.br/iftimagem/IFTServlet?operacao=buscaquadro&codquadro=7002&nomequadro=BALANCO%20PATRIMONIAL&cnpj=60701190&ano=2001&trimestre=1&nomeInstituicao=ITAU%20UNIBANCO%20S%20A") );;

$DOMXPath = new DOMXPath( $DOMDocument );

foreach( $DOMXPath->query( './/table' ) as $Nodes ){

$Atributos[] = $Nodes->getAttribute( 'name' );

foreach( $Nodes->childNodes as $Node ){

$Elemento[ $Node->nodeName ] = $Node->nodeValue;

}

$Elementos[] = $Elemento;

}

$DOMDocument->save("arquivotemp.html");

 

 

$dom = new DOMDocument();

$dom->loadHTMLFile( 'arquivotemp.html' );

 

$xpath = new DOMXPath( $dom );

$rows = array();

 

foreach ( $xpath->query( './/tbody/td[@ALIGN=center bgcolor=fec394 or @bgcolor=f6d8c3 or @bgcolor=f6d8c3 align=right]' ) as $tr ) {

$cols = array();

$td = null;

$tds = $tr->getElementsByTagName( 'td' );

$i = 0;

 

while ( ( $td = $tds->item( $i++ ) ) !== null ) {

$cols[] = $td->nodeValue;

}

 

$rows[] = $cols;

// print_r ($rows[][2]);

}

 

 

 

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

escrevi o código abaixo e me retornou o conteúdo da página normalmente. O seu allow_url_fopen está ativado?

 

 

<?php
ini_set("allow_url_fopen", true);

$url = "https://www3.bcb.gov.br/iftimagem/IFTServlet?operacao=buscaquadro&codquadro=7002&nomequadro=BALANCO%20PATRIMONIAL&cnpj=60701190&ano=2001&trimestre=1&nomeInstituicao=ITAU%20UNIBANCO%20S%20A";

echo file_get_contents($url);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, o estranho é que está ativado, porém coloquei na locaweb e funcionou, agora vou fazer a rotina para gravar no banco de dados

 

ini_set("allow_url_fopen", true);
$site = "https://www3.bcb.gov.br/iftimagem/IFTServlet?operacao=buscaquadro&codquadro=7002&nomequadro=BALANCO%20PATRIMONIAL&cnpj=60701190&ano=2001&trimestre=1&nomeInstituicao=ITAU%20UNIBANCO%20S%20A";


$DOMDocument = new DOMDocument( '1.0', 'utf-8' );
       $DOMDocument->loadHTML( file_get_contents($site) );;

$xpath = new DOMXPath( $DOMDocument );
$rows = array();

foreach ( $xpath->query( './/table[@cellspacing=1]/tr' ) as $tr ) {
       $cols = array();
       $td = null;
       $tds = $tr->getElementsByTagName( 'td' );
       $i = 0;
       while ( ( $td = $tds->item( $i++ ) ) !== null ) {
               $cols[] = $td->nodeValue;
       }
	$rows[] = $cols;

	//foreach ($Rows as $ii => $value){
	//print_r ($Rows[$ii]);
       //
}
print_r( $rows );
echo "<br>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

Primeiramente agradeço a todos pela ajuda, finalmente consegui meu primeiro objetivo ! Agora estou tentando pegar os dados e colocar no meu BD, porém esta dando o erro: "MySQL server has gone away". Vejam o código que estou utilizando:

 

 


<?php
include("conexao.php");
ini_set("allow_url_fopen", true);
set_time_limit(12000);
$querySelect = mysql_query("SELECT CNPJ, NOME FROM EmpresasPrivadas ORDER BY NOME") or die(mysql_error());
while($array = mysql_fetch_array($querySelect))
{
$site = "https://www3.bcb.gov.br/iftimagem/IFTServlet?operacao=buscaquadro&codquadro=7002&nomequadro=BALANCO%20PATRIMONIAL&cnpj=".str_replace('.','',$array['CNPJ'])."&ano=2011&trimestre=1&nomeInstituicao=".$array['NOME']."";
$DOMDocument = new DOMDocument( '1.0', 'utf-8' );
   $DOMDocument->loadHTML( file_get_contents($site) );		
$xpath = new DOMXPath( $DOMDocument );
$rows = array();
foreach ( $xpath->query( './/table[@cellspacing=1]/tr' ) as $tr ) 
{
       $cols = array();
       $td = null;
       $tds = $tr->getElementsByTagName( 'td' );
       $i = 0;
       while ( ( $td = $tds->item( $i++ ) ) !== null ) 
	{
		$cols[] = $td->nodeValue;
       }
	$rows[] = $cols;
}
foreach ($rows as $i =>$value) 
{		
	$queryInsert = "insert into balanco_privado (Codigo,Empresa, Trimestre,Ano, Conta, Nome, Valor) values ('".str_replace('.','',ltrim($array['CNPJ']))."','".ltrim($array['NOME'])."','1','2011','".str_replace('Â','',ltrim($rows[$i][0]))."','".str_replace('Â','',ltrim($rows[$i][1]))."','".str_replace('Â','',ltrim($rows[$i][2]))."');";
	$resultado = mysql_query($queryInsert,$conexao) or die (mysql_error());		
	if (mysql_num_rows($resultado)>0)
	{
	   print "Insert executado com sucesso!";
	}
	else
	{
	   print "Não foi possível executar o insert!";
	}
		echo "<br>";
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.