Para iniciar este procedimento é recomendado conhecimentos prévios em HTML, Javascript e PHP, para fácil entendimento do processo.



1 - Antes de iniciar o desenvolvimento de um Datasource, verifique se você possui a versão atualizada do programa XAMPP. Ele será responsável por emular um ambiente de host local em sua máquina, e interpretará os arquivos PHP executados. Para isso, realize o download da última versão em:

https://www.apachefriends.org/pt_br/index.html



2 - Depois de feito o Download, instale por completo o programa em sua máquina, e selecione para ele iniciar ao término da instalação.




3 - Para garantir a correta operação do programa, com o uso correto das portas de rede, na linha do Apache, selecione o botão "Config" e, em seguida, a opção "Apache (httpd.conf)"




4 - Pra configurar as portas da máquina que serão utilizadas pelo Apache do XAMPP, mude as linhas "Listen 80" para "Listen 8080" e "Server localhost:80" para "Server localhost:8080".






5 - Com isso, podemos salvar as alterações do documento editado acima e fechar. No XAMPP, inicie o Apache clicando no botão "Start":




Após o XAMPP carregar a inicialização do Apache, ele deverá ficar da seguinte forma:





6 - Agora que temos o XAMPP corretamente configurado, é preciso baixar a última versão do "Simple HTML DOM" em: https://sourceforge.net/projects/simplehtmldom/files/




7 - Após feito o download com sucesso, crie uma pasta "crawlers" no diretório C:\xampp\htdocs\ de sua máquina e extraia a pasta compactada (do download acima) neste mesmo diretório.

Para prosseguir, precisaremos apenas do arquivo "simple_html_dom.php", que estava dentro da pasta compactada:




8 - Configurações finalizadas! Agora sim poderemos partir para a programação!

Observação: todos os arquivos que iremos programar neste momento, devem estar armazenados na pasta C:\xampp\htdocs\crawlers para uso.

Como primeiro passo para a programação, vamos utilizar o arquivo em anexo presente neste procedimento, de nome "facebook2018.php". Copie este arquivo para dentro do diretório C:\xampp\htdocs\crawlers :




9 - Para abrir o arquivo "facebook2018.php", recomendamos a utilização de um editor de textos com capacidade de interpretar e destacar comandos. Um simples e fácil software que cumpre este requisito, é o Notepad++, que pode ser encontrado em: https://notepad-plus-plus.org/download/v7.5.6.html




10 - E então podemos começar a programar! Vamos à explicação do que é cada segmento de código:

Antes de tudo, é importante verificar se o nosso Feed, ou seja, nossa fonte de dados, pode ter seus dados coletados por um script PHP. Conteúdo gerados dinâmicamente através de Javascript, por exemplo, não consegue ser lido por um script PHP, uma vez que executa depois de qualquer comando PHP.



A)


<?php
  error_reporting(E_ERROR | E_WARNING | E_PARSE);
  header('Content-type: text/xml charset="utf-8"');
  require_once('simple_html_dom.php'); 


- No código acima, você pode notar que sempre iniciamos uma programação em PHP, na primeira linha, com o comando "<?php", é ele quem vai definir que o que vem em seguida, é código PHP.


- Em seguida temos uma linha de definição de exibição de erros, caso aconteça algum durante a execução do script.


 error_reporting(E_ERROR | E_WARNING | E_PARSE);


- Para definir, no início do processo, que o nosso script PHP vai gerar um XML com o charset utf-8, é necessário o comando de header:


header('Content-type: text/xml charset="utf-8"');


- Outro código muito importante, e que remete o item 7 deste procedimento, é pedir para o nosso script PHP incluir o arquivo simple_html_dom.php. Nesta inclusão, nosso código poderá conversar com todos os comandos que o simple_html_dom.php oferece. Ele é quem faz a mágica acontecer. Para que esse arquivo seja incluído uma única vez, mesmo que nosso script seja chamado várias vezes, iniciamos o comando com a função require_once();


Resultado: require_once('simple_html_dom.php');



B)


$item = $_GET["item"];
$url = "http://smashballoondemo.com/?id=".$item."&amp;layout=half&amp;type=page&amp;use_token=n&amp;token=";
$userAgent = "Firefox (WindowsXP) - Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6";


- Este código acima, está diretamente relacionado com o tipo de Feed iremos utilizar para a coleta de dados. Cada código é bem específico aqui neste parte, para o que desejamos fazer. Não existe uma resposta mágica rs.

