Skip to content

Instantly share code, notes, and snippets.

@shakked
Created November 26, 2015 18:23
Show Gist options
  • Save shakked/c06db70dc964c26b028a to your computer and use it in GitHub Desktop.
Save shakked/c06db70dc964c26b028a to your computer and use it in GitHub Desktop.
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