Многопоточный парсер instagram node.js

Работаем над парсером инстаграмм node.js. На данный момент у меня есть 1 поток с рабочим кодом прокси, но я не уверен, как сделать многопоточную архитектуру:

'use strict';
var InstagramPrivateAPI = {};

InstagramPrivateAPI = {};
InstagramPrivateAPI.V1 = require(__dirname + '/client/v1');
InstagramPrivateAPI.Helpers = require(__dirname + '/helpers');
var acc = require(__dirname + "/client/v1/account");
var med = require(__dirname + "/client/v1/media")

var Promise = require('../bluebird');
var _ = require('../lodash/');

module.exports = InstagramPrivateAPI;

var Client = require('instagram-private-api').V1;
var device = new Client.Device('maksgmn');
var storage = new Client.CookieFileStorage(__dirname + '/cookies/maksgmn.json');
var session = new Client.Session(device, storage);

function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}

var fs = require('fs');
var proxyArray = fs.readFileSync('proxy.txt').toString().split("\n");
var usernamesArray = fs.readFileSync('usernames.txt').toString().split("\n");

var proxy = "http://" + proxyArray[getRandomInt(0,proxyArray.length)]
var username = usernamesArray[getRandomInt(0,usernamesArray.length)]

console.info(proxy)
console.info(username)

Client.Request.setProxy(proxy);


acc.searchForUser(session, username) //поиск id пользователя
    .then(function(profile) {
        return profile.id
    })
    .then(function(someId) {  //получение промиса lenta
        var feed = new Client.Feed.UserMedia(session, someId);
        var lenta = Promise.mapSeries(_.range(0, 1), function() {
            return feed.get();
        }).then(function(lenta) {
            return {id: someId, fd : lenta}
        })
        return lenta
    })
    .then(function(results) {  //обработка промиса и получение ленты пользователя
        // result should be Media[][]
        var media1 = _.flatten(results.fd);
        var urls1 = _.map(media1, function(medium) {
                //var arr1 = medium.params.images[0].url;
            var arr1 = []

            try {
                arr1 = medium.params.images[0].url
            } catch (err) {
                //console.info("lala")
            }

            return arr1;
            //console.info(medium.params.carouselMedia.images[0].url)
        })

        //console.info(urls1)

        return {id : results.id, linksNoCarousel : urls1, med : media1}
    })
    .then(function(res){

        var urls2 = _.map(res.med, function(medium) {

            var arr2 = []

            try {
                arr2 = medium.params.images[0][0].url
                //console.info(arr2)
            } catch (err) {

            }
            return arr2        
        })

        for (var i = 0; i < 5; i++) {
            if (typeof res.linksNoCarousel[i] == "undefined")
                res.linksNoCarousel[i] = urls2[i];
        }

        var arr3 = []

        for (var i = 0; i < 5; i++) {
            arr3[i] = res.linksNoCarousel[i]
        }

        return {id : res.id, links : arr3}

    })
    .then(function(mediaAndId) {
        acc = acc.getById(session, mediaAndId.id)
            .then(function(account) {
                //console.info(account.params)
                let avatar = account.params.profilePicUrl;
                let fullName = account.params.fullName;
                let bio = account.params.biography;
                let media0 = mediaAndId.links[0];
                let media1 = mediaAndId.links[1];
                let media2 = mediaAndId.links[2];
                let media3 = mediaAndId.links[3];
                let media4 = mediaAndId.links[4];

                console.info(avatar);
                console.info(fullName);
                console.info(bio);
                console.info(media0);
                console.info(media1);
                console.info(media2);
                console.info(media3);
                console.info(media4);
            })
    })

Я бы хотел, чтобы он работал как многопоточность, чтобы с прокси было намного быстрее. Поскольку я работаю с node.js 2-й день, задаю вопрос: как это сделать?

Что именно слишком медленно? Node.js обычно не является многопоточным. Вы уже делаете большинство вещей асинхронно.

Bergi 18.11.2018 23:01

Я не измерял его раньше, но вы знаете ... Мне нужно что-то вроде потоков или экземпляров, чтобы он каждый раз брал новый прокси и работал, может быть, с новым сеансом или чем-то в этом роде

user239247 18.11.2018 23:31

Если это всего лишь одна машина и вы хотите использовать преимущества более чем одного ядра, node.js имеет механизм кластера: nodejs.org/api/cluster.html

Jim B. 19.11.2018 02:10

@ user239247 Что именно вы подразумеваете под «каждый раз»? Вы хотите делать запросы ко всем прокси, а не к одному случайному?

Bergi 19.11.2018 06:31

возможно, на самом деле до одного случайного, но я не уверен, как это работает в данный момент с циклами

user239247 19.11.2018 10:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
105
0

Другие вопросы по теме