D. SC 0 Denunciar post Postado Julho 2, 2013 Olá. Estive pesquisando no Google algo parecido e encontrei ótimos resultados, porém, não era ainda o que eu queria. Eu vi alguns tutoriais ensinando algo do tipo, mas todos utilizavam apenas um Feed e eu quero fazer com que leia mais de um. Vários. Tem como fazer isso com PHP? Se sim, só dá com um mesmo? Se só der um, tem outro modo de fazer isso, com outra linguagem ou algo assim? Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Julho 2, 2013 1 - recupere os feeds que você quer; 2 - armazene-os em banco de dados, com um campo de data de publicação 3 - recupere do banco, ordenando pela data de publicação. Compartilhar este post Link para o post Compartilhar em outros sites
D. SC 0 Denunciar post Postado Julho 2, 2013 1 - recupere os feeds que você quer; 2 - armazene-os em banco de dados, com um campo de data de publicação 3 - recupere do banco, ordenando pela data de publicação. Hm. Mas todas as novas postagens vão para o banco de dados na mesma hora em que aparece no Feed, certo? Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Julho 2, 2013 Isso vai depender da sua implementação. Em teoria, todos os feeds em XML tem a data da publicação. Basta você pegar esta data do XML e gravar no banco. @braços Compartilhar este post Link para o post Compartilhar em outros sites
D. SC 0 Denunciar post Postado Julho 2, 2013 Isso vai depender da sua implementação. Em teoria, todos os feeds em XML tem a data da publicação. Basta você pegar esta data do XML e gravar no banco. @braços Eu quis dizer: - Adicionei um Feed de um blog. Legal. O autor do blog posta algo novo e a postagem vai pro Feed. - A postagem automaticamente vai para o banco de dados.__ _______________________________________________ | | \ / \/ Não vai? Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Julho 2, 2013 Isso vai depender da sua implementação. Compartilhar este post Link para o post Compartilhar em outros sites
jorgers 3 Denunciar post Postado Julho 2, 2013 D. SC, Se for um feed externo, por exemplo noticias de um portal tipo G1, R7 etc, os feeds só serão gravados no momento em que a aplicação for executada, ou melhor, quando a página for acessada. Se o feed for interno, ou gerado por uma aplicação sua, então vc pode gravar no banco no momento em que o feeds forem publicados. Entendeu? Agora, dependendo do seu serviço de hospedagem, existe a possibilidade de se agendar uma tarefa no servidor com hora marcada que pode executar um script que leia os feeds e grave no banco. Mas isso depende do serviço de hospedagem. Qualquer que seja a opção escolhida, é preciso ter cuidado para não gravar feeds repetidos. Seria bom que vc também implementação uma rotina que apagasse registros muito antigos do banco, isso evita que sua tabela fique muito grande. Compartilhar este post Link para o post Compartilhar em outros sites
D. SC 0 Denunciar post Postado Julho 2, 2013 D. SC, Se for um feed externo, por exemplo noticias de um portal tipo G1, R7 etc, os feeds só serão gravados no momento em que a aplicação for executada, ou melhor, quando a página for acessada. Se o feed for interno, ou gerado por uma aplicação sua, então vc pode gravar no banco no momento em que o feeds forem publicados. Entendeu? Agora, dependendo do seu serviço de hospedagem, existe a possibilidade de se agendar uma tarefa no servidor com hora marcada que pode executar um script que leia os feeds e grave no banco. Mas isso depende do serviço de hospedagem. Qualquer que seja a opção escolhida, é preciso ter cuidado para não gravar feeds repetidos. Seria bom que vc também implementação uma rotina que apagasse registros muito antigos do banco, isso evita que sua tabela fique muito grande. Entendi. Já utilizei um serviço de hospedagem que oferece essa função. Eu evitava escolher gravar os feeds em um banco de dados para não deixar a tabela muito grande. Meu serviço de hospedagem oferece a função de agendar um script, mas não sei como o mesmo poderia ser. Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Julho 3, 2013 A questão do número de registros ser grande não é um agravante, desde que você tome os devidos cuidados no inicio do projeto. Se você sabe que pode ter um volume de dados alto, pode escolher o tipo de escalonamento de dados adequado (particionamento, índices, etc). Em relação a como ela poderia ser, vai depender também das informações que você deseja armazenar. Na sua opinião, quais são os dados mais relevantes dos feeds que deseja gravar? Responda a pergunta acima e terá, praticamente, a estrutura da tabela. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
jorgers 3 Denunciar post Postado Julho 3, 2013 D. SC, Pelo que estou vendo, vc esta querendo ler RSS externos, certo. Primeiro vc precisa saber o URL dos RSS. Depois descobir qual o formato do retorno, geralmente XML. Nesse caso, o que vc precisa fazer é usar a biblioteca SimpleXML do PHP (http://php.net/manual/pt_BR/book.simplexml.php). Vê lá que tem exemplos pra vc ver como funciona. Ah! Pode ser que vc tenha que definir as diretivas do php para que ele possa acessar arquivos externos ao site. Acho que ativando só a primeira diretiva funciona, se não funcionar habilite a segunda também. # Permitindo acesso a arquivos externos ao site.ini_set("allow_url_fopen", 1); //função habilitada#ini_set("allow_url_include", 1); //função habilitada Compartilhar este post Link para o post Compartilhar em outros sites
D. SC 0 Denunciar post Postado Julho 3, 2013 D. SC, Pelo que estou vendo, vc esta querendo ler RSS externos, certo. Primeiro vc precisa saber o URL dos RSS. Depois descobir qual o formato do retorno, geralmente XML. Nesse caso, o que vc precisa fazer é usar a biblioteca SimpleXML do PHP (http://php.net/manual/pt_BR/book.simplexml.php). Vê lá que tem exemplos pra vc ver como funciona. Ah! Pode ser que vc tenha que definir as diretivas do php para que ele possa acessar arquivos externos ao site. Acho que ativando só a primeira diretiva funciona, se não funcionar habilite a segunda também. # Permitindo acesso a arquivos externos ao site. ini_set("allow_url_fopen", 1); //função habilitada #ini_set("allow_url_include", 1); //função habilitada Já tô enchendo o saco, hein? rs. Eu dei uma boa olhada na página, mas sou péssimo em inglês e entendi pouca coisa :(. Mas eu já conhecia a biblioteca SimpleXML do PHP. Eu sei mais ou menos como ler um feed (externo, sempre me esqueço de dizer) por meio do SimpleXML, mas só um. Dá para ler mais de um feed externo por meio do SimpleXML? Se sim, como é pra fazer mais ou menos? NUNCA achei uma resposta. :cry: Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Julho 3, 2013 Ler um, ou vários, é a mesma coisa. Faça uma função que recebe a URL do feed como argumento: /** * função para carregar o conteúdo de um feed em um XML * * @param string $url URL do feed * @return DOMDocument Objeto XML para poder extrair os dados * @author Hugo Silva */ function getFeed( $url ){ $ch = curl_init( $url ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CRLF, true); $result = curl_exec($ch); $xml = new DOMDocument(); $xml->loadXML( $result ); return $xml; } Defina os Feeds que deseja obter $urls = array( 'http://imasters.com.br/feed/', 'http://esporte.uol.com.br/ultimas/index.xml', 'http://noticias.terra.com.br/rss/Controller?channelid=e3c54b844f65e310VgnVCM3000009acceb0aRCRD&ctName=atomo-noticia' ); Depois leia cada um deles foreach($urls as $url){ $xml = getFeed( $url ); $xpath = new DOMXPath($xml); $channel = $xpath->query('//channel')->item(0); $title = $xpath->query('title', $channel)->item(0)->nodeValue; $items = $xpath->query('item',$channel); echo '<h1>', ($title ?: $url) , '</h1>'; foreach($items as $item){ echo '<a target="_blank" href="', $xpath->query('link', $item)->item(0)->nodeValue, '">'; echo htmlentities($xpath->query('title', $item)->item(0)->nodeValue, ENT_COMPAT, 'UTF-8'); echo '</a><br>'; $dataNode = $xpath->query('pubDate', $item)->item(0); if(!empty($dataNode)){ $data = new DateTime( $dataNode->nodeValue ); echo $data->format('d/m/Y H:i:s'), '<br><br>'; } } } @braços Compartilhar este post Link para o post Compartilhar em outros sites
jorgers 3 Denunciar post Postado Julho 3, 2013 Pô D.SC, o hufersil te dei tudo mastigadinho. Que beleza. Problema resolvido. Compartilhar este post Link para o post Compartilhar em outros sites