Ir para conteúdo
Fórum Script Brasil
  • 0

Xml De Várias Fontes


Guest - Marcos -

Pergunta

7 respostass a esta questão

Posts Recomendados

  • 0

Não é bem um agregador como esse do Google.

É mais ou menos o seguinte:

pego as notícias do uol em xml

pego as notícias do estadão em xml

crio um novo xml com as notícias dos dois

Link para o comentário
Compartilhar em outros sites

  • 0

beleza. estou estudando um pouco mais de xml com php. Acho que é por aí.

Veja só um exemplo legal em:

http://www.blogsieve.com/

você pode cadastrar vários endereços de rss e ele te envia o endereço já agregado com todos.

Problemas:

1) Ele diz que está em ordem de data, mas não está.

2) As atualizações não são muito frequentes. Acho que duas no dia. Parece que tá bom mas não atende o que eu quero, que é notícias "fresquinhas". Senão, é melhor visitar o próprio site dos jornais ou usar um feeder.

3) E além disso, não durou uma semana e não funcionou mais.

Link para o comentário
Compartilhar em outros sites

  • 0

Não era bem o que eu pensava, mas ficou até melhor.

<?php

/*Adaptado por Marcos Vinícius Rinaldi de

Global Syndication's RSS Parser

*/

set_time_limit(0);

$file = "http://www.estadao.com.br/rss/agestado.xml";

$rss_channel = array();

$currently_writing = "";

$main = "";

$item_counter = 0;

function startElement($parser, $name, $attrs) {

    global $rss_channel, $currently_writing, $main;

    switch($name) {

     case "RSS":

     case "RDF:RDF":

     case "ITEMS":

      $currently_writing = "";

      break;

     case "CHANNEL":

      $main = "CHANNEL";

      break;

     case "IMAGE":

      $main = "IMAGE";

      $rss_channel["IMAGE"] = array();

      break;

     case "ITEM":

      $main = "ITEMS";

      break;

     default:

      $currently_writing = $name;

      break;

    }

}

function endElement($parser, $name) {

    global $rss_channel, $currently_writing, $item_counter;

    $currently_writing = "";

    if ($name == "ITEM") {

     $item_counter++;

    }

}

function characterData($parser, $data) {

global $rss_channel, $currently_writing, $main, $item_counter;

if ($currently_writing != "") {

  switch($main) {

   case "CHANNEL":

    if (isset($rss_channel[$currently_writing])) {

     $rss_channel[$currently_writing] .= $data;

    } else {

     $rss_channel[$currently_writing] = $data;

    }

    break;

   case "IMAGE":

    if (isset($rss_channel[$main][$currently_writing])) {

     $rss_channel[$main][$currently_writing] .= $data;

    } else {

     $rss_channel[$main][$currently_writing] = $data;

    }

    break;

   case "ITEMS":

    if (isset($rss_channel[$main][$item_counter][$currently_writing])) {

     $rss_channel[$main][$item_counter][$currently_writing] .= $data;

    } else {

     $rss_channel[$main][$item_counter][$currently_writing] = $data;

    }

    break;

  }

}

}

$xml_parser = xml_parser_create();

xml_set_element_handler($xml_parser, "startElement", "endElement");

xml_set_character_data_handler($xml_parser, "characterData");

if (!($fp = fopen($file, "r"))) {

die("could not open XML input");

}

while ($data = fread($fp, 4096)) {

if (!xml_parse($xml_parser, $data, feof($fp))) {

  die(sprintf("XML error: %s at line %d",

     xml_error_string(xml_get_error_code($xml_parser)),

     xml_get_current_line_number($xml_parser)));

}

}

xml_parser_free($xml_parser);

// output HTML

     $a = ("<div class=\"channelname\">" . $rss_channel["TITLE"] . "</div>");

if (isset($rss_channel["ITEMS"])) {

if (count($rss_channel["ITEMS"]) > 0) {

  for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) {

   if (isset($rss_channel["ITEMS"][$i]["LINK"])) {

     $b = ("\n<div class=\"itemtitle\"><a href=\"" . $rss_channel["ITEMS"][0]["LINK"] . "\">" . $rss_channel["ITEMS"][0]["TITLE"] . "</a></div>");

     $c = ("\n<div class=\"itemtitle\"><a href=\"" . $rss_channel["ITEMS"][1]["LINK"] . "\">" . $rss_channel["ITEMS"][1]["TITLE"] . "</a></div>");  

     $d = ("\n<div class=\"itemtitle\"><a href=\"" . $rss_channel["ITEMS"][2]["LINK"] . "\">" . $rss_channel["ITEMS"][2]["TITLE"] . "</a></div>");

   } else {

   print ("\n<div class=\"itemtitle\">" . $rss_channel["ITEMS"][$i]["TITLE"] . "</div>");

   }

     }

} else {

  print ("<b>Não há artigos publicados no Estadão.</b>");

}

}

?>

Dá um include desta na página que você quer e um echo das variáveis que você quer mostrar (a é o título, b, c e d ou outras que você quiser criar, são as notícias no formato de link).

Pra colocar notícias de outras páginas é só criar outra e mudar o endereço lá em cima e o nome das funções das linhas 12, 36 e 44. E claro, as variáveis tb. Include dela tb e escolhe as variáveis de quais sites você quer.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...