A draft. Need to abstract out hardcoded org references in issues pulling and add some more hotness. Might be useful in the meantime.
Created
June 27, 2013 20:15
-
-
Save tbeseda/5879983 to your computer and use it in GitHub Desktop.
Grab some data from Github with Google Apps Scripts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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