Заказчик в моем лице определил следующие требования:
1. Симуляция работы в Инстаграме как обычный пользователь, лайкание в одном треде (чтобы Instagram не забанил моего бота).
2. Возможность авто-лайкания произвольного количества аккаунтов с произвольной глубиной лайков.
3. Запуск через шедулер, работа в бэкграунде.
Выбор пал на nodejs. Почему nodejs? Потому на Perl'е (который я использую время от времени уже несколько лет) делать не хотелось, а nodejs привлек внятным менеджеров пакетов, нативной поддержкой JSON и вообще Javascript в браузере роднее чем какой-нибудь Python.
Конечно, Instagram имеет свое API и теоретически его можно было использовать, но программы, использующие API Instagram'a требуют специального аппрувола, а мне хотелось чтобы скрипт могли использовать массово.
Полный текст скрипта доступен на github.com/get-a-clue/nodejs
Для симуляции браузера конечно используется selenium, в оригинальной версии скрипта запускается браузер Chrome для отладки, если вы хотите использовать скрипт только в консоли, нужно заменить chrome на phantomjs в строке 24. Phantomjs — это бразузер на Webkit со всеми плюшками типа CSS, JS и т.д.
Установка и запуск описана в комментарии к скрипту. Кроме того, вам потребуется самостоятельно установить сам nodejs и настроить периодический запуск скрипта по расписанию. Конечно, скрипт еще далек от совершенства, нужно сделать отчетность и обработку ошибок, но свою функцию он успешно выполняет, экономит мне время да и жена теперь довольна. :)
Комментарии (32)
rhamdeew
27.01.2016 01:10+2Когда открывал пост думал будет про использование API Instagram. А там как известно сейчас довольно серьезные ограничения с недавних пор и надо аппрува ждать.
Сильно удивился когда неделю назад написал мне чел который пытался развернуть мой открытый проект (https://github.com/rhamdeew/InStat) для инста, а в итоге столкнулся с тем что API теперь даже фоточки не отдает без аппрува.kAIST
27.01.2016 14:53а в итоге столкнулся с тем что API теперь даже фоточки не отдает без аппрува.
Как это не отдает? Прям сейчас сижу отлаживаю скрипт, который по тегу отлавливает публикации с данными пользователей и отправляет на печать. Все работает прекрасно со стандартным API без апрува.BoDVa
27.01.2016 14:58Для новых приложений не отдает. Только по пользователям внесенным в инвайт лист приложения. Попробуйте зарегестрировать новое приложение и провернуть тоже с его данными доступа.
rhamdeew
27.01.2016 15:36Ну да, чуть ниже уже отписали. Возвращает грустное «The access_token provided is invalid»
kAIST
27.01.2016 15:42Что то совсем грустно. С такими правилами апрува, получить на мелкий проект его вряд ли будет возможно (мне всего то нужно печатать фотографии по хэштегу).
В принципе если для одного себя получать access_token, то песочница должна подойти. Правда не могу разобрать с ограничениями.BoDVa
27.01.2016 22:14Там урезано количество запросов, но опять же если только для себя, то текущих должно быть достаточно. Ну и самое дурацкое ограничение, по пользователям, ты можешь получить только 20 последних фото, и только тех пользователей которым прислал инвайт в приложение и они подтвердили
kAIST
27.01.2016 22:18Для моих целей немного песочина не подойдет. Мне нужно собирать фотографии по хэштегу. В песочнице я могу только со своего аккаунта их собирать, либо тех кто по инвайту.
Пока для себя сделал парсилку www.instagram.com/explore/tags/TAG_NAME оно без авторизации работает, посмотрим что будет дальше )rhamdeew
28.01.2016 23:39А мне тут приложение не зааппрувили =) До июля точно будет работать, потом фиг знает.
Тоже фотки по хэштегу получаю — instaulsk.ru
Отправил на повторную модерацию, может одумаются. Саппорта в инста как такового вообще нет. Такое ощущение что все на автомате работает пока не поломалось. Даже в android-приложении полно багов которые никто фиксить не может и позорное отсутствие приложения для Ipad Mini Retina
hmpd
27.01.2016 01:42+2Отличная идея, сразу захотелось воспользоваться, но… а что если жена спросит про какую-то конкретную фотку, а вы ее даже не видели?
Stan_1
27.01.2016 08:09+2Это ладно. А если жены всех программистов увидят эту статью и бросятся пытать своих — какие фотки «из вчерашних» ему особо понравились? :)
Maccimo
27.01.2016 01:52+2Написать приблуду, делающую постинг кучи фоток занятием трудноосуществимым и вообще морально изматывающим было бы продуктивнее.
Внезапные обрывы связи, Error 500, Connection timeout, login failed через раз, вот это всё.
k3NGuru
27.01.2016 05:51+1А жена хабр не читает? Вдруг увидит, что муж выкрутился и автоматизировал отношения?
fryday
27.01.2016 08:56+11Вангую скандал из за лайкнутой фотографии сломанного ногтя\каблука. Так что прикручивайте распознование образов)
tumikosha
27.01.2016 09:33+1Написал аналогичный лайкер для фейсбука на java+selenium. Назвал кукушкой
andreymironov
27.01.2016 12:30+5Если бы моя жена начала обижаться на меня за то, что я ей что-то там не лайкаю, я бы такого пятизвёздочного леща ей прописал… э-э-эх! Воспитана она больно хорошо.
Sultry
27.01.2016 13:12+8Интересные у вас жены, товарищ:
... "instagram_accounts_to_be_liked": ["xenia_sobchak", "volochkova_art"] ...
linux5
27.01.2016 13:16+6Зачем это все? ну ей богу… если просто потренироваться что-то пописать/поизучать, то конечно ОК, но как какое то решение это порождает кучу ненужных постов на FB, Инстаграме и прочем… Люди начинают думать, что они действительно постят что-то важное и кому то интересное, вместо этого, на мой взгляд, проще поговорить с человеком или написать комент, что все подряд выкладывать не надо… Если жена обмжается, то автоматизация точно уж не метод — гораздо лучше, опять же на мой взгляд, поговорить с ней… иначе, в конечном итоге, это приведет к еще большим проблемам… А уж если у вас будет баг и вы, вдруг, залайкаете не то, так вообще может быть скандал :)
сугубо ИМХОrhamdeew
28.01.2016 23:41Ну если мы не будет постить «не нужно», то другие будут постить свое «не нужно». СММщики еще и не так накручивают рекламные посты.
questor
27.01.2016 13:43+5Напомнило: bash.im/quote/436725
xxx: У нас тут YYY (билд инженера) сманили. Чел принципиально жил только в консоли и vim, диаграммы рисовал скриптами в dot, доки писал в wiki маркдауном, если что-либо требовало больше чем 1.5 минуты писал скрипт. Сидим разбираем его наследие.
xxx: Из прекрасного
xxx: smack-my-bitch-up.sh — шлет видимо его жене «Задержался на работе» и генерит отмазки из списка. Поставлено в cron, стреляет после 9 вечера если на рабочей станции висят интерактивные сессии по ssh с его логином.
xxx: kumar-mudak.sh — сканит почту, ищет письма от Кумара (заграничный ДБА с говорящей фамилией) с ключевыми словами (sorry, help и т.д.) откатывает упомянутую базу стейджинга на последний бэкап и отписывается типа не вопрос будь аккуратнее в следующий раз. Зело заколебал его Кумар вестимо.
xxx: badun.sh — поставлен на cron на определенные даты, шлет письма «плохо себя чувствую, поработаю из дома» опять же если к 8-45 утра не обнаружилось интерактивных сессий на рабочей станции.
xxx: И наконец первый приз: coffe-blyat.sh — ждет 17 сек (!!!) логинится по ssh в кофе-машину (епрст, мы и понятия не имели что она в сетке да и еще что на ней sshd поднят) и засылает туда какую-то абракадабру. Экспериментальным путем выяснили что ЭТО запускает процесс варения half-caf chai latte среднего размера, которое начинает выливаться в чашку как раз к тому моменту когда неспеша идущий человек добирается от его офиса до автомата.
akalend
27.01.2016 14:24+3Если бы я делал такой скрипт, то использовал бы только phantomjs и запускал код по крону,
нода вообще тут не нужна, и селениум тоже.
BoDVa
27.01.2016 15:02Я понимаю что заметка про полную автоматизацию, но кажется специально для случаев вроде вашего инстагрм в апп телефона прикрутил уведомления пушем о новых постах, в выбранном профиле.
Mendel
Код не смотрел — не надо оно мне, но за «автоматизацию семейных отношений» спасибо!
До чего дошел прогресс)))
TimsTims
Главное не перестараться с автоматизацией :)