2010-08-27 3 views
0

Je me demandais si quelqu'un peut m'aider avec le problème suivant. Je suis venu dans le code suivant qui tire dans les derniers messages Twitter et les affiche sur un site:

//Handle the scrolling of the tweets in the footer 
$(function() { 
    var tweetVP = $("#footerTweetsViewport"); 
    arrTweetNav = ECC.tweetArray(); 

    thisTweetID = arrTweetNav[0]; 

    $("ul#tweetControls > li").bind("click", function(e) { 
     e.preventDefault(); 

     var thisPos = $.inArray(thisTweetID, arrTweetNav); 

     if ($(this).hasClass("tweetPrev")) { 
      nextPos = thisPos - 1;    
     } else { 
      nextPos = thisPos + 1; 
     } 
     nextID = arrTweetNav[nextPos]; 

     //If that tweet exists in the DOM... 
     if ($("#listOfTweets > #" + nextID).length) { 
      //Reset the inactive buttons 
      $("ul#tweetControls > li").removeClass("inactive"); 
      //Scroll to the destination 
      tweetVP.scrollTo("#" + nextID, 200); 
      //Set the thisID to the value of the nextID 
      thisTweetID = nextID; 
     } 

     //Disable the controls if we're on the first or last tweet 
     if (nextPos == arrTweetNav.length-1) { 
      $("ul#tweetControls > li.tweetNext").addClass("inactive"); 
     } else if (nextPos == 0) { 
      $("ul#tweetControls > li.tweetPrev").addClass("inactive"); 
     } 
    }).bind("mousedown", function() { 
     $(this).closest("li").addClass("click"); 
    }).bind("mouseup", function() { 
     $(this).closest("li").removeClass("click") 
    }); 

}); 

//Search the dom for twitter containers that need tweets loaded for 
$(function() { 
    $(".globalTweetWrapper").each(function() { 
     var thisUsername = $(this).attr("class").replace("globalTweetWrapper ", ""); 
     var tweetContainer = $(this); 
     var loadTweets = tweetContainer.find(".loadTweets"); 
     //Detect if we're going to flush the tweets 
     var flushTweets = $.getUrlVar("flushTweets"); 
     if (flushTweets != 1) { 
      flushTweets = 0; 
     } 

     $.getJSON("get-tweets.cfm?username=" + thisUsername + "&flushTweets=" + flushTweets, function(data) { 
      if (data.length && loadTweets.length) { 
       loadTweets.remove(); 

       $.each(data, function(i,item) { 
        if (tweetContainer.attr("id") == "listOfTweets") { 
         tweetContainer.append("<li class='tweetContainer' id='" + item.ID + "'>" + item.TWEET + "<small class='darkGray'>" + item.DATE + "</small></li>"); 
        } else { 
         tweetContainer.append("<p class='tweetContainer'>" + item.TWEET + "</p><small class='darkGray'>" + item.DATE + "</small>"); 
         if (i == 1) return false; 
        } 
       }); 

       //Rebuild the tweet array 
       arrTweetNav = ECC.tweetArray(); 
       thisTweetID = arrTweetNav[0]; 
      } 
     }); 
    }); 
}); 

C'est le conteneur HTML pour les Tweets sur le site est la suivante:

<div class="footerItem posRelative"> 
<h3><a href="twitter url goes here/mytwitterid" rel="external" title="Follow us on Twitter">Follow us</a> on Twitter</h3> 
<ul id="tweetControls"> 
<li class="tweetPrev inactive">Previous Tweet</li> 
<li class="tweetNext">Next Tweet</li> 
</ul> 

<div id="footerTweetsViewport"> 
<ul id="listOfTweets" class="globalTweetWrapper"> 
</ul> 

Mon site n'est pas coldfusion; donc je veux simplement modifier le get-tweets.cfm et voudrait de l'aide s'il vous plaît. Je suis venu à travers les éléments suivants:

//initialize a new curl resource 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'twitter url goes here/statuses/user_timeline/twitterusername.json?count=10'); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$content = curl_exec($ch); 
curl_close($ch); 

if($content === FALSE) { 
//Content couldn't be retrieved... Do something 
} else { 
//Content was retrieved do something with it. 
} 

Je voudrais vraiment reconstruire le rendez-vous tweets.cfm à un script PHP get-tweets.php; Cependant, je ne suis pas sûr de savoir exactement ce que j'ai besoin de faire pour que cela fonctionne comme dans le script coldfusion car tout le reste fonctionne bien.

Un grand merci

+1

Pourriez-vous s'il vous plaît placer votre extrait PHP et le conteneur HTML HTML dans les boîtes de code SO. – danielgwood

+0

Avez-vous essayé de rechercher des scripts existants qui font cela? Ou qu'en est-il d'une solution Javascript? –

Répondre

0

Un nouveau script get_tweets pour obtenir des tweets, filtrer les colonnes que vous vouliez, cache (en cas de défaillance de Twitter) et les résultats d'écho.

<?php 

$username = "danielgwood"; 
$num = 5; 

$feed = "http://search.twitter.com/search.json?q=from:" . $username . "&rpp=" . $num; 

$cachefile = dirname(__FILE__)."/twitter.json"; 

// Get new contents 
$newTweets = @file_get_contents($feed); 

// Filter columns 
$tweets = array(); 
if($newTweets !== null) { 
    $newTweetsObj = json_decode($newTweets); 

    foreach($newTweetsObj->results as $tweet) { 
     $tweets[]['ID'] = $tweet->id; 
     $tweets[]['TWEET'] = $tweet->text; 
     $tweets[]['DATE'] = $tweet->created_at; 
    } 

    $newTweets = json_encode($tweets); 
} 

// Cache result 
if($newTweets !== null) { 
    @file_put_contents($cachefile, $newTweets); 
} 

$tweets = @file_get_contents($cachefile); 

echo $tweets; 

?> 
+0

Grande aide et merci pour cela. –

0

Twitter fournit des tweets au format JSON via l'API. Vous devez les récupérer, les mettre en cache sur votre serveur (écrire dans un fichier en dehors de l'arborescence Web) au cas où Twitter tomberait comme il le fait régulièrement, puis faire écho au JSON pour que le Javascript puisse être récupéré.

Je ne l'ai pas testé, mais c'est certainement dans le bon sens. Voir bavotasan.com

$username = "your-user-name"; 
$num = 5; 

$feed = "http://search.twitter.com/search.json?q=from:" . $username . "&amp;rpp=" . $num; 

$newfile = dirname(__FILE__)."/twitternew.json"; 
$file = dirname(__FILE__)."/twitter.json"; 

copy($feed, $newfile); 

$oldcontent = @file_get_contents($file); 
$newcontent = @file_get_contents($newfile); 

if($oldcontent != $newcontent) { 
    copy($newfile, $file); 
} 
$tweets = @file_get_contents($file); 

echo $tweets; 

je devrais noter la solution ci-dessus est conçu pour remplacer entièrement le script coldfusion. Pour utiliser l'extrait PHP que vous avez déjà, il suffit d'ajouter la mise en cache dans le fichier et les parties d'écho. Cela devrait vous aider, sinon tout le chemin.

+0

Salut, merci pour cela. Donc, en ce qui concerne le code que vous avez mis ci-dessus, cela devrait simplement s'asseoir dans le script get-teets.php ... et à part cela, il devrait fonctionner avec le code déjà affiché et placer les tweets dans le conteneur DOM créé dans le HTML? –

+0

Je le crois, même si, comme je le dis, je n'ai pas eu l'occasion de le tester. – danielgwood

+0

Je vais bientôt travailler sur le test et la rétroaction ... merci encore pour votre aide à ce sujet! Vraiment apprécié. –

Questions connexes