Словарь Инстаграмера: разбираем основные термины в Инстаграм

Для чего нужен бизнесаккаунт 

Бизнес-аккаунты в Instagram создали, чтобы выделить страницы брендов, компаний и предпринимателей и предоставить им условия для активного продвижения.

Пользователям бизнес-аккаунт позволяет повысить узнаваемость бренда или продукта, увеличить охват аудитории и объём продаж, привлекать клиентов посредством маркетинговых активностей.

Vanila подход к распараллеливанию

На 150 запросах в день далеко не уедешь, надо что-то придумывать. В самом начале я подумал: «подержите моё пиво, я проходил параллельное программирование в вузе». Так начинается новая глава моего повествования.

«Параллельное программирование» - рано или поздно

«Параллельное программирование» — рано или поздно большинству разработчиков приходится столкнуться с этим страшным зверем. К сожалению, в моём вузе (МФТИ) курсы по параллельному программированию были крайне примитивными и не давали необходимого уровня экспертизы для создания крупных систем для продакшена.

Передо мной стояла задача организовать параллельный асинхронный процесс добычи данных несколькими исполнителями.

Мне пришла на ум следующая концепция — ввести два типа процессов:

  • Процессы — исполнители: получают задание, делают запросы к API Инстаграмма, полученные в результате данные записывают в свои локальные базы данных.

  • Процесс — менеджер: назначает задания исполнителям, агрегирует данные, собранные исполнителями, в одном месте и затем выделяет лайки внутри общей базы данных.

Процессы исполнители и процесс менеджер я планировал запускать по расписанию с помощью какой-нибудь специализированной утилиты (однако в итоге сделал монстра из докера и crontab).

Аккаунты для проведения запросов я планировал создавать вручную, но в итоге пришел к тому, что проще их купить, примерно 12 рублей за штуку — не такая высокая цена).

Стыдно даже рассказывать, с чего я начал, но раз уж пообещал повествование про свой путь, то дерзайте. Начинал я с крайне примитивного подхода в виде хранения данных в json на жестком диске. То есть исполнители получали задание в формате json файла со специальным названием, соответствующим исполнителю, делали необходимые запросы, и затем процесс менеджер собирал результаты работы в один большой json файл.

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

Костыльное решение
Костыльное решение

Расписание процессов

Значимой частью этого проекта, его безусловным сердцем, является логика запуска процессов по расписанию. Где-то внутри меня сидит бунтарь, которому постоянно хочется хардкора, поэтому расписание процессов я делал внутри докер контейнера с помощью crontab. Более того, конфигурационный файл crontab внутри докера постоянно синхронизируется с облачной базой данных. Когда я продумывал всю эту архитектуру я, безусловно, представлял себя вождём шаманов, совершающим некое таинство.

Воображаемый вождь шаманов
Воображаемый вождь шаманов

Не буду вас томить и сразу покажу как выглядел мой Dockerfile, скажу честно, я несколько дней гуглил как завести crontab внутри докера и только где-то по задворкам иностранных форумов мне удалось собрать крупицы знаний, которые позволили мне «завести» всё это.

FROM ubuntu:latest ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \   && apt-get install -y python3-pip python3-dev \   && apt-get install -y tmux htop cron nano rsyslog\   && cd /usr/local/bin \   && ln -s /usr/bin/python3 python \   && pip3 install --upgrade pip  COPY requirements.txt /tmp/ RUN pip install -r /tmp/requirements.txt COPY crontab_config /tmp/ RUN crontab /tmp/crontab_config CMD service rsyslog start && service cron start && \ tail -f /var/log/syslog 

В файле crontab_config всего одна прекрасная строчка, которая вызывала процесс сборки файла с расписанием на базе данных в облачной базе данных. В результате получался файлик в 100 с чем-то строчек.

MAILTO="" */1 * * * * python3 /main/make_crontab_file.py >> /main/crontab.log 
Как выглядел мой crontab файл

В результате получалась такая вот красота, не пугайтесь. sleep в командах исполнителей нужно чтобы процессы не запускались одновременно.

