Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.11.2018, 20:49
Новичок на форуме
Отправить личное сообщение для mystica Посмотреть профиль Найти все сообщения от mystica
 
Регистрация: 18.11.2018
Сообщений: 8

Странно поведение массивов promises js
Странно ведет себя код: в блоке try если закомментировать один из массивов arr1 и оставить другой, все хорошо работает, вот сам код:

'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.log(proxy)
console.log(username)

Client.Request.setProxy(proxy);


acc.searchForUser(session, 'shakila_popi') //поиск 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 media = _.flatten(results.fd);
        var urls = _.map(media, function(medium) {
            try {
                var arr1 = medium.params.images[0].url;
                //var arr2 = medium.params.carouselMedia[0].images[0].url;
                return arr1
        } catch (err)
            {
                console.log("lala")
            }
            //console.log(medium.params.carouselMedia.images[0].url)
        });

        return {id : results.id, links : urls}
    })
    .then(function(mediaAndId) {
    	acc = acc.getById(session, mediaAndId.id)
    		.then(function(account) {
    			//console.log(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.log(avatar);
    			//console.log(fullName);
    			console.log(bio);
    			console.log(media0);
    			console.log(media1);
    			console.log(media2);
    			console.log(media3);
    			console.log(media4);
    		})
    })




Вот вывод в консоль:

MacBook-Pro-Sparrow:instagram-private-api Sparrow$ node index.js
[url]http://0DHVbZ:VkScLB@81.177.22.235:31061[/url]
superfoxyasians
(node:58742) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.

[url]https://instagram.fhel3-1.fna.fbcdn.net/vp/551ca4099cea5337ce8317fdf888476b/5C7DB2A0/t51.2885-15/e35/46253156_552428008532000_5574512654800613278_n.jpg?ig_cache_key=MTkxMjIzMDIyNjQzNjU4NjU0Mg%3D%3D.2[/url]
undefined
[url]https://instagram.fhel3-1.fna.fbcdn.net/vp/10925f7f377b775b4a9fef5e2c7dc562/5C8CDEF0/t51.2885-15/e35/43985135_344052449735185_8327097767917702849_n.jpg?ig_cache_key=MTkwODU3MjU4MzQ0ODg5MTM3MA%3D%3D.2[/url]
undefined
[url]https://instagram.fhel3-1.fna.fbcdn.net/vp/82606b2a0741e97a416ca517a9494246/5BF43704/t51.2885-15/e35/43779615_1078737292285840_8766820240873976874_n.jpg[/url]


Вот код если закомментировать arr1 и оставить arr2 (тут блоки catch срабатывают):

'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.log(proxy)
console.log(username)

Client.Request.setProxy(proxy);


acc.searchForUser(session, 'shakila_popi') //поиск 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 media = _.flatten(results.fd);
        var urls = _.map(media, function(medium) {
            try {
                //var arr1 = medium.params.images[0].url;
                var arr2 = medium.params.carouselMedia[0].images[0].url;
                return arr2 
        } catch (err)
            {
                console.log("lala")
            }
            //console.log(medium.params.carouselMedia.images[0].url)
        });

        return {id : results.id, links : urls}
    })
    .then(function(mediaAndId) {
    	acc = acc.getById(session, mediaAndId.id)
    		.then(function(account) {
    			//console.log(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.log(avatar);
    			//console.log(fullName);
    			console.log(bio);
    			console.log(media0);
    			console.log(media1);
    			console.log(media2);
    			console.log(media3);
    			console.log(media4);
    		})
    })




и вывод соответственно:


MacBook-Pro-Sparrow:instagram-private-api Sparrow$ node index.js
[url]http://6bZS68:5jWBwC@81.177.22.235:31000[/url]
eldlagorra
(node:58745) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' makes TLS connections and HTTPS requests insecure by disabling certificate verification.
lala
lala
lala
lala

undefined
[url]https://instagram.fhel3-1.fna.fbcdn.net/vp/4a919f055c8cfabcfdd25ef2cbe4e990/5C800DE9/t51.2885-15/e35/44284874_657896204605028_2619340850189862370_n.jpg?ig_cache_key=MTkxMTkwMDgyMTk1Njk3NzYwOQ%3D%3D.2[/url]
undefined
[url]https://instagram.fhel3-1.fna.fbcdn.net/vp/4d25561f82fb60b311813ed9b84c88db/5C7EFBCB/t51.2885-15/e35/44374724_186168655643109_6032140732754326020_n.jpg?ig_cache_key=MTkwNjM5NDUyNzQ2MDQxNzUyMg%3D%3D.2[/url]
undefined


Вообще, так как не получается нормально вытащить все типы постов из ленты(возвращается json), поэтому я ввел 2 массива - первый для обычных постов и видео, второй для карусели. По отдельности они хорошо работают, хотел их сливать в arr3 и уже работать с ним. Однако не получается по вышеописанной причине. Обьясните пожалуйста и ткните в чем может быть проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 19.11.2018, 00:22
Новичок на форуме
Отправить личное сообщение для mystica Посмотреть профиль Найти все сообщения от mystica
 
Регистрация: 18.11.2018
Сообщений: 8

Решил проблему добавлением еще одного промиса:

'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.log(proxy)
console.log(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.log("lala")
            }

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

        //console.log(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.log(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.log(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.log(avatar);
    			console.log(fullName);
    			console.log(bio);
    			console.log(media0);
    			console.log(media1);
    			console.log(media2);
    			console.log(media3);
    			console.log(media4);
    		})
    })
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционная Система на JS Icat Общие вопросы Javascript 3 17.04.2018 22:54
Вывыод контента через JS inet_boy Элементы интерфейса 0 18.11.2013 03:00
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05
Странно работает регулярка в JS _axl Общие вопросы Javascript 12 11.03.2011 23:39