/** ========================================== **/ /** RSS FEEDS FOR TWITTER WITH GOOGLE SCRIPTS **/ /** ========================================== **/ /** For Twitter API 1.1 **/ /** For More Tips & Info On Online Marketing And Making Money Online **/ /** Go To www.WorkWithNeilBall.com/ And Enter Your Email Address**/ /** To FInd Out How I Coach And Train Go To www.WorkWithNeilBall.com/ And Enter Your Email Address**/ function start() { // You get your Twitter keys from dev.twitter.com var CONSUMER_KEY = "ABCDEFGHIJKLM0123456"; var CONSUMER_SECRET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCD"; initialize ( CONSUMER_KEY, CONSUMER_SECRET ); } function initialize (key, secret) { ScriptProperties.setProperty("TWITTER_CONSUMER_KEY", key); ScriptProperties.setProperty("TWITTER_CONSUMER_SECRET", secret); var url = ScriptApp.getService().getUrl(); if (url) { connectTwitter(); var msg = ""; msg += "Sample RSS Feeds for Twitter\n"; msg += "============================"; msg += "\n\nTwitter Timeline of user @NeilDBall"; msg += "\n" + url + "?action=timeline&q=NeilDBall"; msg += "\n\nTwitter Favorites of user @NeilDBall"; msg += "\n" + url + "?action=favorites&q=NeilDBalll"; msg += "\n\nTwitter List NeilDBall/"; msg += "\n" + url + "?action=list&q=NeilDBall/"; msg += "\n\nTwitter Search for NeilDBall"; msg += "\n" + url + "?action=search&q=NeilDBall"; msg += "\n\nYou should replace the value of 'q' parameter in the URLs as per requirement."; MailApp.sendEmail(Session.getActiveUser().getEmail(), "Twitter RSS Feeds", msg); } } function doGet(e) { var a = e.parameter.action; var q = e.parameter.q; var feed; switch (a) { case "timeline": feed = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" + q; break; case "search": feed = "https://api.twitter.com/1.1/search/tweets.json?q=" + encodeString (q); break; case "favorites": feed = "https://api.twitter.com/1.1/favorites/list.json?screen_name=" + q; break; case "list": var i = q.split("/"); feed = "https://api.twitter.com/1.1/lists/statuses.json?slug=" + i[1] + "&owner_screen_name=" + i[0]; break; default: feed = "https://api.twitter.com/1.1/statuses/user_timeline.json"; break; } var id = Utilities.base64Encode(feed); var cache = CacheService.getPublicCache(); var rss = cache.get(id); if ( ( ! rss ) || ( rss == "undefined" ) ) { rss = JSONtoRSS ( feed, a, q ); cache.put(id, rss, 3600); } return ContentService.createTextOutput(rss) .setMimeType(ContentService.MimeType.RSS); } function JSONtoRSS(json, type, key) { oAuth(); var options = { "method": "get", "oAuthServiceName":"twitter", "oAuthUseToken":"always" }; try { var result = UrlFetchApp.fetch(json, options); if (result.getResponseCode() === 200) { var tweets = Utilities.jsonParse(result.getContentText()); if (type == "search") tweets = tweets.statuses; if (tweets) { var len = tweets.length; var rss = ""; if (len) { rss = ''; rss += ' Twitter ' + type + ': ' + key + ''; rss += ' ' + htmlentities ( json ) + ''; rss += ' ' + new Date() + ''; for (var i=0; i"; rss += " " + tweets[i].user.name + " (@" + sender + ")"; rss += " " + tweets[i].created_at + ""; rss += " " + tweets[i].id_str + ""; rss += " https://twitter.com/" + sender + "/statuses/" + tweets[i].id_str + ""; rss += " " + tweet + ""; rss += ""; } rss += ""; return rss; } } } } catch (e) { Logger.log(e.toString()); } } function connectTwitter() { oAuth(); var search = "https://api.twitter.com/1.1/application/rate_limit_status.json"; var options = { "method": "get", "oAuthServiceName":"twitter", "oAuthUseToken":"always" }; try { var result = UrlFetchApp.fetch(search, options); } catch (e) { Logger.log(e.toString()); } } function encodeString (q) { var str = encodeURIComponent(q); str = str.replace(/!/g,'%21'); str = str.replace(/\*/g,'%2A'); str = str.replace(/\(/g,'%28'); str = str.replace(/\)/g,'%29'); str = str.replace(/'/g,'%27'); return str; } function htmlentities(str) { str = str.replace(/&/g, "&"); str = str.replace(/>/g, ">"); str = str.replace(/