1 */10 * * * python3 /main/manager.py >> /main/crontab.log 13 1 */2 * * python3 /main/manage_cluster.py >> /main/crontab.log 7 */6 * * * python3 /main/clean_likes_stream.py >> /main/crontab.log 1 */6 * * * python3 /main/make_crontab_file.py >> /main/crontab.log 0 */1 * * * python3 /main/normalize_splits.py >> /main/crontab.log 0,10,20,30,40,50 * * * * sleep 0 && python3 /main/master/executor.py 0 >> /main/master/logs/crontab_0.log 2>&1 1,11,21,31,41,51 * * * * sleep 1 && python3 /main/master/executor.py 1 >> /main/master/logs/crontab_1.log 2>&1 2,12,22,32,42,52 * * * * sleep 2 && python3 /main/master/executor.py 2 >> /main/master/logs/crontab_2.log 2>&1 3,13,23,33,43,53 * * * * sleep 3 && python3 /main/master/executor.py 3 >> /main/master/logs/crontab_3.log 2>&1 4,14,24,34,44,54 * * * * sleep 4 && python3 /main/master/executor.py 4 >> /main/master/logs/crontab_4.log 2>&1 5,15,25,35,45,55 * * * * sleep 5 && python3 /main/master/executor.py 5 >> /main/master/logs/crontab_5.log 2>&1 6,16,26,36,46,56 * * * * sleep 6 && python3 /main/master/executor.py 6 >> /main/master/logs/crontab_6.log 2>&1 7,17,27,37,47,57 * * * * sleep 7 && python3 /main/master/executor.py 7 >> /main/master/logs/crontab_7.log 2>&1 8,18,28,38,48,58 * * * * sleep 8 && python3 /main/master/executor.py 8 >> /main/master/logs/crontab_8.log 2>&1 9,19,29,39,49,59 * * * * sleep 9 && python3 /main/master/executor.py 9 >> /main/master/logs/crontab_9.log 2>&1 0,10,20,30,40,50 * * * * sleep 10 && python3 /main/master/executor.py 10 >> /main/master/logs/crontab_10.log 2>&1 1,11,21,31,41,51 * * * * sleep 21 && python3 /main/master/executor.py 11 >> /main/master/logs/crontab_11.log 2>&1 2,12,22,32,42,52 * * * * sleep 22 && python3 /main/master/executor.py 12 >> /main/master/logs/crontab_12.log 2>&1 3,13,23,33,43,53 * * * * sleep 10 && python3 /main/master/executor.py 13 >> /main/master/logs/crontab_13.log 2>&1 4,14,24,34,44,54 * * * * sleep 11 && python3 /main/master/executor.py 14 >> /main/master/logs/crontab_14.log 2>&1 5,15,25,35,45,55 * * * * sleep 12 && python3 /main/master/executor.py 15 >> /main/master/logs/crontab_15.log 2>&1 6,16,26,36,46,56 * * * * sleep 13 && python3 /main/master/executor.py 16 >> /main/master/logs/crontab_16.log 2>&1 7,17,27,37,47,57 * * * * sleep 14 && python3 /main/master/executor.py 17 >> /main/master/logs/crontab_17.log 2>&1 8,18,28,38,48,58 * * * * sleep 15 && python3 /main/master/executor.py 18 >> /main/master/logs/crontab_18.log 2>&1 9,19,29,39,49,59 * * * * sleep 16 && python3 /main/master/executor.py 19 >> /main/master/logs/crontab_19.log 2>&1 0,10,20,30,40,50 * * * * sleep 17 && python3 /main/master/executor.py 20 >> /main/master/logs/crontab_20.log 2>&1 1,11,21,31,41,51 * * * * sleep 18 && python3 /main/master/executor.py 21 >> /main/master/logs/crontab_21.log 2>&1 2,12,22,32,42,52 * * * * sleep 29 && python3 /main/master/executor.py 22 >> /main/master/logs/crontab_22.log 2>&1 3,13,23,33,43,53 * * * * sleep 30 && python3 /main/master/executor.py 23 >> /main/master/logs/crontab_23.log 2>&1 4,14,24,34,44,54 * * * * sleep 31 && python3 /main/master/executor.py 24 >> /main/master/logs/crontab_24.log 2>&1 5,15,25,35,45,55 * * * * sleep 32 && python3 /main/master/executor.py 25 >> /main/master/logs/crontab_25.log 2>&1 6,16,26,36,46,56 * * * * sleep 20 && python3 /main/master/executor.py 26 >> /main/master/logs/crontab_26.log 2>&1 7,17,27,37,47,57 * * * * sleep 21 && python3 /main/master/executor.py 27 >> /main/master/logs/crontab_27.log 2>&1 8,18,28,38,48,58 * * * * sleep 22 && python3 /main/master/executor.py 28 >> /main/master/logs/crontab_28.log 2>&1 9,19,29,39,49,59 * * * * sleep 23 && python3 /main/master/executor.py 29 >> /main/master/logs/crontab_29.log 2>&1 0,10,20,30,40,50 * * * * sleep 24 && python3 /main/master/executor.py 30 >> /main/master/logs/crontab_30.log 2>&1 1,11,21,31,41,51 * * * * sleep 25 && python3 /main/master/executor.py 31 >> /main/master/logs/crontab_31.log 2>&1 2,12,22,32,42,52 * * * * sleep 26 && python3 /main/master/executor.py 32 >> /main/master/logs/crontab_32.log 2>&1 3,13,23,33,43,53 * * * * sleep 37 && python3 /main/master/executor.py 33 >> /main/master/logs/crontab_33.log 2>&1 4,14,24,34,44,54 * * * * sleep 38 && python3 /main/master/executor.py 34 >> /main/master/logs/crontab_34.log 2>&1 5,15,25,35,45,55 * * * * sleep 39 && python3 /main/master/executor.py 35 >> /main/master/logs/crontab_35.log 2>&1 6,16,26,36,46,56 * * * * sleep 40 && python3 /main/master/executor.py 36 >> /main/master/logs/crontab_36.log 2>&1 7,17,27,37,47,57 * * * * sleep 41 && python3 /main/master/executor.py 37 >> /main/master/logs/crontab_37.log 2>&1 8,18,28,38,48,58 * * * * sleep 42 && python3 /main/master/executor.py 38 >> /main/master/logs/crontab_38.log 2>&1 9,19,29,39,49,59 * * * * sleep 30 && python3 /main/master/executor.py 39 >> /main/master/logs/crontab_39.log 2>&1 0,10,20,30,40,50 * * * * sleep 31 && python3 /main/master/executor.py 40 >> /main/master/logs/crontab_40.log 2>&1 1,11,21,31,41,51 * * * * sleep 32 && python3 /main/master/executor.py 41 >> /main/master/logs/crontab_41.log 2>&1 2,12,22,32,42,52 * * * * sleep 33 && python3 /main/master/executor.py 42 >> /main/master/logs/crontab_42.log 2>&1 3,13,23,33,43,53 * * * * sleep 34 && python3 /main/master/executor.py 43 >> /main/master/logs/crontab_43.log 2>&1 4,14,24,34,44,54 * * * * sleep 45 && python3 /main/master/executor.py 44 >> /main/master/logs/crontab_44.log 2>&1 5,15,25,35,45,55 * * * * sleep 46 && python3 /main/master/executor.py 45 >> /main/master/logs/crontab_45.log 2>&1 6,16,26,36,46,56 * * * * sleep 47 && python3 /main/master/executor.py 46 >> /main/master/logs/crontab_46.log 2>&1 7,17,27,37,47,57 * * * * sleep 48 && python3 /main/master/executor.py 47 >> /main/master/logs/crontab_47.log 2>&1 8,18,28,38,48,58 * * * * sleep 49 && python3 /main/master/executor.py 48 >> /main/master/logs/crontab_48.log 2>&1 9,19,29,39,49,59 * * * * sleep 50 && python3 /main/master/executor.py 49 >> /main/master/logs/crontab_49.log 2>&1 0,10,20,30,40,50 * * * * sleep 51 && python3 /main/master/executor.py 50 >> /main/master/logs/crontab_50.log 2>&1 1,11,21,31,41,51 * * * * sleep 52 && python3 /main/master/executor.py 51 >> /main/master/logs/crontab_51.log 2>&1 2,12,22,32,42,52 * * * * sleep 40 && python3 /main/master/executor.py 52 >> /main/master/logs/crontab_52.log 2>&1 3,13,23,33,43,53 * * * * sleep 41 && python3 /main/master/executor.py 53 >> /main/master/logs/crontab_53.log 2>&1 4,14,24,34,44,54 * * * * sleep 42 && python3 /main/master/executor.py 54 >> /main/master/logs/crontab_54.log 2>&1 5,15,25,35,45,55 * * * * sleep 53 && python3 /main/master/executor.py 55 >> /main/master/logs/crontab_55.log 2>&1 6,16,26,36,46,56 * * * * sleep 54 && python3 /main/master/executor.py 56 >> /main/master/logs/crontab_56.log 2>&1 7,17,27,37,47,57 * * * * sleep 55 && python3 /main/master/executor.py 57 >> /main/master/logs/crontab_57.log 2>&1 8,18,28,38,48,58 * * * * sleep 56 && python3 /main/master/executor.py 58 >> /main/master/logs/crontab_58.log 2>&1 9,19,29,39,49,59 * * * * sleep 57 && python3 /main/master/executor.py 59 >> /main/master/logs/crontab_59.log 2>&1 0,10,20,30,40,50 * * * * sleep 58 && python3 /main/master/executor.py 60 >> /main/master/logs/crontab_60.log 2>&1 1,11,21,31,41,51 * * * * sleep 59 && python3 /main/master/executor.py 61 >> /main/master/logs/crontab_61.log 2>&1 2,12,22,32,42,52 * * * * sleep 0 && python3 /main/master/executor.py 62 >> /main/master/logs/crontab_62.log 2>&1 3,13,23,33,43,53 * * * * sleep 1 && python3 /main/master/executor.py 63 >> /main/master/logs/crontab_63.log 2>&1 4,14,24,34,44,54 * * * * sleep 2 && python3 /main/master/executor.py 64 >> /main/master/logs/crontab_64.log 2>&1 5,15,25,35,45,55 * * * * sleep 50 && python3 /main/master/executor.py 65 >> /main/master/logs/crontab_65.log 2>&1 6,16,26,36,46,56 * * * * sleep 1 && python3 /main/master/executor.py 66 >> /main/master/logs/crontab_66.log 2>&1 7,17,27,37,47,57 * * * * sleep 2 && python3 /main/master/executor.py 67 >> /main/master/logs/crontab_67.log 2>&1 8,18,28,38,48,58 * * * * sleep 3 && python3 /main/master/executor.py 68 >> /main/master/logs/crontab_68.log 2>&1 9,19,29,39,49,59 * * * * sleep 4 && python3 /main/master/executor.py 69 >> /main/master/logs/crontab_69.log 2>&1 0,10,20,30,40,50 * * * * sleep 5 && python3 /main/master/executor.py 70 >> /main/master/logs/crontab_70.log 2>&1 1,11,21,31,41,51 * * * * sleep 6 && python3 /main/master/executor.py 71 >> /main/master/logs/crontab_71.log 2>&1 2,12,22,32,42,52 * * * * sleep 7 && python3 /main/master/executor.py 72 >> /main/master/logs/crontab_72.log 2>&1 3,13,23,33,43,53 * * * * sleep 8 && python3 /main/master/executor.py 73 >> /main/master/logs/crontab_73.log 2>&1 4,14,24,34,44,54 * * * * sleep 9 && python3 /main/master/executor.py 74 >> /main/master/logs/crontab_74.log 2>&1 5,15,25,35,45,55 * * * * sleep 10 && python3 /main/master/executor.py 75 >> /main/master/logs/crontab_75.log 2>&1 6,16,26,36,46,56 * * * * sleep 11 && python3 /main/master/executor.py 76 >> /main/master/logs/crontab_76.log 2>&1 7,17,27,37,47,57 * * * * sleep 22 && python3 /main/master/executor.py 77 >> /main/master/logs/crontab_77.log 2>&1 8,18,28,38,48,58 * * * * sleep 10 && python3 /main/master/executor.py 78 >> /main/master/logs/crontab_78.log 2>&1 9,19,29,39,49,59 * * * * sleep 11 && python3 /main/master/executor.py 79 >> /main/master/logs/crontab_79.log 2>&1 0,10,20,30,40,50 * * * * sleep 12 && python3 /main/master/executor.py 80 >> /main/master/logs/crontab_80.log 2>&1 1,11,21,31,41,51 * * * * sleep 13 && python3 /main/master/executor.py 81 >> /main/master/logs/crontab_81.log 2>&1 2,12,22,32,42,52 * * * * sleep 14 && python3 /main/master/executor.py 82 >> /main/master/logs/crontab_82.log 2>&1 3,13,23,33,43,53 * * * * sleep 15 && python3 /main/master/executor.py 83 >> /main/master/logs/crontab_83.log 2>&1 4,14,24,34,44,54 * * * * sleep 16 && python3 /main/master/executor.py 84 >> /main/master/logs/crontab_84.log 2>&1 5,15,25,35,45,55 * * * * sleep 17 && python3 /main/master/executor.py 85 >> /main/master/logs/crontab_85.log 2>&1 6,16,26,36,46,56 * * * * sleep 18 && python3 /main/master/executor.py 86 >> /main/master/logs/crontab_86.log 2>&1 7,17,27,37,47,57 * * * * sleep 19 && python3 /main/master/executor.py 87 >> /main/master/logs/crontab_87.log 2>&1 8,18,28,38,48,58 * * * * sleep 30 && python3 /main/master/executor.py 88 >> /main/master/logs/crontab_88.log 2>&1 9,19,29,39,49,59 * * * * sleep 31 && python3 /main/master/executor.py 89 >> /main/master/logs/crontab_89.log 2>&1 0,10,20,30,40,50 * * * * sleep 32 && python3 /main/master/executor.py 90 >> /main/master/logs/crontab_90.log 2>&1 1,11,21,31,41,51 * * * * sleep 20 && python3 /main/master/executor.py 91 >> /main/master/logs/crontab_91.log 2>&1 2,12,22,32,42,52 * * * * sleep 21 && python3 /main/master/executor.py 92 >> /main/master/logs/crontab_92.log 2>&1 3,13,23,33,43,53 * * * * sleep 22 && python3 /main/master/executor.py 93 >> /main/master/logs/crontab_93.log 2>&1 4,14,24,34,44,54 * * * * sleep 23 && python3 /main/master/executor.py 94 >> /main/master/logs/crontab_94.log 2>&1 5,15,25,35,45,55 * * * * sleep 24 && python3 /main/master/executor.py 95 >> /main/master/logs/crontab_95.log 2>&1 6,16,26,36,46,56 * * * * sleep 25 && python3 /main/master/executor.py 96 >> /main/master/logs/crontab_96.log 2>&1 7,17,27,37,47,57 * * * * sleep 26 && python3 /main/master/executor.py 97 >> /main/master/logs/crontab_97.log 2>&1 8,18,28,38,48,58 * * * * sleep 27 && python3 /main/master/executor.py 98 >> /main/master/logs/crontab_98.log 2>&1 9,19,29,39,49,59 * * * * sleep 38 && python3 /main/master/executor.py 99 >> /main/master/logs/crontab_99.log 2>&1 

make_crontab_file — процесс создания конфигурационного crontab файла на базе параметров облачной базы данных и установки его внутрь докер контейнера.

Создаваемый конфигурационный файл зависит от параметров, находящихся внутри раздела crontab в облачной базе данных.

Алгоритм работы следующий:

  • Из облачной базы данных подгружаются параметры формирующие расписание.

  • Создается текстовый файл, содержащий комманды для системной утилиты crontab.

  • С помощью os.system() вызывается команда установки конфигурационного файла внутрь докер контейнера.

Каким образом я её решал

Ознакомившись с требованиями заказчика я понял, что через один аккаунт много данных достать не получится, то есть каким-то образом необходимо разбивать процесс добычи данных на группу аккаунтов — добытчиков. Именно с этой мысли и начинается моё увлекательное приключение.

Да, как вы ещё не раз убедитесь в процессе чтения, я люблю всё структурировать, поэтому ниже список разделов этой статьи:

  1. Принцип майнинга данных из инстаграмма с помощью одного аккаунта, какие ограничения на это есть.

  2. Каким образом можно распаралелить процесс извлечения данных на несколько исполнителей (Vanilla подход).

  3. Как распаралелить процесс, но уже по-крупному. Переход от локальных баз данных к облачным.

  4. Архитектура получившейся облачной базы данных (Firebase Realtime Databasse).

  5. Оркестрирование процессов или как сделать так, чтобы всё работало параллельно и не сломалось.

  6. Вычисление активной аудитории профиля в Инстаграм, создание кластера активных пользователей и его уплотнение.

  7. Как я делал расписание процессов. Некоторая магия и танцы с бубном вокруг докера и crontab.

  8. Логи + облачная база данных.

  9. Полезные ссылки (API Instagram, прокси сервис, биржа аккаунтов инстаграм)

  10. Outro + Размышления о будущем проекта.

Если вдруг вы специалист в области инстаграмма, работаете с рекламой, то мне очень интересно услышать ваше мнение, какие именно данные из Инстаграма вам нужны и какое дальнейшее коммерческое развитие может быть у моего проекта.

Для начала предлагаю освежить в памяти, каким образом можно получить открытые данные из Инстаграма.

Визуальный ряд

Инстаграм — это, прежде всего, красивая картинка, которая цепляет взгляд. И только затем человек переходит к текстовому блоку

И ваша задача — зацепить человека визуальной составляющей.

Главное правило хорошего фото — дневной свет. Добавляйте яркие детали, необычное расположение предметов на фото (используйте правило третей). Если у вас нет возможности снимать в городе, купите фотофон. Они стали очень популярны в последнее время (имитируют дерево, мрамор, камень и т.д.). Смотрите чужие профили и ищите вдохновение.

Единый стиль аккаунта играет огромную роль: фото с повторяющимися деталями, в одной цветовой гамме, чередование светлых и темных кадров или линейное расположение. Подумайте над цветом, который нравится вам больше всего, или который позволяет создать окружающая обстановка, дополните его еще парой сочетающихся цветов на основе цветового круга и начинайте дополнять кадры этими расцветками.

Выбираем ник

Имя пользователя нужно выбирать в зависимости от того, регистрируете вы личный аккаунт или рабочий. Эта принципиальная разница влияет на подход к выбору ника.

