Skip to content

Instantly share code, notes, and snippets.

@tbeseda
Created June 27, 2013 20:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tbeseda/5879983 to your computer and use it in GitHub Desktop.
Save tbeseda/5879983 to your computer and use it in GitHub Desktop.
Grab some data from Github with Google Apps Scripts
Github = function(token) {
this.token = token;
this.api_url = 'https://api.github.com/'
}
Github.prototype = {
parseISO8601: function(str) {
// http://anentropic.wordpress.com/2009/06/25/javascript-iso8601-parser-and-pretty-dates/
// we assume str is a UTC date ending in 'Z'
var parts = str.split('T'),
dateParts = parts[0].split('-'),
timeParts = parts[1].split('Z'),
timeSubParts = timeParts[0].split(':'),
timeSecParts = timeSubParts[2].split('.'),
timeHours = Number(timeSubParts[0]),
_date = new Date;
_date.setUTCFullYear(Number(dateParts[0]));
_date.setUTCMonth(Number(dateParts[1])-1);
_date.setUTCDate(Number(dateParts[2]));
_date.setUTCHours(Number(timeHours));
_date.setUTCMinutes(Number(timeSubParts[1]));
_date.setUTCSeconds(Number(timeSecParts[0]));
if (timeSecParts[1]) _date.setUTCMilliseconds(Number(timeSecParts[1]));
// by using setUTC methods the date has already been converted to local time(?)
return _date;
},
fetch_json: function(endpoint) {
var full_request_url = this.api_url + endpoint + (endpoint.indexOf('?') > 0 ? '&' : '?') + 'access_token=' + this.token;
var resp = UrlFetchApp.fetch(full_request_url);
var jsonStr = resp.getContentText();
var parsed_response = Utilities.jsonParse(jsonStr);
return parsed_response;
},
open_issues_assigned_to_user: function(user) {
var issues = this.fetch_json('orgs/an_org/issues?assignee=' + user);
return issues;
},
issues_closed_since: function(user, since) {
var issues = this.fetch_json('orgs/an_org/issues?state=closed&since=' + since.toISOString() + '&assignee=' + user);
return issues;
},
user_activity: function(user) {
var events = this.fetch_json('users/' + user + '/events');
return events;
},
user_pushes: function(user) {
var events = this.user_activity(user);
var pushes = [];
for (var i = 0; i < events.length; i++) {
var event = events[i];
if (event.type == 'PushEvent') {
event.created_at = this.parseISO8601(event.created_at)
pushes.push(event);
}
}
return pushes;
},
user_pushes_since: function(user, since) {
var pushes = this.user_pushes(user);
var new_pushes = [];
var now = new Date();
for (var i = 0; i < pushes.length; i++) {
var push = pushes[i];
if (push.created_at > since) { new_pushes.push(push); }
}
return new_pushes;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment