Atualizado em 28 de Agosto de 2013

Pegar Conteúdo de Outro Site com PHP

Olá pessoal,

Após ter escrito o post anterior (Como Pegar Número de Likes do Facebook), recebi alguns e-mails perguntando a verdadeira função do comando file_get_contents que havia sido usado no script do post anterior.

Então neste post vamos ver qual a função do comando file_get_contents que e um comando poderosíssimo é que deve ser usado com sabedoria.

Este comando lê todo o conteúdo de um arquivo seja ele um site e retorna este conteúdo para uma string.

É porque este comando deve ser usado com sabedoria, como este comando lê é pega o conteúdo de uma página, você pode capturar informações de muitos sites, e é claro que isso pode estar violando as políticas de um conteúdo, por tanto se for capturar informações de um site, peça primeiro autorização dos mesmos.

Vamos ver um exemplo:

<?php
// Endereço do site
$url = 'http://www.mauricioprogramador.com.br';

// Pegando dados do Site e colocando em uma String
$dadosSite = file_get_contents($url);

// Exibindo o retorno
echo $dadosSite;
?>

No exemplo acima pegamos todo o conteúdo da home do blog Mauricio Programador e colocamos em um string, ao escrever esta string com o comando echo obtemos o blog inteiro, observe como este comando e poderoso e as possibilidades que ele nos dá.

Algumas observações são importantes:
  • Alguns servidor por motivos diversos, o principal segurança, não permite que esta função seja utilizada;
  • Utilize a função com responsabilidade;
  • Ao copiar conteúdo de outros sites, peça autorização.


"Esta dica te ajudou de alguma forma?" Então ajude outras pessoas compartilhando este conteúdo com seus amigos! =)


Até a próxima.

Comentários

Sua foto do perfil

Ana Lucatti

Ola Mauricio, eu preciso pegar preços produtos de sites de venda como o kabum e colocar no site que estou desenvolvendo pro meu TCC, gostaria de saber se é possível fazer como o exemplo que você mostrou? E se os preços quando atualizados no site de origem, atualizem automático no meu também?? como se fosse o buscapé.

02 de Março de 2016 - 11:29

Sua foto do perfil

Mauricio Programador

Olá Ana,

É possível sim fazer, você irá usar a mesma técnica aqui aplicada neste post, porém terá que saber um pouco mais de expressão regular para poder retirar um dado especifico do site.

E para ele atualizar o preço sempre que atualizar em outro site você terá que colocar um script que vai verificar no site de tempos em tempos para ele poder atualizar a sua base de dados também.

Abraço.

28 de Abril de 2016 - 10:53

Sua foto do perfil

Antonio

Olá! Eu não entendo nada de programação, mas estou precisando de um programa que pegue dados em um site de resultados de jogos esportivos(número de gols, pontos, quero fazer somas dos gols entre as duas equipes, médias e cálculos de desvio padrão, colocar colorações quando estiverem acima ou abaixo de um determinado valor desejado etc.), contudo não o acho em nenhum lugar. Gostaria de saber se com essa linguagem PHP eu poderei fazer isso e quanto cobrariam para fazer isso para mim.
Obrigado!

10 de Janeiro de 2016 - 11:24

Sua foto do perfil

Mauricio Programador

Olá Antonio,

Você pode fazer isso com o PHP sim, mais precisamente com Expressão Regulares, agora quanto a pegar o serviço infelizmente não posso lhe ajudar, pois já tenho uma agenda bem lotada e o blog e para compartilhamento de conhecimento mesmo.

Abraço.

13 de Janeiro de 2016 - 15:18

Sua foto do perfil

gabriel

cara, que lindo. Vou poder constuir meu próprio pocket agr!

OBS: libera comentários pelo facebook, as notificações são bem melhores...

06 de Janeiro de 2016 - 16:55

Sua foto do perfil

Rafael

Mauricio, boa tarde.
Primeiramente parabéns pelo site.
Como eu faço pra pegar alguns inputs hidden do site e transformar em uma variável?
EX de um input:
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="C2EE9ABB" />
Transformar o value do input em uma variável pra ser usada no meu php
Aguardi e Obrigado

12 de Setembro de 2015 - 14:12

Sua foto do perfil

Mauricio Programador

Olá Rafael,

Obrigado.

Se você esta tentando pegar este conteúdo de outro site, você vai ter que usar uma expressão regular para isso.

Ficaria mais ou menos assim:

preg_match_all('/input id="__VIEWSTATEGENERATOR"(.+)<\/input>/', $dadosSite, $conteudo);

Claro que para isso você vai ter que adaptar o seu código.


Abraço

15 de Setembro de 2015 - 11:03

Sua foto do perfil

Rafael

Obrigado pela resposta Mauricio. Consegui usando a expressão da seguinte forma:
preg_match_all('/id="__VIEWSTATEGENERATOR"? value="(.*)"/', $dadosSite, $conteudo);
echo $conteudo[1][0];
Novamente parabéns pelo site.

16 de Setembro de 2015 - 09:43

Sua foto do perfil

Mauricio Programador

Legal Rafael.

Abraço.

16 de Setembro de 2015 - 09:44

Sua foto do perfil

André Guilherme Hoffmann Rosa

Como nosso amigo Robson teve problemas, também tive em obter os valores do site http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_resultado.asp.
Minha pergunta é, temos a possibilidade de obter os números da loteria de uma outra forma Mauricio?

23 de Junho de 2015 - 13:15

Sua foto do perfil

Mauricio Programador

Olá André,

Eu não fiz nada ainda que pegasse algum conteúdo deste site, então não sei dizer se este site realmente trava este tipo de recurso.

O que acontece quando você da o echo em $dados? ele da erro?

Abraço.

25 de Junho de 2015 - 09:45

Sua foto do perfil

Willian

Olá mauricio como posso usar esse mesmo principio :
preg_match_all('/<title>(.+)<\/title>/', $dadosSite, $conteudo);
echo $conteudo[1][0]; para obter o valor de um input hidden?

31 de Maio de 2015 - 18:10

Sua foto do perfil

Mauricio Programador

Olá Willian,

Você terá que analisar algumas coisas, se o input tem ID, se ele tiver id pode fazer assim:

preg_match_all('/input id="ID"(.+)<\/input>/', $dadosSite, $conteudo);

Seria mais ou menos isso, claro que para funcionar vai depender de como ta a estrutura no input dentro do HTML

Agora se não tiver ID você terá que usar expressões regulares.

Abraço.

01 de Junho de 2015 - 09:19

Sua foto do perfil

Clauber Cassaro

Bom dia Mauricio. Estou desenvolvendo um site para meu irmão, porém não sou muito expert em PHP ainda, e queria colocar numa página do site algumas notícias, mas que se atualizassem sozinhas. Gostaria de pegar o conteúdo de um site como este http://www.ambito-juridico.com.br/site/?n_link=ultimas_noticias .

Como devo proceder seguindo estas dicas que vc deu?

Um grande abraço.

11 de Maio de 2015 - 16:39

Sua foto do perfil

Mauricio Programador

Olá Clauber,

Para fazer isso você teria que saber expressão regulares, pois e como coloquei na resposta do comentário do Joel neste mesmo post.

Você precisa criar uma regra especifica para pegar uma parte do site e cada site tem uma regra especifica, por isso o uso de expressão regular.

Abraço.

13 de Maio de 2015 - 09:10

Sua foto do perfil

Luciano

Ola Mauricio Precido DB mysql de um site. meu site é igualzinho muda alguns detalhes... meu banco esta com erro.... Se vc mexe com php tenho dois SITES com Banco para consertar os ERROS...

24 de Março de 2015 - 10:24

Sua foto do perfil

Mauricio Programador

Olá Luciano,

Este post fala de como pegar o conteúdo HTML, banco de dados já são protegidos dentro do servidor.

Para obter o banco de dados de um site entre em contato com os administradores do mesmo.

Abraço.

25 de Março de 2015 - 09:23

Sua foto do perfil

felipe

Mauricio, nao estou conseguindo testar o script...eu abro ele no local host e so aparece uma tela branca...meus outros scripts php estao rodando de boa

06 de Fevereiro de 2015 - 03:51

Sua foto do perfil

Mauricio Programador

Olá Felipe,

aqui esta funcionando perfeitamente, o erro deve ser outra coisa.

Você alterou algo no código? Qual a versão do seu PHP?

Abraço.

06 de Fevereiro de 2015 - 09:44

Sua foto do perfil

felipe

