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

Ana Lucatti
02 de Março de 2016 - 11:29

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

Antonio
10 de Janeiro de 2016 - 11:24

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

gabriel
06 de Janeiro de 2016 - 16:55

Rafael
12 de Setembro de 2015 - 14:12

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

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

Mauricio Programador
Legal Rafael.
Abraço.
16 de Setembro de 2015 - 09:44

André Guilherme Hoffmann Rosa
23 de Junho de 2015 - 13:15

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

Willian
31 de Maio de 2015 - 18:10

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

Clauber Cassaro
11 de Maio de 2015 - 16:39

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

Luciano
24 de Março de 2015 - 10:24

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

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

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

felipe
Mauricio, nao alterei nadinha! minha versao é a 5.3 do php...sera que é esse o problema?
09 de Fevereiro de 2015 - 09:46

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

Adriano
02 de Janeiro de 2015 - 16:38

Mauricio Programador
Olá Adriano,
basta trocar o <title> por <div id="content".
Abraço.
05 de Janeiro de 2015 - 08:54

Giordano
05 de Dezembro de 2014 - 19:11

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

Fabio
22 de Novembro de 2014 - 14:43

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

michel handson
15 de Outubro de 2014 - 09:01

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

Lee Motosuwa
11 de Agosto de 2014 - 20:42

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

Marinho
05 de Agosto de 2014 - 17:43

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

ds
23 de Julho de 2014 - 14:33

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

robson
03 de Julho de 2014 - 09:03

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

Jefferson
14 de Junho de 2014 - 14:33

Ayslan
26 de Maio de 2014 - 02:03

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

Robson
16 de Abril de 2014 - 10:51

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

Wagner
07 de Abril de 2014 - 03:55

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

JLBELO
29 de Março de 2014 - 17:08

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

Robson
como fasso pra pegar o conteudo de uma div?
25 de Março de 2014 - 10:29

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

Joel
10 de Janeiro de 2014 - 14:49

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

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

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