instamancer
Version:
Scrape the Instagram API with Puppeteer
125 lines • 8.86 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Search = exports.SearchResult = exports.Hashtags = exports.Places = exports.Users = void 0;
const t = __importStar(require("io-ts"));
const io_ts_excess_1 = require("io-ts-excess");
const instagram_1 = require("./instagram");
exports.Users = t.type({
position: t.number,
user: io_ts_excess_1.excess(t.type({
full_name: t.string,
has_anonymous_profile_picture: t.boolean,
is_private: t.boolean,
is_verified: t.boolean,
latest_reel_media: t.number,
mutual_followers_count: t.number,
pk: t.string,
profile_pic_id: t.union([t.string, t.undefined]),
profile_pic_url: t.string,
username: t.string,
})),
});
exports.Places = t.type({
place: io_ts_excess_1.excess(t.type({
header_media: t.any,
location: io_ts_excess_1.excess(t.type({
address: t.string,
city: t.string,
external_source: t.string,
facebook_places_id: t.number,
lat: t.union([t.undefined, t.number]),
lng: t.union([t.undefined, t.number]),
name: t.string,
pk: t.string,
short_name: t.string,
})),
media_bundles: t.UnknownArray,
slug: t.string,
subtitle: t.string,
title: t.string,
})),
position: t.number,
});
exports.Hashtags = t.type({
hashtag: io_ts_excess_1.excess(t.type({
id: t.string,
media_count: t.number,
name: t.string,
profile_pic_url: t.string,
search_result_subtitle: t.string,
use_default_avatar: t.boolean,
})),
position: t.number,
});
exports.SearchResult = t.type({
clear_client_cache: t.boolean,
has_more: t.boolean,
hashtags: t.array(exports.Hashtags),
places: t.array(exports.Places),
rank_token: t.string,
status: t.string,
users: t.array(exports.Users),
});
class Search extends instagram_1.Instagram {
constructor(query, options = {}) {
super("https://instagram.com/explore/tags/instagram", "", "", "", options, exports.SearchResult);
this.catchURL = "https://www.instagram.com/web/";
this.inputElementQuery = "input[type='text']";
this.searchQuery = query;
}
async get() {
if (!this.started) {
await this.start();
}
try {
try {
await this.page.waitForSelector(this.inputElementQuery, {
timeout: 30000,
});
}
catch (_a) {
// Timeout
}
await this.page.click(this.inputElementQuery);
await this.page.keyboard.sendCharacter(this.searchQuery);
await this.page.waitForRequest((req) => this.matchURL(req.url()));
await this.processRequests();
await this.page.waitForResponse((res) => this.matchURL(res.url()));
await this.processResponses();
}
catch (e) {
await this.stop();
throw e;
}
await this.stop();
return this.searchResult;
}
matchURL(url) {
return url.startsWith(this.catchURL);
}
async processResponseData(data) {
await this.validatePost(data);
this.searchResult = data;
}
}
exports.Search = Search;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBMkI7QUFDM0IsK0NBQW9DO0FBR3BDLDJDQUFzQztBQUV6QixRQUFBLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNsQixJQUFJLEVBQUUscUJBQU0sQ0FDUixDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ0gsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ25CLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxPQUFPO1FBQ3hDLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTztRQUNyQixXQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU87UUFDdEIsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDM0Isc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDaEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ1osY0FBYyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxlQUFlLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDekIsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNO0tBQ3JCLENBQUMsQ0FDTDtDQUNKLENBQUMsQ0FBQztBQUVVLFFBQUEsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekIsS0FBSyxFQUFFLHFCQUFNLENBQ1QsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNILFlBQVksRUFBRSxDQUFDLENBQUMsR0FBRztRQUNuQixRQUFRLEVBQUUscUJBQU0sQ0FDWixDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNO1lBQ2pCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtZ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