Если вы хотите вести личный блог и выкладывать личные фото, можно выбрать любой ник, который еще не занят (Инстаграм подскажет), придумать что-то оригинальное, использовать ник из других социальных сетей.

Если вы регистрируете аккаунт для ведения бизнеса, к выбору имени нужно подойти иначе. Лучше, чтобы ник был говорящим.

Например: если вы занимаетесь цветами, имя может содержать слово Flowers в различных комбинациях. И лучше, если именно с этого слова будет начинаться ваше наименование. Так потенциальным покупателям будет легче вас найти.

Дополнительно можно указать город для того, чтобы посетитель понимал сразу, где цветы можно заказать.

Логи

Я посчитал важным сделать красивые и адекватные логи, поэтому их я также сохранял в облачную базу даных, что оказалось очень удобно. На базе логов, хранящихся в таком формате можно сделать, например, Телеграм бота, который по запросу будет присылать отчёт по успешности выполненных запросов и анализировать самые часто встречающиеся проблемы.

В структуре tasks_log хранятся логи, описывающие результат работы каждого запроса каждого исполнителя.

tasks_log = {     '0': [task_log] массив логов для исполнителя     с идентификатором exec_id = 0,     '1': [task_log] для exec_id = 1,     ...     'n': [task_log] для exec_id = n, } 

где каждый task_log имеет вид

task_log = {     'type' : тип запроса: 'user' или 'post',     'success' : True или False,     'time' : время запроса,     'payload' : идентификатор пользователя или поста,     в зависимости от запроса } 

в случае неуспеха task_log.payload имеет вид

task_log.payload = { 		'type' : тип запроса,     'success' : False,     'time' : время запроса,     'payload' : идентификатор поста или пользователя,     'last_json' : ответ API Инстаграм  } 

Сбор через хэштеги

Конечно, собрать базу из жителей города можно и по хэштегу самого города. Проблема: очень низкое качество данных на выходе, поскольку эфир хэштега любого города плотно «забит» коммерческими аккаунтами. Даже не сомневайтесь в этом! Проверьте сами, введя хэштег своего города. Есть ли решение у этой задачи?

Частично может помочь фильтрация по «стоп-словам», которые часто используют коммерческие аккаунты. Например, в список таких стоп-слов могут попасть «магазин», «доставка», «заказать». Однако — как ни старайся, но даже после такой фильтрации база, собранная по хэштегам, будет очень грязной. Способ простой, дешевый, всем известный, но не дает нам хороший результат.

Функции и возможности бизнесаккаунта

На странице профиля можно указать направление деятельности, адрес и контактные данные, ссылку на сайт, описание. Можно добавить вечные истории, в которых рассказано о товаре, способах покупки, условиях сотрудничества, отзывах клиентов. В итоге посетитель может сразу понять, что это за страница и чем она может быть интересна.

Удобная связь с аудиторией. Владелец бизнес-аккаунта может добавить на свою страницу кнопки «Позвонить», «Связаться», «Как добраться». Благодаря этому, пользователи могут узнать контактные данные компании и связаться с ней, чтобы совершить покупку или задать вопросы.

Можно запускать таргетированную рекламу со специально созданными креативами или продвигать избранные публикации. Причём запускать рекламу можно как из мобильного приложения Instagram, так и из рекламного кабинета Facebook.

Анализ статистики. Изучение статистики помогает проанализировать эффективность контента, выявить ошибки и разработать правильную стратегию продвижения.

Заполняем шапку профиля

Заполнение «Bio» — информации, которая указана под фото, принципиально важно. По словам, указанным в шапке, происходит поиск в Инстаграм и выдача пользователей.

Если вы ведете личный аккаунт, напишите свое имя, чем вы занимаетесь, увлекаетесь, на какую тему ведете блог, где живете.

Что ещё я использовал в проекте, полезные ссылки

Неофициальное API инстаграмма

В своей прошлой статье я использовал instabot, однако сейчас этот сервис уже не подерживаетя. Поэтому нынешний парсер базируется на instagrapi — мощный и надёжный сервис, рекомендасьон.

Проблемка с нынешней версией сервиса

На момент написания статьи у данная библиотека имеет версию 1.9.13. В данной версии кроется коварная ошибка, которая, впрочем, достаточно просто чинится.

Кто-то просто забыл убрать строчку в 43й строке. Просто убираем скобочку и всё работает.

Прокси

Сбор базы из VK

Если вы хотите собрать чистую, качественную базу горожан — вот вам секрет от команды Parasite. Это — один из лучших способов решить поставленную задачу. С помощью автоматизированных SMM–сервисов для работы с VK собираем всех пользователей, которые одновременно а) указали в личной информации страницы ВК нужный вам город, и б) указали на странице ВК ссылку на свой Инстаграм.

Собранная таким способом база будет чистой практически на 100%. Кроме того, вы почти полностью избавляетесь от ботов и коммерческих аккаунтов в выборке. Чудеса!