Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Vinícius

Notícias de várias fontes

Recommended Posts

Olá,

 

Estava devendo uma pra vcs, já que estou aprendendo muito com os códigos que encontro aqui.

 

O objetivo deste código é buscar as notícias de sites que as disponibilizam no formato xml e exibir no seu site em formato de link (tipo: noticia).

você pode buscar de vários sites e "montar" as notícias no seu. Cada vez que o site é acessado, as notícias são atualizadas automaticamente. Estou tentando colocar isto em um arquivo de cache e atualizar a cada 'x' minutos, pra não sobrecarregar o servidor. No entanto, ainda não consegui. Aliás, consegui, mas no formato array. Daí não tô conseguindo exibir corretamente no site, as notícias.

 

<?php/*Adaptado por Marcos Vinícius Rinaldi deGlobal Syndication's RSS Parserhttp://www.globalsyndication.com/rss-parser*/set_time_limit(0);$file = "http://rss.home.uol.com.br/index.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	 $title = ("<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"])) {	 $uola = ("\n<div class=\"itemtitle\"><a  href='\""' . $rss_channel["ITEMS"][0]["LINK"] . "\">" . $rss_channel["ITEMS"][0]["TITLE"] . "</a></div>");	 $uolb = ("\n<div class=\"itemtitle\"><a href=\"" . $rss_channel["ITEMS"][1]["LINK"] . "\">" . $rss_channel["ITEMS"][1]["TITLE"] . "</a></div>");   	 $uolc = ("\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 UOL.</b>");}}?>

 

 

Pra usá-lo você pode fazer de duas maneiras. Ou dá um echo das variáveis "$uola, $uolb ou $uolc", ou outras que você quiser criar, ou dá um include desta na página que você quer e um echo das variáveis lá mesmo. ($title é o título do site. As outras são as notícias já no formato de link).

 

Pra colocar notícias de outras páginas é só criar outra página desta 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. Aí, você pode mesclar as notícias, exibi-las por revista, jornal, site...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, usando esse scritp, eu tenho como limitar o numero de linhas de noticias, por exemplo quero q aparece somente 5 linhas de noticias, pois alguns sites como o jornal estado de sp, o ultimas noticias aparecem mais de 10 linhas, obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, usando esse scritp, eu tenho como limitar o numero de linhas de noticias, por exemplo quero q aparece somente 5 linhas de noticias, pois alguns sites como o jornal estado de sp, o ultimas noticias aparecem mais de 10 linhas, obrigado

Tem sim. Aqui eu limitei às três primeiras notícias e armazenei-as em $uola, $uolb e $uolc:$uola = ("\n");$uolb = ("\n"); $uolc = ("\n");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, em primeiro lugar obrigado pela antençãocoloquei o codigo que você me passou, mas agora não aparece nenhuma noticia, coloquei as fontes xml de varios sites mas nenhum aparece mensagem, eu coloquei aqui www.averbi.com.br/noticias.phpeu estou comecando agora no php, devo estar fazendo algo errado, se você puder me ajudar, fico muito agradecido.luiz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, em primeiro lugar obrigado pela antençãocoloquei o codigo que você me passou, mas agora não aparece nenhuma noticia, coloquei as fontes xml de varios sites mas nenhum aparece mensagem, eu coloquei aqui www.averbi.com.br/noticias.phpeu estou comecando agora no php, devo estar fazendo algo errado, se você puder me ajudar, fico muito agradecido.luiz

Olá Luiz,Não basta você colocar este código. Tem que dar um echo das variáveis. P. ex. Se você quer que apareça as notícias em index.php e o código que gera as notícias você chamou de noticias.php dá um include do noticias.php no index.php e, no local que você quer que elas apareçam, dá um echo das variáveis:echo $uola;echo $uolb;...você pode até mesclar as notíciasecho $uola;echo $estadaoa;echo $uolb;echo $estadaob;.....Tudo depende dos arquivos que estão gerando as notícias.Qq problema, posta aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcos, aqui está dando um erro, será que poderia me ajudar, o erro é uma janela que diz o seguinte:Título : php.exe - Erro de aplicativoErro : A instrução no "0x100c5fca" fez referência à memória no "0x00000035". A memória não pôde ser "read".

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara tá dando certo aqui só que tá aparecendo assim::

 

Tráfico: Justiça manda megatraficante Abadía entregar US$ 40 mi em 48h (17/01/08 21:45)

Economia: Pessimismo externo faz Bolsa cair quase 3%; perda no ano bate 10% (17/01/08 21:45)

Vivienne Westwood: 'É hipócrita ricos se vestirem como pobres', diz estilista (17/01/08 19:05)

Moda masculina: Desfile da V.Rom encerra 2º dia (17/01/08 22:40)

 

onde tem acento ele não imprime certo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Marcos Vinícius,

 

Parabéns pelo seu script de noticia cara !

 

Porem estou com o mesmo problema do que o Denilson Melo está, quando mudo no navegador para exibir o conteúdo coma codificação UTF-8 ele exibe as noticias sem erro.

 

Você sabe como eu posso resolver essa questão?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Estava devendo uma pra vcs, já que estou aprendendo muito com os códigos que encontro aqui.

 

O objetivo deste código é buscar as notícias de sites que as disponibilizam no formato xml e exibir no seu site em formato de link (tipo: <a href>noticia</a>).

você pode buscar de vários sites e "montar" as notícias no seu. Cada vez que o site é acessado, as notícias são atualizadas automaticamente. Estou tentando colocar isto em um arquivo de cache e atualizar a cada 'x' minutos, pra não sobrecarregar o servidor. No entanto, ainda não consegui. Aliás, consegui, mas no formato array. Daí não tô conseguindo exibir corretamente no site, as notícias.

 

<?php

/*Adaptado por Marcos Vinícius Rinaldi de
Global Syndication's RSS Parser
http://www.globalsyndication.com/rss-parser
*/

set_time_limit(0);

$file = "http://rss.home.uol.com.br/index.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
	 $title = ("<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"])) {

	 $uola = ("\n<div class=\"itemtitle\"><a href=\"" . $rss_channel["ITEMS"][0]["LINK"] . "\">" . $rss_channel["ITEMS"][0]["TITLE"] . "</a></div>");
	 $uolb = ("\n<div class=\"itemtitle\"><a href=\"" . $rss_channel["ITEMS"][1]["LINK"] . "\">" . $rss_channel["ITEMS"][1]["TITLE"] . "</a></div>");   
	 $uolc = ("\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 UOL.</b>");
}
}

?>

 

 

Pra usá-lo você pode fazer de duas maneiras. Ou dá um echo das variáveis "$uola, $uolb ou $uolc", ou outras que você quiser criar, ou dá um include desta na página que você quer e um echo das variáveis lá mesmo. ($title é o título do site. As outras são as notícias já no formato de link).

 

Pra colocar notícias de outras páginas é só criar outra página desta 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. Aí, você pode mesclar as notícias, exibi-las por revista, jornal, site...

 

ow amigo e quem eh leigo... num entendi direito como faz pra por no site... explica melhor plis..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.