Copiando conteúdo de outras páginas com PHP

Não caras, não vou ensinar você a sugar o conteúdo de um monte de blogs e sites para que fique rico, i am sorry ;-)

Este post vai ser rápido, um breve comentário…

Quando eu estava mais envolvido com projetos de desenvolvimento Web tive que atender uma solicitação onde deveríamos pegar o conteúdo de determinada página e publicar em outra, lógico que o conteúdo era dinâmico então não era simplesmente “copiar”, tínhamos que arrumar uma forma de manter sempre atualizado de acordo com o outro site.

Existem mil explicações que justificam a cópia sem que se caracterize plágio ou roubo de conteúdo mas não vale a pena pois o post vai ser curto.

Como eu coordenava a equipe de desenvolvimento tive o luxo de fingir que sabia como resolver e deixar que o resto do pessoal quebrar a cabeça atrás de uma solução, estavam quase decididos a criar um sistema e atualizar manualmente quando um gênio apareceu com uma solução bem simples para copiar o conteúdo de uma página com PHP.

Simples e satisfatória a solução consistia basicamente em acessar a página como um documento de texto, gravar todo seu conteúdo em uma determinada variável e depois usar expressões regulares para definir o exato trecho da página que queremos copiar… Na época não me interessei muito, afinal eles iriam resolver, mas hoje estou precisando fazer algo parecido e…

Descobri que não sou tão bom em expressões regulares como eu pensava.

Puta merda!

Consegui fazer o script funcionar mas por falhas na minha ER ele vem com um pouco de lixo, resolvi a situação com o comando str_replace() para limpar os caracteres desnecessários mas poxa o que custa estudar um pouco mais e criar uma ER que sirva sem precisar de gambiarras?


12 respostas para “Copiando conteúdo de outras páginas com PHP”

  1. Leo hoje descobri um post meu que o blogueiro copiou ate as fotos. acho demais copiar as fotos e usar meu blog com host. foi triste porque as fotos deram problema e o cara ainda nao viu que as fotos estao com problemas e os links esta levando para meu blog

  2. Cilene, isso é muito chato mesmo, basta você mudar o endereço da imagem que o cara se ferra, tem gente que até troca a imagem por outra esculhambando o site do cara.

  3. Certa vez precisei fazer algo parecido, como o site que eu precisava copiar tinha feed eu absorvia o feed.

    E sobre o plagio que a cilene falou faz um HotLink com uma imagem constrangedora, ao menos vai rir um pouco deles, já sofri com esse problema…

  4. É daniel, quando rola um feed da pra fazer mais tranquilão.

  5. Olá, Baiano! Como vai?

    Poxa, uma POGzinha, de vez em quando, não faz mal a ninguém! Alguns dizer que é até saudável… rsrs

    Coincidentemente, eu também abordei justamente este assunto Link, usando, também, esse tipo de “gambiarra” para funcionar direitinho.

    Abraços!

  6. Eita mundo pequeno Tárcio, eu estava pesquisando na net e li o seu artigo (muito bom).

    Conseguiu alguma solução mais agradável cara? Limpar o lixo não da tanto trabalho mas me deixa com uma sensação de que poderia ter feito algo melhor… :-)

  7. Usar DOM me parece uma solução mais interessante, expressão também quebra facil se o cara mudar a página (trocar o layout por exemplo)

    Dependendo do que você precisa “limpar”, strip_tags() é uma boa opção!

  8. Valeu André, você tem alguma fonte para que eu possa iniciar os estudos sobre como fazer isso usando DOM?

  9. @ Leo Baiano

    Aqui, Baiano, na verdade, até existe uma forma mais simples e “sem sujeira” de fazer isso, sim, mas o “código-algo” deve ser um documento XHTML bem formado e sem erros!

    O esquema é usar o SimpleXML com o PHP. A gente dá um file_get_contents() na página, depois transforma num objeto SimpleXMLElement; daí, dá pra “buscar” um elemento da página como se fosse propriedades daquele objeto. Por exemplo:

    $file = file_get_contents(”O_SITE_QUE_QUISER”);
    $xml = new SimpleXMLElement($file);
    var_dump($xml);
    echo htmlentities($xml->body->p);
    echo htmlentities($xml->body->table->tr);
    [...]

    Mas, repetindo, a página que a gente vai pegar o conteúdo tem que estar bem-feitinha; do contrário, não dá…

    Abração!

  10. Leo, eu sempre uso como referencia do próprio manual disponivel no site do php.

    Tarcio, por isso sugeri o uso de DOM, na versão 5 do php tem esse loadHTML que ajuda na questão do html mal-formado.

    http://us3.php.net/manual/pt_BR/domdocument.loadhtml.php

    ps: Leo, não prestei atenção outras vezes, mas agora apareceu pra mim, no rodape do site esse erro: Warning: mysql_connect() [function.mysql-connect]: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2) in /home/secundum/public_html/parceiros/pluginml.php on line 27
    Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

  11. Tárcio, no meu caso não daria pois as páginas que preciso pesquisar não estão tão bem formatadas, mesmo assim valeu a dica, achei uma solução muito interessante vou estudar o assunto.

    Andre, é um erro provocado por um plugin externo vou verificar. Obrigado!

  12. Eu geralmente em expressão regular resolvo com meu amigo ECL @ freenode at ##php-br, caso contrario sofro mas resolto, ainda estou nessa também de criar coragem e aprender de vez expressão regular com vontade.

    Abraços ;P

Deixe uma resposta