Created
July 4, 2012 10:45
-
-
Save codeincontext/3046692 to your computer and use it in GitHub Desktop.
How long does it take you to retweet things from Hacker News?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!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