To combat this problem we had to change how the feed worked. Originally we pulled from the user_timeline stream found at http://twitter.com/statuses/user_timeline/zefie.json however we had no control over this. Switching to the search API, we lose the ability to see the post of the person whom I was replying to. Although we do not much care since this new code also removes @reply's from the list. After all, we only want 'broadcast' tweets, not individual replies.
Now, there is a drawback because the filtering of @replies is done in javascript, so if we got a whole page of @replies, nothing will show in the feed. I am still looking into this. For now, to combat this, we will load 15 tweets from twitter, and stop when we have parsed 5 that are not @replies.
First off, instead of calling the user_timeline feed noted above, we are calling a custom search pattern: http://search.twitter.com/search.json?q=&from=zefie¬s=New+Blog+Entry&rpp=15&callback=twitterCallback&result_type=recent
To explain:
- from=zefie (We only want tweets zefie sent)
- nots=New Blog Entry (We do not want any tweets containing all 3 of these words, since this is how twitterfeed prefixes a new post
- rpp=15 (15 tweets)
- callback=twitterCallback (run our callback instead of Twitter's twitterCallback2 in blogger.js
- result_type=recent (Sort by date, not popularity)
function removeEntities(string) { return string.replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/&/,'&'); } function twitterCallback(results) { var statusHTML = []; var max = 5; var j = 0; var tweets = results.results; for (var i=0; i<tweets.length; i++){ if (j == max) { break; } var username = tweets[i].from_user; var source = tweets[i].source; var status = tweets[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) { return ''+url+''; }).replace(/\B@([_a-z0-9]+)/ig, function(reply) { return reply.charAt(0)+''+reply.substring(1)+''; }).replace(/\B#([_a-z0-9]+)/ig, function(hashtag) { return ''+hashtag+''; }); if (tweets[i].to_user == null) { j++; statusHTML.push('
'+relative_time(tweets[i].created_at)+' via '+removeEntities(source)+'
No comments:
Post a Comment