Flux RSS Twitter - Google Apps Script * * Application Google pour

advertisement
/**
* Flux RSS Twitter - Google Apps Script
*
* Application Google pour créer des flux RSS twitter
* d'une timeline, de #, de mots clés ou même de liste
*
* @reauthor Franck Rocca <franck@franckrocca.com>
*
*/
function start() {
// Obtenez vos infos applis sur dev.twitter.com/apps
var CONSUMER_KEY = "mettez ici votre KEY";
var CONSUMER_SECRET = "mettez ici votre SECRET KEY";
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 += "Exemple de Flux RSS pour Twitter\n";
msg += "============================";
msg += "\n\nTwitter Timeline of user @kalipseo";
msg += "\n" + url + "?action=timeline&q=kalipseo";
msg += "\n\nTwitter Favorites of user @kalipseo";
msg += "\n" + url + "?action=favorites&q=kalipseo";
msg += "\n\nTwitter List kalipseo/kalipseo";
msg += "\n" + url + "?action=list&q=kalipseo/kalipseo";
msg += "\n\nTwitter Search for Sydney Australia";
msg += "\n" + url + "?action=search&q=sydney+australia";
msg += "\n\nRemplacez les valeurs du paramètre 'q' dans l'url par celle que vous
voulez.";
msg += "\n\nPour d'autres infos écrivez moi à franck@franckrocca.com";
MailApp.sendEmail(Session.getActiveUser().getEmail(), "Flux RSS Twitter", msg);
}
}
function doGet(e) {
var a = e.parameter.action;
var q = e.parameter.q;
var feed;
var permalink;
var description;
switch (a) {
case "timeline":
feed = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" + q;
permalink = "https://twitter.com/" + q;
description = "Twitter updates from " + q + ".";
break;
case "search":
feed = "https://api.twitter.com/1.1/search/tweets.json?q=" + encodeString (q);
permalink = "https://twitter.com/search?q=" + encodeString (q);
description = "Twitter updates from search for: " + q + ".";
break;
case "favorites":
feed = "https://api.twitter.com/1.1/favorites/list.json?screen_name=" + q;
permalink = "https://twitter.com/" + q + "/favorites/";
description = "Twitter favorites from " + 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];
permalink = "https://twitter.com/" + q;
description = "Twitter updates from " + q + ".";
break;
default:
feed = "https://api.twitter.com/1.1/statuses/user_timeline.json";
permalink = "https://twitter.com";
description = "Twitter timeline.";
break;
}
var id = Utilities.base64Encode(feed);
var cache = CacheService.getPublicCache();
var rss = cache.get(id);
if (!rss) {
rss = jsonToRss(feed, permalink, description, a, q);
cache.put(id, rss, 900);
}
return ContentService.createTextOutput(rss)
.setMimeType(ContentService.MimeType.RSS);
}
function jsonToRss(feed, permalink, description, type, key) {
oAuth();
var options =
{
"method": "get",
"oAuthServiceName":"twitter",
"oAuthUseToken":"always"
};
try {
var result = UrlFetchApp.fetch(feed, 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 += ' ' + permalink + '';
rss += '' + description + '';
for (var i = 0; i < len; i++) {
var sender = tweets[i].user.screen_name;
var tweet = htmlentities(tweets[i].text);
var date = new Date(tweets[i].created_at);
if (i === 0) {
rss += '' + date.toUTCString() + '';
}
rss += "" + sender + ": " + tweet + "";
rss += "" + date.toUTCString() + "";
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(/
str = str.replace(/"/g, """);
str = str.replace(/'/g, "'");
return str;
}
function oAuth() {
var oauthConfig = UrlFetchApp.addOAuthService("twitter");
oauthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token");
oauthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token");
oauthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authorize");
oauthConfig.setConsumerKey(ScriptProperties.getProperty("TWITTER_CONSUMER_KE
Y"));
oauthConfig.setConsumerSecret(ScriptProperties.getProperty("TWITTER_CONSUMER_S
ECRET"));
}
Download