/********************************************************************* * #### Twitter Post Fetcher v10.0 #### * Coded by Jason Mayes 2013. A present to all the developers out there. * www.jasonmayes.com * Please keep this disclaimer with my code if you use it. Thanks. :-) * Got feedback or questions, ask here: * http://www.jasonmayes.com/projects/twitterApi/ * Github: https://github.com/jasonmayes/Twitter-Post-Fetcher * Updates will be posted to this site. *********************************************************************/ var twitterFetcher=function(){function x(e){return e.replace(/<b[^>]*>(.*?)<\/b>/gi,function(c,e){return e}).replace(/class=".*?"|data-query-source=".*?"|dir=".*?"|rel=".*?"/gi,"")}function p(e,c){for(var g=[],f=RegExp("(^| )"+c+"( |$)"),a=e.getElementsByTagName("*"),h=0,d=a.length;h<d;h++)f.test(a[h].className)&&g.push(a[h]);return g}var y="",l=20,s=!0,k=[],t=!1,q=!0,r=!0,u=null,v=!0,z=!0,w=null,A=!0;return{fetch:function(e,c,g,f,a,h,d,b,m,n){void 0===g&&(g=20);void 0===f&&(s=!0);void 0===a&&(a= !0);void 0===h&&(h=!0);void 0===d&&(d="default");void 0===b&&(b=!0);void 0===m&&(m=null);void 0===n&&(n=!0);t?k.push({id:e,domId:c,maxTweets:g,enableLinks:f,showUser:a,showTime:h,dateFunction:d,showRt:b,customCallback:m,showInteraction:n}):(t=!0,y=c,l=g,s=f,r=a,q=h,z=b,u=d,w=m,A=n,c=document.createElement("script"),c.type="text/javascript",c.src="//cdn.syndication.twimg.com/widgets/timelines/"+e+"?&lang=en&callback=twitterFetcher.callback&suppress_response_codes=true&rnd="+Math.random(),document.getElementsByTagName("head")[0].appendChild(c))}, callback:function(e){var c=document.createElement("div");c.innerHTML=e.body;"undefined"===typeof c.getElementsByClassName&&(v=!1);e=[];var g=[],f=[],a=[],h=[],d=0;if(v)for(c=c.getElementsByClassName("tweet");d<c.length;){0<c[d].getElementsByClassName("retweet-credit").length?a.push(!0):a.push(!1);if(!a[d]||a[d]&&z)e.push(c[d].getElementsByClassName("e-entry-title")[0]),h.push(c[d].getAttribute("data-tweet-id")),g.push(c[d].getElementsByClassName("p-author")[0]),f.push(c[d].getElementsByClassName("dt-updated")[0]); d++}else for(c=p(c,"tweet");d<c.length;)e.push(p(c[d],"e-entry-title")[0]),h.push(c[d].getAttribute("data-tweet-id")),g.push(p(c[d],"p-author")[0]),f.push(p(c[d],"dt-updated")[0]),0<p(c[d],"retweet-credit").length?a.push(!0):a.push(!1),d++;e.length>l&&(e.splice(l,e.length-l),g.splice(l,g.length-l),f.splice(l,f.length-l),a.splice(l,a.length-l));c=[];d=e.length;for(a=0;a<d;){if("string"!==typeof u){var b=new Date(f[a].getAttribute("datetime").replace(/-/g,"/").replace("T"," ").split("+")[0]),b=u(b); f[a].setAttribute("aria-label",b);if(e[a].innerText)if(v)f[a].innerText=b;else{var m=document.createElement("p"),n=document.createTextNode(b);m.appendChild(n);m.setAttribute("aria-label",b);f[a]=m}else f[a].textContent=b}b="";s?(r&&(b+='<div class="user">'+x(g[a].innerHTML)+"</div>"),b+='<p class="tweet">'+x(e[a].innerHTML)+"</p>",q&&(b+='<p class="timePosted">'+f[a].getAttribute("aria-label")+"</p>")):e[a].innerText?(r&&(b+='<p class="user">'+g[a].innerText+"</p>"),b+='<p class="tweet">'+e[a].innerText+ "</p>",q&&(b+='<p class="timePosted">'+f[a].innerText+"</p>")):(r&&(b+='<p class="user">'+g[a].textContent+"</p>"),b+='<p class="tweet">'+e[a].textContent+"</p>",q&&(b+='<p class="timePosted">'+f[a].textContent+"</p>"));A&&(b+='<p class="interact"><a href="https://twitter.com/intent/tweet?in_reply_to='+h[a]+'" class="twitter_reply_icon">Reply</a><a href="https://twitter.com/intent/retweet?tweet_id='+h[a]+'" class="twitter_retweet_icon">Retweet</a><a href="https://twitter.com/intent/favorite?tweet_id='+ h[a]+'" class="twitter_fav_icon">Favorite</a></p>');c.push(b);a++}if(null==w){e=c.length;g=0;f=document.getElementById(y);for(h="<ul>";g<e;)h+="<li>"+c[g]+"</li>",g++;f.innerHTML=h+"</ul>"}else w(c);t=!1;0<k.length&&(twitterFetcher.fetch(k[0].id,k[0].domId,k[0].maxTweets,k[0].enableLinks,k[0].showUser,k[0].showTime,k[0].dateFunction,k[0].showRt,k[0].customCallback,k[0].showInteraction),k.splice(0,1))}}}(); /* * ### HOW TO CREATE A VALID ID TO USE: ### * Go to www.twitter.com and sign in as normal, go to your settings page. * Go to "Widgets" on the left hand side. * Create a new widget for what you need eg "user timeline" or "search" etc. * Feel free to check "exclude replies" if you dont want replies in results. * Now go back to settings page, and then go back to widgets page, you should * see the widget you just created. Click edit. * Now look at the URL in your web browser, you will see a long number like this: * 345735908357048478 * Use this as your ID below instead! */ /** * How to use fetch function: * @param {string} Your Twitter widget ID. * @param {string} The ID of the DOM element you want to write results to. * @param {int} Optional - the maximum number of tweets you want returned. Must * be a number between 1 and 20. * @param {boolean} Optional - set true if you want urls and hash tags to be hyperlinked! * @param {boolean} Optional - Set false if you dont want user photo / * name for tweet to show. * @param {boolean} Optional - Set false if you dont want time of tweet * to show. * @param {function/string} Optional - A function you can specify to format * tweet date/time however you like. This function takes a JavaScript date * as a parameter and returns a String representation of that date. * Alternatively you may specify the string 'default' to leave it with * Twitter's default renderings. * @param {boolean} Optional - Show retweets or not. Set false to not show. * @param {function/string} Optional - A function to call when data is ready. It * also passes the data to this function should you wish to manipulate it * yourself before outputting. If you specify this parameter you must * output data yourself! * @param {boolean} Optional - Show links for reply, retweet, favourite. Set false to not show. */ // ##### Simple example 1 ##### // A simple example to get my latest tweet and write to a HTML element with // id "tweets". Also automatically hyperlinks URLS and user mentions and // hashtags. twitterFetcher.fetch('345170787868762112', 'example1', 1, true); // ##### Simple example 2 ##### // A simple example to get my latest 5 of my favourite tweets and write to a HTML // element with id "talk". Also automatically hyperlinks URLS and user mentions and // hashtags but does not display time of post. twitterFetcher.fetch('347099293930377217', 'example2', 5, true, true, false); // ##### Advanced example ##### // An advance example to get latest 5 posts using hashtag #API and write to a // HTML element with id "tweets2" without showing user details and using a // custom format to display the date/time of the post, and does not show // retweets. twitterFetcher.fetch('345690956013633536', 'example3', 3, true, false, true, dateFormatter, false); // For advanced example which allows you to customize how tweet time is // formatted you simply define a function which takes a JavaScript date as a // parameter and returns a string! // See http://www.w3schools.com/jsref/jsref_obj_date.asp for properties // of a Date object. function dateFormatter(date) { return date.toTimeString(); } // ##### Advanced example 2 ##### // Similar as previous, except this time we pass a custom function to render the // tweets ourself! Useful if you need to know exactly when data has returned or // if you need full control over the output. twitterFetcher.fetch('345690956013633536', 'example4', 3, true, true, true, '', false, handleTweets, false); function handleTweets(tweets){ var x = tweets.length; var n = 0; var element = document.getElementById('example4'); var html = '<ul>'; while(n < x) { html += '<li>' + tweets[n] + '</li>'; n++; } html += '</ul>'; element.innerHTML = html; }
<html> <head></head> <body> <h1>For latest code please see <a href="https://github.com/jasonmayes/Twitter-Post-Fetcher" title="Twitter Fetcher on GitHub">GitHub</a></h1> <p>As of version 10.0 I am no longer posting to updates to jsfiddle and keeping things central on github instead due to the popularity of this component.</p> <a id="linkage" href="http://www.jasonmayes.com/projects/twitterApi/" target="_blank">Visit my website</a> <h2>Query 1: My latest tweet</h2> <div id="example1"></div> <h2>Query 2: What people are saying about this component!</h2> <div id="example2"></div> <h2>Query 3: Last 3 Twitter posts using hastag #API</h2> <div id="example3"></div> <h2>Query 4: Last 3 Twitter posts using hastag #API with custom callback</h2> <div id="example4"></div> </body> </html>
/* * Example style! * You can do whatever the hell you want on your site :-) */ h2 { clear:both; } p, a { font-size:9pt; margin:10px 0 0 0; color:#3d3d3d; } h1, h1 a { font-size:24pt; } a, a:visited { color:#427fed; } a:hover { color:#82afff; } ul li { list-style:none; overflow:hidden; border:1px solid #dedede; margin:5px; padding:5px; } ul li:hover { background-color:#f0f3fb; } .user, .tweet, .timePosted { float:left; } .user { width:25%; } .tweet { width:50%; } .timePosted { width:15%; } .user { clear:left; } .user a { width: 100px; } .user span span { width:100px; display:block; margin-top:10px; } .user img, .user a > span { float:left; } .interact { float:left; width:10%; margin-top:-7px; } .interact a { margin-left:5px; float:left; } .user a > span { margin-left:10px; } #linkage { position:fixed; top:0px; right:0px; background-color:#3d3d3d; color:#ffffff; text-decoration:none; padding:5px; width:10%; font-family:arial; }