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

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

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

06 de Janeiro de 2016 - 16:55

Sua foto do perfil

Rafael

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

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

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

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

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

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

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

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

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

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

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

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

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

14 de Junho de 2014 - 14:33

Sua foto do perfil

Ayslan

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

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

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

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

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