Skip to content

RSS WidGet ( Erro chato )

janeiro 9, 2009
tags: , ,

======= O QUE ESTÁ EXPLICADO ABAIXO QUASE RESOVE ===

Meu acesso a RSS em widgets funcionava em localhost, mas no servidor(hostdime) nada.

Maldito erro!

1º suspeita:

O servidor estava bloqueando o acesso por causa de alguma configuração de segurança.
A base pra esta conclusão foi este ticket reaberto malandristicamente por um cara para conseguir ajuda do povo que desenvolve o wordpress.
link: http://trac.wordpress.org/ticket/4744

Até entrar em contato com o cara que reabriu o ticket, eu entrei. O nome dele é: Kendall Kunz (http://meetkendall.com ), mas ele não sabia qual porta tinha que ser liberada(foi a pergunta que fiz a ele)

Depois de atazanar o suporte do meu servidor, por causa do link, eles disseram que o problema não é este, e me atentaram para o logo de erro que dizia o seguinte:
[09-Jan-2009 20:16:42] not well-formed (invalid token) at line X, column X

A mensagem acima me levou a segunda suspeita (que teria sido a primeira se não fosse o caso do carinha do link acima que era igualzinho ao meu, aparentemente)

2ª Suspeita:

Tem caracteres fazendo dar erro em algo. (assim mesmo pq não entendo nada de RSS no wordpress, nem fora dele)

Achei a função:

function _response_to_rss ($resp) {

por causa de um carinha que tava tendo problema com uns caracters específicos e fez o seguinte:

function _response_to_rss ($resp) {

$resp->results = str_replace(“©”,”Copyright”,$resp->results);  // to fix Nascar feed
$resp->results = str_replace(“©”,”Copyright”,$resp->results); // to fix CNN feeds
$rss = new MagpieRSS( $resp->results );
….

Mas não funcionou…

aí eu tive a brilhante e obvia idéia de dar um echo em $resp->results e ver o que tava aí

aí o problema apareceu

Na coluna 8 da linha 4 tinha uma interrogaçãozinha (ou seja, algo não reconhecido pelo meu exibir código fonte, do firefox). Aí foi só fazer:

function _response_to_rss ($resp) {

$resp->results = utf8_encode($resp->results);
$rss = new MagpieRSS( $resp->results );

Observações importantes:

1 – No localhost  funcionava blz, o erro era só no cervidor. Ao usar utf8_encode, sumiu o erro no servidor, mas os caracters acentuados em localhost ficaram com problemas (mas os itens do RSS são listados). Ex.: Gerador online: você no poster do filme ‘O dia em que a Terra parou” (Talvez seja pq meu servidor é linux, não sei).

2 – Pra poder resolver o problema, desativei o cache do RSS que o wordpress faz. Para desativar mexe no código abaixo:

if ( !defined(‘MAGPIE_CACHE_ON’) ) {
define(‘MAGPIE_CACHE_ON’, 1); <—– 1 hora de cache
//define(‘MAGPIE_CACHE_ON’, 0); <—— sem cache
}

3-Quando eu atualizar o wordpress tenho que voltar aqui e consertar novamente

=====QUASE FIM DO PROBLEMA ==========================================================================

PENSEI QUE TINHA RESOLVIDO, MAS QUANDO ATIVEI NOVAMENTE O CACHE DÁ O SEGUINTE ERRO:

Warning: Attempt to assign property of non-object in /home/aamigos/public_html/wp-includes/rss.php on line 449

===================================================

Criei o dir “wp-content/cache” e dei permissão de escrita

===================================================

SOLUÇÃO FINAL – CACHE OFF, RSS 85% satisfatório

NO FINAL, ALÉM DE TUDO ACIMA, FIZ ESTA DISGRAÇA(baianês) aí de baixo, pra ele não tentar codificar o já codificado, o que deixaria o texto no server (somente em alguns RSS) igual ao do meu localhost com utf_encode (porra, tô atrasado pra ir ver minha namorada, tonto e com os olho ardendo, merda!):

/******************** VINICIUS ***************************************************************************/

function is_utf8($str) {
$c=0; $b=0;
$bits=0;
$len=strlen($str);
if ($len > 300) $len = 300;
for($i=0; $i<$len; $i++){
$c=ord($str[$i]);
if($c > 128){
if(($c >= 254)) return false;
elseif($c >= 252) $bits=6;
elseif($c >= 248) $bits=5;
elseif($c >= 240) $bits=4;
elseif($c >= 224) $bits=3;
elseif($c >= 192) $bits=2;
else return false;
if(($i+$bits) > $len) return false;
while($bits > 1){
$i++;
$b=ord($str[$i]);
if($b < 128 || $b > 191) return false;
$bits–;
}
}
}
return true;
}
/***********************************************************************************************/

/**
* Retrieve
*
* @since unknown
* @package External
* @subpackage MagpieRSS
*
* @param unknown_type $resp
* @return unknown
*/
function _response_to_rss ($resp) {
$resp->results = str_replace(”©”,”Copyright”,$resp->results);  // to fix Nascar feed
$resp->results = str_replace(”©”,”Copyright”,$resp->results); // to fix CNN feeds
if (!is_utf8($resp->results)){
$resp->results = utf8_encode($resp->results);
}
$rss = new MagpieRSS( $resp->results );

==================

mas tá funcionando 🙂

Anúncios
One Comment leave one →
  1. outubro 20, 2009 8:46 pm

    Valeu doido foi já na segunda suspeita resolveu meu problema!!

    sem cache!

    achei q poderia ser problema de servidor PHP5. ufa!

    Valeu

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: