Advertisement
Guest User

Untitled

a guest
Aug 4th, 2016
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2. // Подключаем модуль vk-io и создаем новый объект.
  3.  
  4. let vk = new(require('vk-io'));
  5.  
  6. /**
  7.  * Константа timeInterval задает интервал между каждым лайком в СЕКУНДАХ
  8.  */
  9.  
  10. const timeInterval = 7;
  11.  
  12. /**
  13.  * Константа countUsers показывает сколько людей из поиска нам требуется залайкать
  14.  */
  15.  
  16. const countUsers = 10;
  17.  
  18.  
  19. /**
  20.  * Константа countLikes показывает сколько записей и фото надо выбрать в профиле пользователя для лайка
  21.  */
  22.  
  23. const countLikes = 10;
  24.  
  25.  
  26. /**
  27.  * Если требуется произвести поиск пользователей из конкретной группы, необходимо указать ее имя, берется из ссылки на группу
  28.  * Пример, ссылка на группу https://new.vk.com/avtomobilnaj_stolica
  29.  * ее имя avtomobilnaj_stolica
  30.  * Аналогично с club3242352 и тп.
  31.  * Если требуется произвести глобальный поиск, нужно поле оставить пустым const groupName = ''; Кавычки не удалять!!!
  32.  */
  33.  
  34. const groupName = 'popfarm'; //'avtomobilnaj_stolica';
  35.  
  36.  
  37. /**
  38.  * Конфиг описывает критерии поиска пользователей, просмотреть все критерии поиска можно в документации контакта по ссылке https://new.vk.com/dev/users.search
  39.  * Синтаксис следующий, настройи это единый объект , заключенный в фигурные скобки {}
  40.  * Каждый параметр поиска состоит из ключа поиска и его значения, пример hometown: 'Тольятти'.\
  41.  * Синтаксис для текста (значение указывается в одинарных ковычках) - { ключ: 'Текстовое значение' } ,
  42.  * Синтаксис для чисел (значение указывается без ковычек) - { ключ: ЧИСЛО } ,
  43.  * Все параметры поиска разделяются между собой запятыми, пример { ключ: 'Текстовое значение' , ключ: ЧИСЛО }
  44.  * Перенос текста на новую строку не имеет функциональьного значения и служит лишь для более удобного визуального восприятия
  45.  *
  46.  */
  47.  
  48. const config = {
  49.     sort: 0,
  50.     count: countUsers,
  51.     fields: 'screen_name',
  52.     ///city: '',
  53.     hometown: 'Тольятти',
  54.     age_from: 14,
  55.     age_to: 18,
  56.     //online: 1,
  57.     group_id: ''
  58. };
  59.  
  60.  
  61. /**
  62.  * В разделе ниже указывается:
  63.  * app - номер standlone приложения VK (см. инструкцию к скрипту)
  64.  * email - поле для ввода логина, в любой удобной форме, доссутпной на сайте вк: логин, емайл, номер релефона
  65.  * pass - пароль для входа в контакт
  66.  * */
  67.  
  68. vk.setting({
  69.     app: 2419779,
  70.     email: '+79537754260',
  71.     pass: '807978'
  72. });
  73.  
  74.  
  75. /**
  76.  *
  77.  * Далее изменять ничего не рекомендуется, возможно, что код перестанет работать!!!!
  78.  *
  79.  */
  80.  
  81. const likeconf = {
  82.     post: 'post',
  83.     photo: 'photo'
  84. };
  85.  
  86. /**
  87.  * Массив для очереди лайков через интервалы времени, каждый элемент массива - объект {userId, targetId, targetType }
  88.  */
  89.  
  90. let queue = [];
  91.  
  92.  
  93. /**
  94.  * Получение кода страны
  95.  * @returns {promise}
  96.  */
  97.  
  98. function getCountry() {
  99.     return vk.api.database.getCountries({
  100.  
  101.         need_all: 0,
  102.         core: 'RU'
  103.     });
  104. }
  105.  
  106.  
  107. /**
  108.  * Получение кода региона
  109.  * @param codeCountry - код страны, в базе данных ВК
  110.  * @param nameRegion - текстовое представление региона - например: Самарская , Татарстан и т.п.
  111.  * @returns {promise}
  112.  */
  113.  
  114. function getRegion(codeCountry, nameRegion) {
  115.     return vk.api.database.getRegions({
  116.         country_id: codeCountry,
  117.         q: nameRegion,
  118.         count: 1
  119.     });
  120. }
  121.  
  122.  
  123. /**
  124.  * Получение кода города
  125.  * @param codeCountry - код страны, в базе данных ВК
  126.  * @param nameCity - текстовое представление региона - например: Тольятти, Новосибирск
  127.  * @returns {promise}
  128.  */
  129.  
  130. function getCityes(codeCountry, nameCity) {
  131.     return vk.api.database.getCities({
  132.         country_id: codeCountry,
  133.         q: nameCity,
  134.         count: 1
  135.     });
  136. }
  137.  
  138.  
  139. /**
  140.  * Поиск пользователей, для настроек используются константы config и groupName
  141.  * @param config - критерии оттбора пользователей
  142.  * @returns {promise}
  143.  */
  144.  
  145. function search(config) {
  146.     return vk.api.users.search(config);
  147. }
  148.  
  149. /**
  150.  * Возвращает заданное число записей со стены пользователя
  151.  * @param userId - id пользователя
  152.  * @param count - число возвращаемых записей
  153.  * @returns {promise}
  154.  */
  155.  
  156.  
  157. function getUserWall(userId, count) {
  158.     return vk.api.wall.get({
  159.         owner_id: userId,
  160.         count: count
  161.     })
  162. }
  163.  
  164.  
  165. /**
  166.  * Возвращает id группы
  167.  * @param name - имя группы
  168.  * @returns {promise}
  169.  */
  170.  
  171. function getGroup(name) {
  172.     console.log(`Выполняем запрос на получение ид группы ${name}`);
  173.     return vk.api.groups.getById({
  174.         group_ids: name
  175.     });
  176. }
  177.  
  178.  
  179. /**
  180.  * Возвращает список фотографий профиля пользователя (первыми выдаются последние добавленные)
  181.  * @param userId - id пользователя
  182.  * @param count - число возвращаемых фотографий
  183.  * @returns {promise}
  184.  */
  185.  
  186. function getUserImages(userId, count) {
  187.     return vk.api.photos.get({
  188.         owner_id: userId,
  189.         album_id: 'profile',
  190.         rev: 1,
  191.         count: count
  192.     });
  193. }
  194.  
  195.  
  196. /**
  197.  * Лайкает цель
  198.  * @param userId - id пользователя
  199.  * @param id - id Цели (photo или post)
  200.  * @param type - тип  цели (photo или post), берется из констранты likeconf
  201.  * @returns {promise}
  202.  */
  203.  
  204. function like(userId, id, type) {
  205.     return vk.api.likes.add({
  206.         type: type,
  207.         owner_id: userId,
  208.         item_id: id
  209.     });
  210. }
  211.  
  212.  
  213. /**
  214.  * Вермишель для исполнения ряда фунций, на входе передается имя группы
  215.  * Выполнение - Получить id группы -> добавить в конфигурацию поиска команду поиска в группе - выполнить вермишель поиска
  216.  * @param name
  217.  */
  218.  
  219. function runSearchInGroup(name) {
  220.     getGroup(name)
  221.         .then(groups => {
  222.             groups.forEach(group => {
  223.                 config.group_id = group.id;
  224.                 runSearch();
  225.             })
  226.         })
  227.         .catch(error => {
  228.             console.log(error);
  229.         });
  230. }
  231.  
  232.  
  233. /**
  234.  * Вермишель для исполнения всего сценария лайков
  235.  * Выполнение поиск пользователей -> для каждого пользователя поиск фото -> лайк фото
  236.  *                                -> для каждого пользователя поиск постов -> лайк постов
  237.  */
  238.  
  239. function getData(userId) {
  240.     return Promise.all([
  241.         getUserImages(userId, countLikes),
  242.         getUserWall(userId, countLikes)
  243.     ]);
  244. }
  245.  
  246. function runSearch() {
  247.     search(config)
  248.         .then(response => {
  249.             response.items.forEach(user => {
  250.                 console.log(`Пользователь ${user.first_name} ${user.last_name} https://vk.com/${user.screen_name} id: ${user.id}`);
  251.                 getData(user.id)
  252.                     .then(responsePromiseAll => {
  253.                         //console.log(JSON.stringify(responsePromiseAll, true, 4));
  254.                         responsePromiseAll.forEach(pesponsePromise => {
  255.                             pesponsePromise.items.forEach(response => {
  256.                                 if (response.post_type == 'post') {
  257.                                     console.log('post: ' + JSON.stringify({
  258.                                         userId: user.id,
  259.                                         ownerId: response.owner_id,
  260.                                         targetId: response.id,
  261.                                         targetType: likeconf.post
  262.                                     }));
  263.                                     queue.push({
  264.                                         userId: user.id,
  265.                                         targetId: response.id,
  266.                                         targetType: likeconf.post
  267.                                     });
  268.                                 } else {
  269.                                     console.log('photo: ' + JSON.stringify({
  270.                                         userId: user.id,
  271.                                         ownerId: response.ownerId,
  272.                                         targetId: response.id,
  273.                                         targetType: likeconf.photo
  274.                                     }));
  275.                                     queue.push({
  276.                                         userId: user.id,
  277.                                         targetId: response.id,
  278.                                         targetType: likeconf.photo
  279.                                     });
  280.                                 }
  281.                             });
  282.                         });
  283.                         console.log(queue.length);
  284.                     })
  285.                     .catch(error => {
  286.                         console.log(error);
  287.                     });
  288.             });
  289.         })
  290.         .catch(error => {
  291.             console.log(error);
  292.         });
  293. }
  294. //let blockLoop = false;
  295.  
  296.  
  297.  
  298. function loop() {
  299.     if (queue.length) {
  300.         //blockLoop = true;
  301.         console.log(`????????? ${queue.length}`);
  302.         let param = queue.pop();
  303.         console.log(`Лайкаем это -> ${param.userId} - ${param.targetId} - ${param.targetType}`);
  304.         return like(param.userId, param.targetId, param.targetType)
  305.             .then(() => {
  306.                 return param;
  307.             })
  308.             .catch((error) => {
  309.                 console.log('мы вылетели');
  310.                 console.log(error);
  311.             });
  312.     }
  313.     /*
  314.     else if(blockLoop){
  315.         console.log(`**** ${blockLoop} ${queue.length}`);
  316.         clearInterval(loopKey);
  317.  
  318.     }
  319.     */
  320. }
  321.  
  322.  
  323. /**
  324.  * Точка входа в контакт, авторизуемся , получаем токен, разглядываем его. Модуль vk-io сам его забирает в настройки
  325.  * Пссле авторизации идет проверка команды поиска в группе, далее поиск по группе или поиск глобально, ну собственно вся вермишель с лайками и тп исполнится здесь же.
  326.  */
  327.  
  328. vk.auth()
  329.     .then((token) => {
  330.         console.log(`Получен токен для работы: ${token}`);
  331.         if (groupName) {
  332.             console.log(`Поиск пользователей в группе ${groupName}`);
  333.             runSearchInGroup(groupName);
  334.         } else {
  335.             console.log(`Глобальный поиск пользователей`);
  336.             runSearch();
  337.         }
  338.  
  339.         let idTimeout;
  340.  
  341.         let isQueue = () => {
  342.             if (queue.length !== 0) {
  343.                 loop()
  344.                 .then((param) => {
  345.                     console.log(`Лайкнули цель [${param.targetType}] со стены пользователя ${param.userId} id: ${param.targetId}`);
  346.                 })
  347.                 .catch((error) => {
  348.                     console.error(error);
  349.                 })
  350.                 .done(() => {
  351.                     idTimeout = setTimeout(isQueue,timeInterval * 1000);
  352.                 })
  353.             } else {
  354.                 clearTimeout(idTimeout);
  355.  
  356.                 console.log('Задача выполнена!');
  357.             }
  358.         };
  359.  
  360.         isQueue();
  361.     })
  362.     .catch((error) => {
  363.         console.log(error);
  364.     });
  365.  
  366. /*
  367.  getUserImages(user.id,countLikes)
  368.  .then(response=> {
  369.  response.items.forEach(photo=> {
  370.  queue.push({
  371.  userId: user.id,
  372.  targetId: photo.id,
  373.  targetType: likeconf.photo
  374.  });
  375.  
  376.  like(user.id,photo.id,likeconf.photo)
  377.  .then(done=> {
  378.  console.log(`Лайкнули фотографию пользователя ${user.id} id: ${post.id}`)
  379.  .catch((error)=> {
  380.  console.log(error);
  381.  });
  382.  
  383.  });
  384.  return true;
  385.  })
  386.  .catch((error)=> {
  387.  console.log(error);
  388.  });
  389.  
  390.  getUserWall(user.id,countLikes)
  391.  .then(response=> {
  392.  response.items.forEach(post=> {
  393.  queue.push({
  394.  userId: user.id,
  395.  targetId: post.id,
  396.  targetType: likeconf.photo
  397.  });
  398.  
  399.  like(user.id,post.id,likeconf.post)
  400.  .then(done=> {
  401.  console.log(`Лайкнули запись со стены пользователя ${user.id} id: ${post.id}`);
  402.  })
  403.  .catch((error)=> {
  404.  console.log(error);
  405.  });
  406.  
  407.  });
  408.  return true;
  409.  
  410.  })
  411.  .catch((error)=> {
  412.  console.log(error);
  413.  });
  414.  return true;
  415.  
  416.  
  417.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement