Skip to content

Instantly share code, notes, and snippets.

@codeincontext
Created July 4, 2012 10:45
Show Gist options
  • Select an option

  • Save codeincontext/3046692 to your computer and use it in GitHub Desktop.

Select an option

Save codeincontext/3046692 to your computer and use it in GitHub Desktop.
How long does it take you to retweet things from Hacker News?
<!DOCTYPE html>
<html>
<head>
<title>How Old Was That?</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
var username = "";
$.xhrPool = [];
$.xhrPool.abortAll = function() {
$.each(this, function(_,jqXHR) {
jqXHR.abort();
});
};
$.ajaxSetup({
beforeSend: function(jqXHR) {
$.xhrPool.push(jqXHR);
}
});
var Endpoint = new function() {
var RESOLVER_URL = 'http://almaer.com/endpoint/resolver.php';
var RESOLVER_CALLBACK = '__Endpoint_resolve';
var count = 0;
var append = function(url) {
var appender = document.createElement('script');
appender.src = url;
appender.type = 'text/javascript';
document.getElementsByTagName('body')[0].appendChild(appender);
}
return {
resolve: function(url, userCallback) {
var serverCallback = RESOLVER_CALLBACK + (count++);
var serverUrl = RESOLVER_URL
+ '?url=' + url
+ '&callback=' + serverCallback;
window[serverCallback] = userCallback;
append(serverUrl);
},
isRedirecting: function(newurl, originalurl) {
return (newurl != '') && (newurl != originalurl);
}
};
};
function timeBetween(time1, time2){
var units = [
{ name: "second", limit: 60, in_seconds: 1 },
{ name: "minute", limit: 3600, in_seconds: 60 },
{ name: "hour", limit: 86400, in_seconds: 3600 },
{ name: "day", limit: 604800, in_seconds: 86400 },
{ name: "week", limit: 2629743, in_seconds: 604800 },
{ name: "month", limit: 31556926, in_seconds: 2629743 },
{ name: "year", limit: null, in_seconds: 31556926 }
];
var diff = (new Date(time2) - new Date(time1))/1000;
if (diff < 0) return "before";
var i = 0;
while (unit = units[i++]) {
if (diff < unit.limit || !unit.limit){
var diff = Math.floor(diff / unit.in_seconds);
return (diff + " " + unit.name + (diff>1 ? "s" : "")) + ' after';
}
};
}
function getResults() {
username = $('input').val();
$.xhrPool.abortAll();
$('.tweet').remove();
getTweets();
}
function getTweets(page) {
page = page || 1;
console.log(page)
var params = {
from: username,
q: 'filter:links',
include_entities: true,
rpp: 100,
page: page
}
$.getJSON('http://search.twitter.com/search.json?callback=?', params, function(json, textStatus) {
console.log(json.results.length)
$.each(json.results, function(_, tweet) {
var url = tweet.entities.urls[0].expanded_url;
// expand url
Endpoint.resolve(url, function(url, original) {
findTweetOnHN(tweet, url);
});
});
if (page < 10) {
getTweets(++page);
}
});
}
function findTweetOnHN(tweet, url) {
var params = {
// from: 'hackernewsbot',
from: 'newsycombinator',
q: 'filter:links ' + url,
include_entities: true,
rpp: 100
}
$.getJSON('http://search.twitter.com/search.json?callback=?', params, function(json, textStatus) {
if (json.results.length) {
var timeDiff = timeBetween(json.results[0].created_at, tweet.created_at);
printTweet(tweet.text, timeDiff);
}
});
}
function printTweet(tweetText, timeDiff) {
var contents = '<div class="tweet"><div class="text">"'
+ tweetText
+ '"</div><div class="time">'
+ timeDiff
+ ' it trended on Hacker News</div>';
$('#results').append(contents);
}
$(getResults);
$(function() {
$('input').keypress(function(e) {
if (e.which == 13) {
getResults();
}
});
});
</script>
<style type="text/css">
.tweet {
margin: 15px;
background-color: #B9D5F9;
}
.text {
font-size: 18px;
}
.time {
font-weight: bold;
}
</style>
</head>
<body>
<h1>How Old Was That?</h1>
<p>
How long does it take you to retweet things from Hacker News?
</p>
<div>
<label for="username">Username</label>
<input type="text" name="username" value="relequestual" id="username" />
</div>
<div id="average">
</div>
<div id="results">
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment