O Feed RSS é utilizado por diversos sites e portais de noticias, é através dele que fornecemos aos nossos usuários as últimas atualizações. Para ler esse Feed, é necessário um leitor especifico, já que o site ou página entrega o conteúdo no formato .XML.
RSS é um formato de distribuição de informações em tempo real pela internet, no qual um subconjunto de "dialetos" XML que servem para agregar conteúdo ou "Web syndication", podem ser acessados mediante programas ou sites agregadores. É usado principalmente em sites de notícias e blogs. Fonte Wikipedia
Atualmente o Feed RSS está na sua segunda versão, nomeada de Really Simple Syndication, que significa algo como Entrega muito simples.
Para você ver como isso funciona de perto, pode acessar o Feed RSS da SatellaSoft, disponível em: https://satellasoft.com/feed.
Utilizando o navegador Opera, por exemplo, podemos ver o Feed em ação, visto que por padrão o browser já tem um leitor de RSS.
Feed RSS com PHP
Agora que já vimos e entendemos para que serve o Feed RSS, vamos para a nossa videoaula, você pode conferir todas as aulas a seguir.
Introdução (Origem, conceito, funcionalidade...)
Preparando o ambiente (composer, montar estrutura de imagens...)
Criando os elementos principais do feed (rss, channel, image...)
Criando e testando os elementos finais
Código de Feed RSS com PHP
Todo o código utilizado na aula está disponível a seguir.
Estrutura de pastas:
app/
------ FeedRss.php
composer.json
index.php
FeedRss.php
<?php
namespace app;
use DOMDocument;
class FeedRss
{
public function renderRss()
{
header('Content-type: text-xml');
$data = $this->getData();
if (empty($data)) {
return;
}
$xml = new DOMDocument('1.0', 'utf-8');
//Rss
$rss = $xml->createElement('rss');
$rss->setAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1');
$rss->setAttribute('version', '2.0');
//Channel
$channel = $xml->createElement('channel');
$channelTitle = $xml->createElement('title', 'Meu Site - O maior site Gamer da internet');
$channelLink = $xml->createElement('link', 'https://meusite.com');
$channelDescription = $xml->createElement('description', 'O maior e melhor site gamer da internet');
$channelLanguage = $xml->createElement('language', 'pt-BR');
$channel->appendChild($channelTitle);
$channel->appendChild($channelLink);
$channel->appendChild($channelDescription);
$channel->appendChild($channelLanguage);
$rss->appendChild($channel);
//Image
$image = $xml->createElement('image');
$image->appendChild($xml->createElement('title', 'Meu Site - O maior site Gamer da internet'));
$image->appendChild($xml->createElement('link', 'https://meusite.com'));
$image->appendChild($xml->createElement('url', 'https://satellasoft.com/img/artigos/2021/01/343/estilizando-botoes-com-css-thumb.webp'));
$channel->appendChild($image);
//Itens
foreach ($data as $produto) {
$item = $xml->createElement("item");
$itemDescription = $xml->createElement('description');
$itemDescription->appendChild($xml->createCDATASection($produto['descricao']));
$dtPub = date('D, d M Y H:i:s ', strtotime($produto['publicacao'])) . '-0300';
$item->appendChild($xml->createElement('pubDate', $dtPub));
$itemEnclosure = $xml->createElement('enclosure');
$itemEnclosure->setAttribute('url', $produto['imagem']['url']);
$itemEnclosure->setAttribute('type', 'image/jpg');
$itemEnclosure->setAttribute('length', 0);
$item->appendChild($itemEnclosure);
$item->appendChild($xml->createElement('link', $produto['link']));
$item->appendChild($xml->createElement('guid', $produto['link']));
//ITEM IMAGE
$itemImage = $xml->createElement('image');
$imageTitle = $xml->createElement('title');
$imageTitle->appendChild($xml->createCDATASection($produto['imagem']['titulo']));
$itemImage->appendChild($xml->createElement('link', $produto['link']));
$itemImage->appendChild($xml->createElement('url', $produto['imagem']['url']));
$itemImage->appendChild($imageTitle);
$item->appendChild($itemImage);
//Fim
$item->appendChild($itemDescription);
$channel->appendChild($item);
}
$xml->appendChild($rss);
$xml->formatOutput = true;
echo $xml->saveXML();
}
private function getData()
{
return [
[
'descricao' => 'Mouse Gamer de última geração',
'publicacao' => '2020-12-31 23:10:59',
'link' => 'https://meusite.com/prouto/mouse-top',
'imagem' => [
'url' => 'https://academy.satellasoft.com/img/thumbs/thumb_33f87bec68db791632b21808966dd778.webp',
'titulo' => 'mouse gamer de última geração com alta qualidade'
],
],
[
'descricao' => 'teclado gamer de última geração',
'publicacao' => '2020-12-27 13:10:00',
'link' => 'https://meusite.com/prouto/teclado-top',
'imagem' => [
'url' => 'https://satellasoft.com/img/artigos/2020/12/336/configurando_steam_link_no_android_thumb.webp',
'titulo' => 'Teclado gamer mecânico de última geração'
],
],
[
'descricao' => 'Monitor gamer ultra-wide',
'publicacao' => '2021-01-01 15:10:59',
'link' => 'https://meusite.com/prouto/monitor-ultra-wide',
'imagem' => [
'url' => 'https://satellasoft.com/img/artigos/2020/12/339/torchlight-ii-esta-de-graca-na-epic-store-thumb.webp',
'titulo' => 'Monitor games ultra-wide de última geração'
],
],
[
'descricao' => 'Headset 7.1 com alta definição',
'publicacao' => '2021-01-10 12:35:20',
'link' => 'https://meusite.com/prouto/headset-71',
'imagem' => [
'url' => 'https://satellasoft.com/img/artigos/2021/01/343/estilizando-botoes-com-css-thumb.webp',
'titulo' => 'Headset para jogos e filmes'
],
],
[
'descricao' => 'Gabinete Gamer colorido com neon',
'publicacao' => '2021-01-13 10:10:59',
'link' => 'https://meusite.com/prouto/gabinete-gamer',
'imagem' => [
'url' => 'https://academy.satellasoft.com/img/thumbs/thumb_f98feabf9c927b418ddf7803c823a929.jpg',
'titulo' => 'Gabinete Game colorido com muitos neons'
],
],
];
}
private static function dd($param)
{
echo '<pre>';
print_r($param);
echo '</pre>';
die();
}
}
index.php
<?php
require_once('vendor/autoload.php');
use app\FeedRss;
//$feed = new FeedRss();
//$feed->renderRss();
(new FeedRss())->renderRss();
composer.json
{
"name": "gunna/projeto",
"authors": [
{
"name": "SatellaSoft",
"email": "email_...@gmail.com"
}
],
"require": {},
"autoload" : {
"psr-4": {
"app\\" : "app/"
}
}
}
Não esqueça de abrir seu terminal e rodar o comando abaixo, assim o Composer vai criar o autoload corretamente.
composer update
Concluímos por aqui, espero que você tenha gostado e nos vemos na próxima.