Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
O script abaixo "puxa" as atualizações de qualquer Feed RSS porem a data e a hora exibida aparecem errada
já efetue várias tentativas de correção no script porem sem sucesso,
poderiam por favor me ajudar a corrigir o script abaixo para que exiba a data e hora corretamente de acordo com a hora e data da publicação registrada no RSS Feed
Exemplo:
Exibido pelo script
31/12/1969 às 21:12:00 - Alerta para implicações de chuvas no norte de Moçambique, após inundações...
Exibido pelo RSS Feed
30/01/2013 às 16:14:00 - Alerta para implicações de chuvas no norte de Moçambique, após inundações...
$titulo = array();
$data = array();
$link = array();
$quantos = 10;
$exibir = 10;
$limite_title = 100;
foreach(simplexml_load_file("http://rss.uol.com.br/feed/noticias.xml")->channel->item as $item) {
$titulo[] = (substr($item->title, 0, $limite_title)."...");
$link[] = $item->link;
$data[] = strtotime($item->pubDate);
$quantos++;
}
for($i = $quantos-($exibir+10); $i < $quantos-10; $i++) {
if ($titulo[$i]!="") {
echo
'<p class="data_noticias"><br/>'.str_replace(" ", " às ", date('d/m/Y H:m:s', $data[$i])).' -
<a href="'.utf8_decode($link[$i]).'" target="_blank" title="Leia mais clicando aqui!" class="classe2">'.utf8_decode($titulo[$i]).'</a>';
}
}
Desde já agradeço pela ajuda
Mayck
Mude Isto:
date('d/m/Y H:m:s', $data[$i])
Para Isto:
date('d/m/Y H:m:s', strtotime($data[$i]))
Com Isto Deverá Funcionar :thumbsup:
Boa noite,
Agradeço pela ajuda porem ainda não deu certo
agradeceria se me desse outra sugestão
O horário que vem no RSS está no formato brasileiro, e pelo que vi, até os nomes dos meses:
<pubDate>Qui, 31 Jan 2013 08:08:26 -0200</pubDate>
Então, fiz uma conversão usando expressão regular (PHP 5.3):
<?php
$url = 'http://rss.uol.com.br/feed/noticias.xml';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
curl_close($curl);
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadXML($result);
$xpath = new DOMXPath($dom);
$items = $xpath->query('//channel/item');
$meses = explode(',',',jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez');
$reg_horario = '@\w{3}\, (\d{2}) (\w{3}) (\d{4}) (\d{2}:\d{2}:\d{2}) -\d{4}@';
$posts = array();
foreach($items as $item){
$title = $xpath->query('title',$item)->item(0)->nodeValue;
$link = $xpath->query('link',$item)->item(0)->nodeValue;
$description = $xpath->query('description',$item)->item(0)->nodeValue;
$pubDate = $xpath->query('pubDate',$item)->item(0)->nodeValue;
$pubDate = preg_replace_callback($reg_horario, function($matches) use ($meses) {
list(,$dia, $mes, $ano, $horario) = $matches;
$mesNum = array_search(strtolower($mes), $meses);
return sprintf('%02d/%02d/%d %s',$dia,$mesNum,$ano,$horario);
}, $pubDate);
$posts[] = compact('title','link','description','pubDate');
}
// agora, aqui podemos fazer o que quisermos com o array posts
// foreach($posts as $post) ...
Veja que utilizei a biblioteca cURL para recuperar os dados.
Usar file_get_contents direto pode ser restrito em alguns servidores.
PS: Se alguém souber uma maneira mais fácil de converter essa data estranha que vem no RSS, sugestões são bem vindas ;)
@braços!
quando exibir 31/12/1969
é por que ocorreu um erro na hora de tentar a conversão do formato
verifique se esta chegando a data direito antes de você usar a função date