UNPKG

instamancer

Version:

Scrape the Instagram API with Puppeteer

88 lines 6.29 kB
"use strict"; 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==