Como este código é bem dinâmico, temos uma variável $item que fica aguardando um valor com o nome item. Esta variável, em específico, é passado ao digitar a URL no navegador.


$item = $_GET["item"];


- Para este script específico, foi usada uma Feed já preparado pelo website Smash Balloon.
Como informado na dica do item 9, é necessário ter conhecimentos prévios em programação Web, para compreender como funciona a passagem de atributos e variáveis por URL, para entender como a variável $url e $item de nosso Script PHP devem funcionar.


$url = "http://smashballoondemo.com/?id=".$item."&amp;layout=half&amp;type=page&amp;use_token=n&amp;token=";


E por final, temos a variável $userAgent, que será utilizada para fazer com que nosso script se passe por um navegdor Firefox da época do Windows XP.


$userAgent = "Firefox (WindowsXP) - Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6";



C)


$c = curl_init();
curl_setopt($c, CURLOPT_USERAGENT, $userAgent);
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_FAILONERROR, true);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_AUTOREFERER, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_VERBOSE, false);
$page = curl_exec($c);
curl_close($c);


- Este é um trecho de código padrão para todos os scripts PHP que são utilizados para os Datasources. é este código que faz as leituras de todas as variáveis citadas nos itens anteriores deste procedimento, e faz a leitura do website através da URL declarada em $url.




D)


$header='<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
  <title>Facebook</title>
  <description>Facebook-Feed</description>
  <link></link>
  <language>pt-br</language>';
echo $header;


- No código acima, temos a definição e a exibição de nosso cabeçalho do XML, definindo a versão do XML que estamos usando, a parte de encoding para o charset utf-8 e a versão de RSS.


- Pontos importantes, que são obrigatórios para a especificação nos Datasources interpretados pelo VDS, é que precisamos iniciar o conteúdo com o comando "<channel>", seguido de title, description, link e language definidos.




E)


$corpo = str_get_html($page);
$ul = $corpo -> find('div[class=entry-content]');
$i = 0;
$procura  = array("&#8220;", "&#8221;", "&nbsp;",  "&quot;", "/\n/", "\s/", "\r\n\r\n");
$acha = array('"', '"', '', '"', '', '', ' - ');


- Este segmento é iniciado com $corpo = str_get_html($page); e é responsável por coletar toda a página que foi lida no segmento "C" e transformar o resultado da página em uma grande string que será interpretada pelos próximos comandos.


- Muitos dos comandos que você verá neste script, são os comandos "find()". Eles são responsáveis por buscar um respectivo valor determinado dentro de seus parênteses, na variável, indicada. No exemplo abaixo, estamos procurando na variável $corpo pelo conteúdo de div, de classe "entry-content", e armazenando a resposta em uma variável que será uma Array, chamada de $ul.


$ul = $corpo -> find('div[class=entry-content]');


- Em seguida é declarada uma variável $i com o valor igual à zero, onde será utilizada como um índice mais para frente.


$i = 0;



- E por último neste segmento, temos a declaração de duas variáveis do tipo Array, que armazenam strings de caracteres especiais, que mais a tardar no código serão utilizadas para remover do Datasource, caracteres indesejados.


$procura  = array("&#8220;", "&#8221;", "&nbsp;",  "&quot;", "/\n/", "\s/", "\r\n\r\n");
$acha = array('"', '"', '', '"', '', '', ' - ');




F)


