Задать вопрос

Бот для Instagram на Node.js?

Добрый день!
Сразу хочу сказать, что в программировании я не силен.
Но вопрос вот в чем.
Наткнулся вот на такую библиотеку для Node.js, которая позволяет работь с API instagram.
И захотелось создать бота, который бы раз в час выбирал фото по случайному тегу и лайкал их.
Получилось вот это
var Instagram = require('instagram-node-lib');
var arrayToken = ['token_1','token_2','token_3','token_n'];
var arrayTag = ['tag_1','tag_2','tag_3','tag_n'];

var photoId = [];

function instaBot () {
  for (var i = 0; i < arrayToken.length; i++) { 
    photoId = [];
    Instagram.set('access_token', arrayToken[i])
    for (var j = 0; j < 2; j++) { 
      var randomTag = arrayTag[Math.floor(Math.random() * arrayTag.length)];
      Instagram.tags.recent({
        name: randomTag,
        complete: function(data){
          for (var k=0; k<data.length; k++){
            var bit = data[k]
            photoId.push(bit['id'])
      }   
      for (var s=0; s<30; s++){
       //doSetTimeout(s)
        Instagram.media.like({ media_id: photoId[s] })
      }
    }
   })
  }
 }
}

Функция работает, но не совсем правильно. Второй цикл, где выбирается случайный тег и по нему выполняется поиск фото, выполняется сразу два раза, а только потом происходит лайк фото.
Хотелось бы спросить, как сделать так, чтобы данная функция выполнялась каждый час и лайк фото происходил с небольшой задержкой.
Знаю, что есть такие функции как setTimeout и setInterval, но толком ничего не получилось.
Вышло только вот это.
function doSetTimeout(s) {
  setTimeout(function() {
      Instagram.media.like({ media_id: photoId[s] })
  }, s * 5000);
}

И потом вызываешь функцию doSetTimeout(s).
Надеюсь я более менее понятно объяснил суть вопроса и буду признателен любой помощи и советам в решении данного вопроса.
  • Вопрос задан
  • 6511 просмотров
Подписаться 5 Оценить 4 комментария
Решения вопроса 1
@firlix Автор вопроса
Средствами Node.js не получилось решить свою проблему, но зато получилось это сделать на языке python. Для работы необходимы только сами ключи (с возможностью лайкать фото "scope=likes") и подключить библиотеку python-instagram. С 5 ключами он проработал у меня 2-е суток (лайк фото через каждые 24 секунды) после чего мне отключили возможность лайкать фото более чем на сутки.
Вот собственно сам код. Я не программист, поэтому получилось как-то так. Может кому-нибудь пригодится.
import random
import time
from instagram.client import InstagramAPI
from instagram.bind import InstagramAPIError

arrayToken = ['YOUR_TOKEN_1',
              'YOUR_TOKEN_2',
              'YOUR_TOKEN_3',
              'YOUR_TOKEN_4',
              'YOUR_TOKEN_5']

arrayTag = ['spb','vcocam','vcorussia','love','TFLers', 'tweegram',
            'photooftheday', '20likes', 'amazing', 'smile', 'follow4follow',
            'like4like', 'look', 'instalike', 'igers', 'picoftheday', 'food',
            'instadaily', 'instafollow', 'followme', 'girl', 'iphoneonly',
            'instagood', 'bestoftheday', 'instacool', 'instago', 'all_shots',
            'follow', 'webstagram', 'colorful', 'style', 'swag']

timeDelay = 3600 / (len(arrayToken) * 30)

while True:
    for i in arrayToken:
        random_tag = random.choice(arrayTag)
        access_token = i
        client_secret =""
        api = InstagramAPI(access_token=access_token,client_secret=client_secret)
        recent_media, next_ = api.tag_recent_media(count=30, tag_name=random_tag)
        photos = []
        print random_tag
        for media in recent_media:
            try:
                time.sleep(timeDelay)
                print api.like_media(media.id)
            except InstagramAPIError as e:
                if (e.status_code == 400):
                    print "You can not like this media"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Привет. Я думаю, что ты можешь использовать асинхронные функции, чтобы решить проблему с выполнением циклов, например, вот эти.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы