Created
November 26, 2015 18:23
-
-
Save shakked/c06db70dc964c26b028a to your computer and use it in GitHub Desktop.
This file contains hidden or 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
var Instagram = require('instagram-node').instagram({port : process.env.PORT || 443, enforce_signed_requests : true}); | |
var Datapoint = require('./datapoint.js'); | |
var CronJob = require('cron').CronJob; | |
// Every call to `ig.use()` overrides the `client_id/client_secret` | |
// or `access_token` previously entered if they exist. | |
Instagram.use({ access_token: '215615213.156af3d.fccd9a4872aa42738ea71a649f365a85' }); | |
Instagram.use({ client_id: '156af3d753824c2aba64eb83ab10f53d', client_secret: '809b9a46b5e94817b1a65ae3069370a1' }); | |
var Parse = require('parse/node').Parse; | |
Parse.initialize("OfPZoW3GA3aKIgT61enhVaNydnEvICdH9GCReAKM", "fPByJ4b9CmVbLBC9jQZhjqlswhVTNchnStLwGZVe"); | |
var totalComplete = 0; | |
var allAccounts = []; | |
var failedAccounts = []; | |
function runJob() { | |
var Account = Parse.Object.extend("Account"); | |
var query = new Parse.Query(Account); | |
query.each( | |
function(account){ | |
allAccounts.push(account); | |
fetchPostSummaries(account); | |
}, | |
{ | |
success: function() { | |
// results is an array of Parse.Object. | |
console.log('All fetches have finished.'); | |
}, | |
error: function(error) { | |
// error is an instance of Parse.Error. | |
console.log('Error.'); | |
} | |
}); | |
} | |
function fetchPostSummaries(account) { | |
var allPostSummaries = []; | |
var handle = function(err, postSummaries, pagination, remaining, limit) { | |
if (err) { | |
failedAccounts.push(account.get("name")); | |
console.log("err: " + err); | |
return; | |
} | |
for (i = 0; i < postSummaries.length; i++) { | |
allPostSummaries.push(postSummaries[i]); | |
} | |
if (pagination.next) { | |
pagination.next(handle, { | |
"sign_request" : { | |
"path" : "/users/" + account.get("user_id") + "/media/recent", | |
"client_secret" : "809b9a46b5e94817b1a65ae3069370a1", | |
"params" : pagination.params | |
} | |
}); | |
} else { | |
var datapoint = new Datapoint(account, allPostSummaries); | |
fetchUser(account, datapoint); | |
} | |
} | |
var access_token = account.get("access_token"); | |
Instagram.use({ access_token: access_token}); | |
Instagram.user_media_recent(account.get("user_id"), { | |
"access_token" : account.get("access_token"), | |
sign_request : { | |
"client_secret" : "809b9a46b5e94817b1a65ae3069370a1", | |
"path" : "/users/" + account.get("user_id") + "/media/recent", | |
"params" : { | |
"access_token" : account.get("access_token") | |
} | |
} | |
}, handle); | |
} | |
function fetchUser(account, datapoint) { | |
var handle = function(err, user, remaining, limit) { | |
if (err) { | |
console.log(err); | |
failedAccounts.push(account.get("name")); | |
return; | |
} else { | |
datapoint.followerCount = user.counts.followed_by; | |
datapoint.followingCount = user.counts.follows; | |
postToParse(datapoint); | |
} | |
} | |
var access_token = account.get("access_token"); | |
Instagram.use({ access_token: access_token}); | |
Instagram.user('self', handle); | |
} | |
function postToParse(datapoint) { | |
var DatapointObject = Parse.Object.extend("Datapoint"); | |
var datapointObject = new DatapointObject(); | |
datapointObject.set("account", datapoint.account); | |
datapointObject.set("totalPosts", datapoint.postSummaries.length); | |
datapointObject.set("totalLikes", datapoint.totalLikes); | |
datapointObject.set("totalComments", datapoint.totalComments); | |
datapointObject.set("averageLikes", datapoint.averageLikes); | |
datapointObject.set("averageComments", datapoint.averageComments); | |
datapointObject.set("followerCount", datapoint.followerCount); | |
datapointObject.set("followingCount", datapoint.followingCount); | |
datapointObject.save(null, { | |
success: function(datapointObject) { | |
console.log("Total Succeeded: " + ++totalComplete + "/" + allAccounts.length + " Total Failed: " + failedAccounts.length + "/" + allAccounts.length + " " + datapoint.account.get("name")); | |
if (failedAccounts.length + totalComplete == allAccounts.length) { | |
console.log("Job Complete"); | |
} else { | |
console.log(" Total Failed: " + failedAccounts.length + "/" + allAccounts.length); | |
} | |
}, | |
error: function(datapointObject, error) { | |
// Execute any logic that should take place if the save fails. | |
// error is a Parse.Error with an error code and message. | |
console.log('Failed to create new object, with error code: ' + error.code); | |
} | |
}); | |
} | |
var job = new CronJob({ | |
cronTime: '00 */30 * * * *', | |
onTick: function() { | |
totalComplete = 0; | |
allAccounts = []; | |
failedAccounts = []; | |
runJob(); | |
}, | |
start: false, | |
timeZone: 'America/Los_Angeles' | |
}); | |
job.start(); | |
var handle = function(err, postSummaries, pagination, remaining, limit) { | |
if (err) { | |
console.log("err: " + err); | |
return; | |
} else { | |
console.log("The request succeeded."); | |
} | |
} | |
var access_token = "1939976127.156af3d.b7e3a1e08b794201b9812e1eb41136e9" | |
Instagram.use({ access_token: access_token}); | |
Instagram.user_media_recent("1939976127", { | |
sign_request : { | |
client_secret : '809b9a46b5e94817b1a65ae3069370a1' | |
} | |
}, handle); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment