Importar dados apartir de uma URL e gerar SQL para inserir dados em BD MySQL ou PostgreSQL
Expressões Regulares, HTML, MySQL, PHP, Sites, SQL Comentar >> Marcelo KorjenioskiSeguindo outros tutoÂriÂais sobre como imporÂtar dados, desta vez vamos fazer um script para capÂtuÂrar dados de uma pagina HTML e gerar um SQL de insert. Nesta pesÂquisa estou proÂcuÂrando por links denÂtro de uma deterÂmiÂnada Tag. Estou usando o ID dos eleÂmenÂtos como refeÂrênÂcia. Veja a imporÂtânÂcia de não repeÂtir os IDs dos eleÂmenÂtos. Chega de conÂversa e vamos direto ao ponto.
<?php
header("Content-Type: text/html; charset=UTF-8");
// URL que irei pegar os links
$url = "http://pt.wikipedia.org/wiki/Categoria:Especialidades_m%C3%A9dicas";
$conteudo = null;
// Abro conexão de leitura.
$conecurl = @fopen("$url","r") or die ('<center>erro na conexão<br><b>informe o administrador erro 15 </b></center>');
while(!feof($conecurl)) {
$conteudo .= fgets($conecurl,4096);
}
// Fecho conexão.
fclose($conecurl);
// Aqui vou informar a primeira tag para o filtro do HTML eu peguei um elemento com id por ser unico no HTML.
$inicio = strpos($conteudo,'<div id="mw-subcategories">');
// Pego outro elemento com id para finalizar o range de busca.
$fim = strpos($conteudo,'<div id="mw-pages">');
// Pegamos a posição final menos a inicial para ver quanto iremos pular.
$quantopula = $fim - $inicio ;
$conteudo = substr($conteudo, $inicio ,$quantopula);
function pegaLink($html){
// ER para pegar todas as tags de links.
$er = "/<a.*?href=(\".*?\"|[A-Za-z0-9_]*?).*?>.*?<\/a>/";
preg_match_all($er,$html,$links);
$link = $links[0];
return $link;
}
function pegaNomeLink($url){
// ER para pegar o nome da tag de link.
$label = str_replace("</a>","",preg_replace("/^<a.*?>/","",$url));
return $label;
}
// Pego um array com todos os links
$links = pegaLink($conteudo);
$query = NULL;
// Inicio da query.
$query .= "insert into especialidades (nome) values ";
// Faço um loop para fazer o insert de cada item.
foreach ($links as $value) {
$item = '(';
// Removo o link e pego apenas o nome.
$item .= "'".pegaNomeLink($value)."'";
$item .= ')';
$values[] = $item;
}
// Transformo o Array em uma String.
$query .= implode(',', $values);
echo $query;
?>
Caso tenha alguma duvida deixe um comenÂtário que terei praÂzer em ajuÂdar.
ComenÂtários são bem vinÂdos assim posso melÂhoÂrar a qualÂiÂdade dos tutoÂriÂais aqui apresentados.
É isso pesÂsoal tenham uma ótima semana e até o próÂximo post.