// ==UserScript== // @name Twitter Search Results on Google // @namespace markcarey // @description Shows results from Twitter on Google search pages // @include http://www.google.*/search?*q=* // @include http://www.google.*/* // @date 2009-03-02 // @version 1.0 // @GM_version 0.8.20080609.0 // ==/UserScript== GM_TUR = { un : "", lang : "en", init : function() { var href = document.location.href; GM_TUR.un = href.match(/[&?]q=([^&]*)(?:&|$)/)[1]; GM_TUR.lang = (href.match(/[&?]hl=([^&]*)(?:&|$)/)) ? href.match(/[&?]hl=([^&]*)(?:&|$)/)[1] : 'en'; if( GM_TUR.un != "" ) { GM_xmlhttpRequest({ method:"GET", url:"http://search.twitter.com/search.json?q="+GM_TUR.un+"&lang="+GM_TUR.lang, headers:{ "User-Agent":"Mozilla/5.0", "Accept":"text/json" }, onload:GM_TUR.handle }); } }, handle : function(response) { var r = eval("("+response.responseText+")"); if( r.results && r.results.length > 0 ) { var results = document.getElementById("res"); var ds = document.createElement("ol"); results.setAttribute("style", "float: left; max-width: 60%") ds.setAttribute("style", "float: left; max-width: 37%") results.parentNode.insertBefore(ds, results.nextSibling); //results.insertBefore(ds, results.firstChild); var il, h; var query = unescape(GM_TUR.un).replace(/\+/g, ' '); h = ds.appendChild(document.createElement("li")); h.className = "g"; var h3 = h.appendChild(document.createElement("h3")); h3.className = "r"; h3.innerHTML = "Twitter results for "+ query +""; var t = h.appendChild(document.createElement("table")); t.className = "ts"; t.border="1"; t.cellspacing="3"; t.cellpadding="3"; var tb = t.appendChild(document.createElement("tbody")); var row = tb.appendChild(document.createElement("tr")); row.innerHTML = ''; var myclass; for( var i=0; i < 10; i++ ) { if (i%2) { myclass='background-color:#edf3f3;';} else { myclass='background-color:#F5FAFA;';} il = "
"+ ""+ r.results[i].from_user+": "+ autolink(r.results[i].text)+' '+GM_TUR.tt(new Date(r.results[i].created_at))+'
'; row.innerHTML += il; } row.innerHTML += ''; } }, tt : function(dt) { var nw = new Date(), df = nw - dt, dm = Math.floor(df/60000), dh = Math.floor(dm/60), at = new Date(dt); if( dm <= 0 ) { return "a few seconds ago"; } if( dm < 60 ) { return (dm == 1)?"1 minute ago":dm+" minutes ago"; } if( dh <= 1 ) { return "about 1 hour ago"; } if( dh < 24 ) { return "about " + dh + " hours ago"; } if( (nw.getDate() - dt.getDate()) == 1 ) { return "yesterday"; } at.setDate(at.getDate() + 1); nw.setDate(nw.getDate() + 1); if( (nw.getDate() - at.getDate()) == 1 ) { return "yesterday"; } var minutes = dt.getMinutes(); if( minutes < 10 ) minutes = "0"+minutes; if( dt.getHours() == 0 ) nw = "12:"+minutes+" AM "; else if( dt.getHours() < 12 ) nw = dt.getHours()+":"+minutes+" AM "; else nw = (dt.getHours()-12)+":"+minutes+" PM "; return nw + ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][dt.getMonth()] + " " + dt.getDate(); } }; GM_TUR.init(); function autolink(s) { var hlink = /\s(ht|f)tp:\/\/([^ \,\;\:\!\)\(\"\'\<\>\f\n\r\t\v])+/g; return (s.replace (hlink, function ($0,$1,$2) { s = $0.substring(1,$0.length); // remove trailing dots, if any while (s.length>0 && s.charAt(s.length-1)=='.') s=s.substring(0,s.length-1); // add hlink return " " + s.link(s); } ) ); } function autobold(s) { // todo }