instamancer
Version:
Scrape the Instagram API with Puppeteer
88 lines • 6.29 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.User = exports.Hashtag = exports.createApi = exports.Post = void 0;
const instagram_1 = require("./instagram");
const search_1 = require("./search");
const types_1 = require("./types");
/**
* An Instagram post API wrapper
*/
class Post extends instagram_1.Instagram {
constructor(ids, options = {}) {
// fullAPI option makes no sense for Post class
// But usage with fullAPI option brings an extra post, because of scrapeDefaultPosts
// So we force it to be disabled
options.fullAPI = false;
super("https://instagram.com/p/[id]", ids[0], "", "", options, types_1.SinglePost);
this.ids = ids;
}
/**
* Get the post metadata
*/
async getNext() {
for (const id of this.ids) {
this.id = id;
await this.postPage(id, 5);
await this.sleep(2);
}
this.finished = true;
}
}
exports.Post = Post;
const getPageValidator = (options) => options.fullAPI ? types_1.FullApiPost : types_1.Post;
function createApi(type, id, options) {
let ClassConstructor;
switch (type) {
case "search":
return new search_1.Search(id, options);
case "post":
return new Post(id, options);
case "hashtag":
ClassConstructor = Hashtag;
break;
case "user":
ClassConstructor = User;
break;
}
if (options.fullAPI) {
return new ClassConstructor(id, options);
}
return new ClassConstructor(id, options);
}
exports.createApi = createApi;
/**
* An Instagram hashtag API wrapper
*/
class Hashtag extends instagram_1.Instagram {
constructor(id, options = {}) {
super("https://instagram.com/explore/tags/[id]", id, "data.hashtag.edge_hashtag_to_media.page_info", "data.hashtag.edge_hashtag_to_media.edges", options, getPageValidator(options));
}
}
exports.Hashtag = Hashtag;
/**
* An Instagram user API wrapper
*/
class User extends instagram_1.Instagram {
constructor(id, options = {}) {
super("https://instagram.com/[id]", id, "data.user.edge_owner_to_timeline_media.page_info", "data.user.edge_owner_to_timeline_media.edges", options, getPageValidator(options));
this.defaultPageFunctions = [
/* istanbul ignore next */
() => {
let morePostsIntervalCounter = 0;
const morePostsInterval = setInterval(() => {
const searchDiv = Array.from(document.getElementsByTagName("div")).filter((d) => d.innerHTML.startsWith("Show More Posts from"))[0];
morePostsIntervalCounter++;
if (searchDiv !== undefined) {
searchDiv.parentElement.parentElement.click();
clearInterval(morePostsInterval);
}
else if (morePostsIntervalCounter > 10) {
clearInterval(morePostsInterval);
}
}, 1000);
},
];
}
}
exports.User = User;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLDJDQUFzQztBQUN0QyxxQ0FLa0I7QUFDbEIsbUNBT2lCO0FBd0VqQjs7R0FFRztBQUNILE1BQWEsSUFBSyxTQUFRLHFCQUFzQjtJQUk1QyxZQUFZLEdBQWEsRUFBRSxVQUFvQixFQUFFO1FBQzdDLCtDQUErQztRQUMvQyxvRkFBb0Y7UUFDcEYsZ0NBQWdDO1FBQ2hDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLEtBQUssQ0FDRCw4QkFBOEIsRUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNOLEVBQUUsRUFDRixFQUFFLEVBQ0YsT0FBTyxFQUNQLGtCQUFVLENBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxPQUFPO1FBQ25CLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0IsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztDQUNKO0FBL0JELG9CQStCQztBQUVELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUFpQixFQUFFLEVBQUUsQ0FDM0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQVcsQ0FBQyxDQUFDLENBQUMsWUFBYSxDQUFDO0FBc0JsRCxTQUFnQixTQUFTLENBQ3JCLElBQTRDLEVBQzVDLEVBQXFCLEVBQ3JCLE9BQWtCO0lBRWxCLElBQUksZ0JBQThDLENBQUM7SUFDbkQsUUFBUSxJQUFJLEVBQUU7UUFDVixLQUFLLFFBQVE7WUFDVCxPQUFPLElBQUksZUFBTSxDQUFDLEVBQVksRUFBRSxPQUF5QixDQUFDLENBQUM7UUFDL0QsS0FBSyxNQUFNO1lBQ1AsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MsS0FBSyxTQUFTO1lBQ1YsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1lBQzNCLE1BQU07UUFDVixLQUFLLE1BQU07WUFDUCxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDeEIsTUFBTTtLQUNiO0lBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBZSxFQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDcEU7SUFDRCxPQUFPLElBQUksZ0JBQWdCLENBQVEsRUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlELENBQUM7QUF0QkQsOEJBc0JDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLE9BQVcsU0FBUSxxQkFBWTtJQUN4QyxZQUFZLEVBQVUsRUFBRSxVQUFvQixFQUFFO1FBQzFDLEtBQUssQ0FDRCx5Q0FBeUMsRUFDekMsRUFBRSxFQUNGLDhDQUE4QyxFQUM5QywwQ0FBMEMsRUFDMUMsT0FBTyxFQUNQLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUM1QixDQUFDO0lBQ04sQ0FBQztDQUNKO0FBWEQsMEJBV0M7QUFFRDs7R0FFRztBQUNILE1BQWEsSUFBUSxTQUFRLHFCQUFZO0lBd0JyQyxZQUFZLEVBQVUsRUFBRSxVQUFvQixFQUFFO1FBQzFDLEtBQUssQ0FDRCw0QkFBNEIsRUFDNUIsRUFBRSxFQUNGLGtEQUFrRCxFQUNsRCw4Q0FBOEMsRUFDOUMsT0FBTyxFQUNQLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUM1QixDQUFDO1FBL0JOLHlCQUFvQixHQUFHO1lBQ25CLDBCQUEwQjtZQUMxQixHQUFHLEVBQUU7Z0JBQ0QsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtvQkFDdkMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDeEIsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUN2QyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FDakQsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFTCx3QkFBd0IsRUFBRSxDQUFDO29CQUUzQixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7d0JBQ3pCLFNBQVMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUM5QyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztxQkFDcEM7eUJBQU0sSUFBSSx3QkFBd0IsR0FBRyxFQUFFLEVBQUU7d0JBQ3RDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3FCQUNwQztnQkFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDYixDQUFDO1NBQ0osQ0FBQztJQVdGLENBQUM7Q0FDSjtBQWxDRCxvQkFrQ0MifQ==
;