Mauricio, nao alterei nadinha! minha versao é a 5.3 do php...sera que é esse o problema?

09 de Fevereiro de 2015 - 09:46

Sua foto do perfil

Mauricio Programador

Não, com esta versão ele deveria funcionar normal, em qual site você esta tentando pegar os dados? Sabe se ele tem segurança conta este tipo de comando?

09 de Fevereiro de 2015 - 09:48

Sua foto do perfil

Adriano

Usei preg_match_all('/<title>(.+)<\/title>/', $dadosSite, $conteudo);
echo $conteudo[1][0];

funciona legal, mas eu quero pegar o conteudo da div id="content", então como eu faço?

02 de Janeiro de 2015 - 16:38

Sua foto do perfil

Mauricio Programador

Olá Adriano,

basta trocar o <title> por <div id="content".

Abraço.

05 de Janeiro de 2015 - 08:54

Sua foto do perfil

Giordano

E como eu faço para usar esse php em sí, tipo ele é compilado com o C++, ou tem algum programa para executar suas linhas de comando?

05 de Dezembro de 2014 - 19:11

Sua foto do perfil

Mauricio Programador

Olá Giordano.

Para rodar o PHP e muito simples, veja o post do link abaixo:

Instalando Ambiente de Programação para PHP

Abraço.

08 de Dezembro de 2014 - 09:31

Sua foto do perfil

Fabio

Olá, Como faço para pegar o N do CA desse site http://www.sesmt.com.br/ConsultaCA e jogar automatico para minha pagina, só requer digitar o numero do ca na minha página , entende ? o Usuário digita o numero, o preg vai digita na ural e retorna pra mim , dá pra fazer ?

22 de Novembro de 2014 - 14:43

Sua foto do perfil

Mauricio Programador

Olá Fabio,

neste tipo de caso o melhor é entrar em contato com o site e pedir autorização para que eles liberem algum tipo de web service para você.

Pois neste caso você não esta apenas pegando o conteúdo do site e sim fazendo uma consulta na base de dados deles, e isso sem autorização pode dar problema.

Abraço.

24 de Novembro de 2014 - 08:56

Sua foto do perfil

michel handson

Bom dia, gostei muito do seus post. mas usária o mesmo para pegar uma pagina só com uma tag?
exemplo:

quando coloco a palavra:CBF no search do site da globo. O site me mostra uma pagina com todoas as noticias da CBF, das atuais ate as ultimas... somente noticias da CBF, gostaria de pegar esse link apresentado e colocar em uma div no meu site na index.

ou seja mostrando em uma div de 400 x 600 o conteudo dessa pagina, sendo que ajeitaria o desing no meu css.. me da uma luz por favor.

15 de Outubro de 2014 - 09:01

Sua foto do perfil

Mauricio Programador

Olá Michel,

para fazer isso você vai ter que entender sobre Expressões Regulares, e aplicar a técnica dentro do site alvo.

Aqui tem um exemplo de como pegar o valor da Tag title de um site:

preg_match_all('/<title>(.+)<\/title>/', $dadosSite, $conteudo);
echo $conteudo[1][0];

Dai so teria que aplicar isso com o site alvo, porém nem todos permitem esta técnica.

Abraço

15 de Outubro de 2014 - 09:49

Sua foto do perfil

Lee Motosuwa

Mauricio, eu achei sua pagina fantástica... muito boa mesmo. fala bem numa linguagem que até um leigo como eu entende. Eu li varias dúvidas de leitores e estou com um probleminha. Eu, como muitos outros, estou querendo capturar informações diferentes de sites diferentes para meu banco de dados e assim transferi-las para um aplicativo. Eu vi que vc respondeu pacientemente em todos os tópicos que a solução são as expressões regulares. Mas e se esses sites não seguirem o mesmo padrão ou não tem a mesma linguagem tbm funciona? eu posso capturar tudo para um web service e depois utilizar as informações num aplicativo utilizando as expressões regulares?

Parabéns pelo site e perdoe qualquer pergunta simples ou sem nexo. Como eu disse, sou um iniciante leigo.

11 de Agosto de 2014 - 20:42

Sua foto do perfil

Mauricio Programador

Olá Lee,

Obrigado pelas palavras.

Sim uma das soluções seria a expressões regulares, porém se os sites não tiverem no mesmo padrão você teria que desenvolver uma expressão para cada um deles.

A linguagem neste ponto não importa já que ele vai pegar o HTML.

Você poderia sim jogar as informações dentro do seu banco e depois tratar ela para usar em seu aplicativo sem problemas.

Espero ter esclarecido suas dúvidas.

Abraço.

12 de Agosto de 2014 - 13:24

Sua foto do perfil

Marinho

Cara, boa tarde.

Achei seu blog e está muito bom. Pois bem, não são nenhum especialista em php e estou com o seguinte problema. Quero passar o valor da variável "Browsers do código acima para um variável em PHP, para depois fazer um trim e usar apenas a palavra "Internet Explorer". Não consegui... Tá aí o código completo do arquivo index de teste. Dá uma ajuda?

05 de Agosto de 2014 - 17:43

Sua foto do perfil

Mauricio Programador

Olá Marinho,

Eu criei um post (Passar Variável Javascript para PHP) para mostrar como fazer isso porém ele so funciona para exibição, pois o PHP e interpretado no servidor e o JavaScript no navegador.

Depende o que você quer fazer seria bom ver se esta é a melhor forma de se fazer.

Qualquer coisa posta aí.

Abraço.

06 de Agosto de 2014 - 11:54

Sua foto do perfil

ds

Olá , gostaria de saber qual site eu posso criar o meu site que eu digite codigos php e funcione .
Se tiver gratuito , de preferencia , caso não tenha gratuito, passe-me o do mais barato por favor, desde já, grato.
_______
DS

23 de Julho de 2014 - 14:33

Sua foto do perfil

Mauricio Programador

Olá ds,

Não entendi muito bem sua pergunta, porém se você e iniciante aqui vai alguns links para você conseguir se encontrar:

Softwares para desenvolvimento PHP

Instalando Ambiente de Programação para PHP [Em vídeo]

Já para hospedar o site na internet você encontra vários e de variados preços, basta fazer uma busca no Google por hospedagens PHP.

Abraço

25 de Julho de 2014 - 12:39

Sua foto do perfil

robson

Por que não funciona com o site das loterias da Caixa?
Ex: http://www1.caixa.gov.br/loterias/loterias/megasena/megasena_resultado .asp

03 de Julho de 2014 - 09:03

Sua foto do perfil

Mauricio Programador

Olá Robson,

alguns sites bloquei o uso do file_get_contents, para evitar a copia de conteúdo.

Abraço.

03 de Julho de 2014 - 14:23

Sua foto do perfil

Jefferson

Muito bom blog, explica passo a passo! Alguns dão saltos e você não entende nada.

14 de Junho de 2014 - 14:33

Sua foto do perfil

Ayslan

Boa noite,

Estou querendo colocar a programação de dois cinemas no meu site. Porém os sites onde contém a informação é em PHP.

Pode me ajudar a capturar somente a programação dos filmes?
Cinema 01
http://www.circuitocinemas.com.br/programacao/cinema.php?cc=20

Cinema 02
http://www.moviecom.com.br/programacao.php?id=MAR

Desde já, muito obrigado.

26 de Maio de 2014 - 02:03

Sua foto do perfil

Mauricio Programador

Olá Ayslan,

para fazer isso você vai ter que entender um pouco sobre Expressões Regulares, e aplicar a técnica dentro do site alvo.

Aqui tem um exemplo de como pegar o valor da Tag title de um site:

preg_match_all('/<title>(.+)<\/title>/', $dadosSite, $conteudo);
echo $conteudo[1][0];

Abraço e boa sorte aí com o projeto.

26 de Maio de 2014 - 10:40

Sua foto do perfil

Robson

boa tarde! essas linhas de comando estão sendo muito útil para meu aprendizado, mas nao estou conseguindo de forma alguma alterar elas para que eu posso pegar o conteudo de uma tabela especifica de um site, exemplo quero pegar a tabela de media de preço por estado desse site: "http://www.agrolink.com.br/cotacoes/Default.aspx" se poder me ajudar..

16 de Abril de 2014 - 10:51

Sua foto do perfil

Mauricio Programador

Olá Robson,

Fico feliz que tenha ajuda. Não vi o site que você me enviou em especifico, porém para fazer isso você precisa saber Expressões Regulares, veja um exemplo:

Por exemplo se eu fosse pegar o valor da Tag title de um site:

preg_match_all('/<title>(.+)<\/title>/', $dadosSite, $conteudo);
echo $conteudo[1][0];

Dai você só vai ter que criar a regra no Expressão da forma que pegue a tabela em questão.

Abraço.

16 de Abril de 2014 - 16:40

Sua foto do perfil

Wagner

Joel,

Criei uma página em meu wordpress no meu computador e copiei o conteúdo da página (através do código fonte, em ferramentas) e colei em minha página no KlickSite.
A página roda normlamente, porem, parte dos dados estão sendo acessados do meu computador, pois quando eu desligo o Wamp, a página não carrega completamente.
Como faço para rodar completamente essa página no KlickSite, sendo que eles não tem a opção de importar?

07 de Abril de 2014 - 03:55

Sua foto do perfil

Mauricio Programador

Olá Wagner,

na verdade deve ser algum caminho que esta apontando para o "localhost", verifique seus arquivos e altere os endereços para que fique corretos.

Abraço.

08 de Abril de 2014 - 09:39

Sua foto do perfil

JLBELO

Oi, no exemplo do Joel, eu tenho o login e senha autorizados. Qual a dica para fazer a entrada via file_get_contents e pegar o conteúdo de determinado campo (de nome "valor" por exemplo)? Obrigado e parabéns

29 de Março de 2014 - 17:08

Sua foto do perfil

Mauricio Programador

Olá Jlbelo,

este método pega tudo que tiver no HTML, mas por exemplo se você quer pegar o conteúdo que alguém digitou em algum campo de formulário você terá que usar JavaScript e para isso você tem que ter acesso aos arquivos.

Daí e mais complexo. Não sei se erá bem esta sua dúvida, qualquer coisa posta aí.

Abraço.

31 de Março de 2014 - 10:32

Sua foto do perfil

Robson

como fasso pra pegar o conteudo de uma div?

25 de Março de 2014 - 10:29

Sua foto do perfil

Mauricio Programador

Olá Robson,

e da mesma forma que respondi o comentário a baixo, a melhor forma de fazer isso e com Expressões Regulares, veja um exemplo:

Por exemplo se eu fosse pegar o valor da Tag title de um site:

preg_match_all('/<title>(.+)<\/title>/', $dadosSite, $conteudo);
echo $conteudo[1][0];

Dai você só vai ter que criar a regra no Expressão da forma que pegue o valor da Div.

Abraço.

25 de Março de 2014 - 15:23

Sua foto do perfil

Joel

Ótimo tópico mauricio, parabéns.
estou com uma dúvida, de como pegar um certo trecho do site e armazenar no meu banco de dados.
ex: quero pegar um raking de um site, armazenar no meu banco e depois exibir no meu site. porém não quero pegar a página toda. seria possivel ??

10 de Janeiro de 2014 - 14:49

Sua foto do perfil

Mauricio Programador

Olá Joel,

é possível sim, existem algumas formas, porem a que eu considero melhor e Expressões Regulares, não sei se você usar mais veja um exemplo:

Por exemplo se eu fosse pegar o valor da Tag Titulo de um site poderia usar assim:

preg_match_all('/<title>(.+)<\/title>/', $dadosSite, $conteudo);
echo $conteudo[1][0];

Dai você só vai ter que criar a regra no Expressão da forma como o site que você esta pegando o ranking tem.

Grande abraço.

10 de Janeiro de 2014 - 15:15

Sua foto do perfil

Joel

Me ajudou bastante, porém outra dúvida, estou fazendo essa requisição em um site que necessita de login e senha, ou seja, preciso que ele se logue sozinho pelo meu site, para que eu manipule as informações como, ranking, tabelas e etc. isso seria possivel tambem ? ou somente em sites em que não é preciso estar logado para ver os dados ?

mais uma vez Obrigado !

10 de Janeiro de 2014 - 18:48

Sua foto do perfil

Mauricio Programador

Joel,

Se você já estivesse logado até seria possível, mas fazer este login automático e já pegar os dados seria bem difícil ao menos que você faça uma parceria com o site de onde você irá puxar as informações para criar uma comunicação entre os sistemas.


Grande abraço.

10 de Janeiro de 2014 - 18:50

NEWSLETTER

Receba dicas de programação
em seu e-mail

TWITTER

Acompanhe tudo o que rola
com Mauricio Programador

NEWSLETTER