8791 sujets

Développement web côté serveur, CMS

Bonjour ou bonsoir.

Je viens ici pour me faire aider. J'ai crée un petit système de récupération de mon dernier tweet, mais lors du foreach, j'obtiens l'erreur "Notice: Trying to get property of non-object in ..". J'ai cherché d'où venait le problème, mais je n'ai pas trouvé et je m'en remets à vous.

Merci d'avance de votre aide Smiley smile


function initialisation()
{
    $filename = "cache.txt";
    $datecreation = filemtime($filename);
    $time = time();
    if( $time > ($datecreation + 60) )
    {
        creationcache();
    }
    else
    {
        affiche_tweet();
    }
}
function creationcache()
{
    $twitterUser = "**************";
    $twitterPassword = "**************";
    $twitter= curl_init();
    curl_setopt($twitter,CURLOPT_URL,"http://$twitterUser:$twitterPassword@twitter.com/statuses/user_timeline.json?count=1");
    curl_setopt($twitter,CURLOPT_TIMEOUT,10);
    curl_setopt($twitter,CURLOPT_RETURNTRANSFER,true);
    $tweet=curl_exec($twitter);
    if($tweet)
    {
        file_put_contents('cache.txt',$tweet);
    }
    affiche_tweet();
}
function affiche_tweet()
{
    $rawTweets = file_get_contents('cache.txt', true);
    $tab= json_decode($rawTweets);
    foreach($tab as $a)
    {
            echo twitter_specials($a->text);
    }
}
function twitter_specials($text)
{
$recherche = array('|(http://[^ ]+)|', '/(^|[^a-z0-9_])@([a-z0-9_]+)/i','/(^|[^a-z0-9_])#([a-z0-9_]+)/i');
$replace = array('<a href="$1">$1</a>', '$1<a href="http://twitter.com/$2">@$2</a>','$1<a href="http://twitter.com/#search?q=%23$2">#$2</a>');
$text = preg_replace($srecherche, $replace, $text);
return($text);
}
initialisation();

Modifié par Salixor (23 Oct 2010 - 20:45)
Allo

Normal « $text » n'est pas un n'est pas un objet : $a->text
Mais tu peut utiliser « stdClass » si tu veut faire un objet avec « $text »

$text = new stdClass();
$text = preg_replace($srecherche, $replace, $text);

Là seulement tu pourras utiliser « $text » comme un objet : $a->text;

++
Modifié par zardoz (23 Oct 2010 - 18:04)
zardoz a écrit :
Allo

Normal « $text » n'est pas un n'est pas un objet : $a-&gt;text
Mais tu peut utiliser « stdClass » si tu veut faire un objet avec « $text »

$text = new stdClass();
$text = preg_replace($srecherche, $replace, $text);

Là seulement tu pourras utiliser « $text » comme un objet : $a-&gt;text;

++


Ca ne marche toujours pas ...
Hello

Dans le code suivant je ne me fie pas à ton script.
Je traite uniquement la notion d'objet avec stdClass

$br = '<br>';
$objet = new stdClass;
$objet->text = array ('Premier texte'=>'Texte 1', 'Deuxième texte'=>'Texte 2');
# --
foreach ($objet->text as $cle=>$c)
  print_r (utf8_decode ($cle) . ' : ' . $c . $br);


Résultat ?
Premier texte : Texte 1
Deuxième texte : Texte 2

Si tu tiens vraiment à ce que « text » soit un objet tu devras passer par « stdClass » $objet->text = valeur;
J'avoue ne pas avoir vérifier ton script mais la notion d'objet est possible avec stdClass.
Il n'y a pas de « Notice : » à l'exécution du programme. Il s'agit d'un objet.

La notion d'objet ce fait en POO seulement sauf si tu utilise « stdClass » on peut traiter les propriétés comme des objets avec -> comme : $objet->text = valeur;

++
Modifié par zardoz (23 Oct 2010 - 21:39)