foreach($ul[0] -> find('div[class^=cff-item]') as $noticias) {
    
    $titulo = $noticias -> find('span[class=cff-text]');
    $pubdate = $noticias -> find('p[class=cff-date]');
    $imagem = $noticias -> find('<img');
    
    $titulo  = $titulo[0];
    $pubdate = $pubdate[0];
    
    $imagem = $imagem[count($imagem) - 1];
    $img = substr($imagem -> src, 0, 16);
    $curtidas = $noticias -> find('span[class=cff-count]');
    $curtidas = $curtidas[0];
    $replace = '/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u';
    $title = preg_replace($replace, '', trim(str_replace($procura, $acha, $titulo -> plaintext)));
    $description = preg_replace  ($replace, '', trim(str_replace($procura, $acha, $titulo -> plaintext)));
    $curtidas = preg_replace($replace, '', trim(str_replace($procura, $acha, $curtidas -> plaintext)));
    $pubdate = str_replace("\n", "", $pubdate -> plaintext);
    
    if ($img != "https://external" &amp;&amp; $img != "" &amp;&amp; $img != null){
      
      $imagem = $imagem -> src;
      
      echo "<item>";
      echo "<title><![CDATA[".html_entity_decode($title)."]]></title>";
      echo "<description><![CDATA[".html_entity_decode($description)."]]></description>";
      echo "<pubdate><![CDATA[".html_entity_decode($pubdate)."]]></pubdate>";
      echo "<linkfoto><![CDATA[".html_entity_decode($imagem)."]]></linkfoto>";
      echo "<likes><![CDATA[".html_entity_decode($curtidas)."]]></likes>";
      echo "<datahora><![CDATA[".date("d/m/Y H:i:s")."]]></datahora>";
      echo "</item>";  

      $i++;
      
      if ($i >= 5){
        break;
      }
    }
  }



- Neste trecho de código, é onde a mágica acontece de coletar todos os itens e segmentos necessários da página do Smash Balloon. Sendo assim, para cada div encontrada, que inicie com "cff-item", será armazenada na variável $notícias.


- Para cada "notícia" encontrada, iremos procurar e armazenar o título, data de publicação, imagem, número de curtidas e descrição.


- Especificamente no código abaixo, é onde são "impressas" as informações recolhidas, dentro de itens de XML, formando segmentos dentro do mesmo que serão interpretados individualmente pelo VDS.

Como nosso índice não pode passar ou ser igual a 5, teremos apenas 4 itens gerados, e depois o código força uma pausa para seguir ao final.



echo "<item>";
      echo "<title><![CDATA[".html_entity_decode($title)."]]></title>";
      echo "<description><![CDATA[".html_entity_decode($description)."]]></description>";
      echo "<pubdate><![CDATA[".html_entity_decode($pubdate)."]]></pubdate>";
      echo "<linkfoto><![CDATA[".html_entity_decode($imagem)."]]></linkfoto>";
      echo "<likes><![CDATA[".html_entity_decode($curtidas)."]]></likes>";
      echo "<datahora><![CDATA[".date("d/m/Y H:i:s")."]]></datahora>";
      echo "</item>";  

      $i++;
      
      if ($i >= 5){
        break;
      }





G)


echo "</channel>
</rss>";

$corpo -> clear();
unset($corpo);
?>


- Neste último trecho, é onde fechamos as tags channel e rss, assim como limpamos o que foi armazenado na variável $corpo, e deixamos de utilizar o vínculo com a variável $corpo.


- o script é encerrado com "?>"




11 - Caso queira testar o script, para verificar se está funcionando como esperado, recomendamos o uso do navegador Google Chrome, digitando na barra de navegação:


http://localhost:8080/crawlers/facebook2018.php?item=B2MidiaDigital



12 - Caso esteja tudo em ordem, basta subir o arquivo PHP criado para o nossa hospedagem em "http://br906.teste.website/~bmidiaco/b2midia/crawlers/", acessando o link: https://br906.hostgator.com.br:2083/logout/?locale=pt_br


Nesta página, utilize o username "bmidiaco" (sem aspas) para o login.

Com respeito a senha, requisite a mesma para seu superior.


Em "Gerenciador de Arquivos", selecione o diretório "public_html > b2midia > crawlers" e insira mande carregar o arquivo PHP do crawler desejado.




13 - A URL de acesso para o script PHP, já completa com os atributos (se necessário e normalmente inseridos depois do final da extensão do arquivo PHP) deve ficar similar tal como o exemplo "http:/meudomínio/b2midia/crawlers/meuArquivo.php?atributo1=MeuValor&atributo2=MeuValor2", sem aspas.



14 - Por fim, acesse o admin do servidor de TV desejado, e selecione "Datasources" > "Criar Datasource" e Preencha o formulário abaixo com os dados necessários (Nome do Datasource e URL com a que foi gerada no item 12).

Lembre-se de deixar como ativa a opção "Download Multimídia" SOMENTE SE o DataSource possuir imagens e/ou vídeos, para que o admin do VDS possa baixar e armazenar imagens e outros conteúdos de mídia.



15 - Pronto, seu novo Datasource será processado dentro de 2 horas pelo servidor, e gerará um Datasource completo que estará listado entre os demais na guia "Datasources" do admin!