воскресенье, 2 октября 2016 г.

пересечение аудитории инстаграм

В этой статье вы научитесь делать пересечение аудиторий инстаграм (без программирования)

Нам понадобится аккаунт в Instagram и аккаунт в Google. В гугле мы будем использовать гугл.Таблицы для создания сравнительной таблицы подписчиков. Еще нам понадобится текстовый редактор, для форматирования файлов. Я использую Notepad++ 

И так поехали ...

Перед этими действиями нужно пройти авторизацию в инстаграм под своим аккаунтом.

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

Скриншот инстаграм по хеш-тегу #тортытюмень
Инстаграм, хеш-тег #Тортытюмень
 Первые две лучшие публикации принадлежат аккаунтам @reannushka и @cheeseofcake у первого аккаунта на момент написания статьи было 4649 подписчиков (followers)


у второго аккаунта было 2469 подписчика (followers)


вот пересечение подписчиков этих двух аккаунтов мы с Вами сейчас и сделаем. 

Сначала нужно узнать ID этих аккаунтов, для этого в адресной строке браузера добавьте в конце такую конструкцию ?__a=1


получим информацию в формате JSON в самом низу будет ID аккаунта, рядом с параметром biography


То же самое проделываем и для второго аккаунта и получаем его ID.

аккаунт @reannushka          id - 438099786
аккаунт @cheeseofcake    id - 352481592

Следующий этап получение списка подписчиков этих аккаунтов.
Для этого нужно в адресной строке браузера ввести такой запрос.

https://www.instagram.com/query/?q=ig_user(438099786)%20{%20followed_by.first(2500){%20count,%20page_info%20{%20end_cursor,%20has_next_page%20},%20nodes%20{%20id%20}%20}%20}

красным цветом выделен ID аккаунта по которому собираем список подписчиков. Данный запрос выдаст нам первую тысячу подписчиков. Количество возвращаемых подписчиков регулируется параметром followed_by.first(2500), максимально я мог получать ~8 тыс. подписчиков за раз, если более инстаграм выдает ошибку и приходится делать пагинацию, то есть брать порциями. В нашем примере размер порции будет равен 2500 подписчиков. 


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


и немного изменим запрос для получения второй порции данных

https://www.instagram.com/query/?q=ig_user(438099786)%20{%20followed_by.after(AQA1F6YDh9ahhMpMH-H6z50BJmt3hMpYikn-s02kwGSJeudTIHtSDJbZPZ5SnCVQb1aFNv5WAm221ZkbBMafAzqfqkMNRhgHCLCeJXrAJ6_GWxh5UqCYRYlPcWDeCO1RsYw,%202500)%20{%20count,%20page_info%20{%20end_cursor,%20has_next_page%20},%20nodes%20{%20id%20}%20}%20}

Теперь также копируем полученные данные в наш текстовый файл


Всю эту схему нужно провести и со вторым аккаунтом, в конечном итоге у нас будет 2 текстовых фалика с ID подписчиками этих акаунтов.

Теперь у нас есть текстовый файл такого вида


Нам нужно его отформатировать для загрузки в гугл.таблицы. Для этого заменяем правую фигурную скобку } на перенос строки. В редакторе Notepad++ нажимаем ctrl + h (поиск и замена значений), в появившимся окне вводим в строку найти
правую фигурную скобку }



Далее по такой же схеме убираем остальные лишние символы 



В конечном итоге у нас должны быть два текстовых файла с ИДишнками подписчиков.



Теперь мы загрузим их в гугл таблицы и сделаем сводную таблицу. Это можно также сделать и в Ексель и в опен офис, кому как удобно. Мануалы в инете есть, но если нужна будет помощь пишите мне на почту admin@gdedengikarl.ru

В гугл таблицах загружаем в таблицу сначала один файл, можно через импорт, можно через копирование и вставку, как вам удобнее. Во второй колонке пишите название аккаунта которому принадлежат ИДшники.



Ниже подгружаете данные из воторого файла.



То есть у нас должно быть 2 колонки, 1-ая колонка с ИДшиниками, 2-ая с названием аккаунта. Далее выделяем эти 2 столбца и делаем сводную таблицу в меню Данные - Сводная таблица



В сводной таблице в строки добавляем ИД


В столбцы добавляем название аккаунта



В значения добавляем ИДишники



Только указываем функцию COUNT подсчет значений. После этого получаем табличку на которую накладываем фильтр и делаем фильтр по колонке Итого по значению 2, то есть подписчик есть и в первом и во втором аккаунте.



В нашем примере мы получили 138 подписчиков которые есть и у первого и второго аккаунта, в остальном клиенты уникальны.

Для чего нужно делать пересечение подписчиков ?

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

Для социальной сети вконтакте, есть онлайн сервис https://pinsp.ru/

Продолжение следует ...

среда, 27 июля 2016 г.

Цель сбора базы из инстаграма

Как использовать базу пользователей instagram ?

Первое и самое эффективное использование собранной базы, это естественно массфолловинг (mass following), это подписка на пользователей. Часть пользователей получив уведомление на подписку, посмотрят на ваш аккаунт и если он их заинтересует они подпишутся и на вас.

Второй момент это комментирование их фоток(постов), с неявным указанием собственной рекламы.

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

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

Собирайте максимальное количество информации, хуже от избытка информации никогда не будет, а вот дополнительные крупицы помогут вам более четко определить свою ЦА (целевую аудиторию).

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

Если вам нужна помощь или консультация обращайтесь.

Продолжение следует ...


вторник, 5 июля 2016 г.

Сбор информации в инстаграме по определенному месту

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


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

Конечно для начала вам нужно будет выяснить сам location, это в принципе можно сделать через тот-же поиск, в нашем случае сделаем локацию Самара.

















В принципе здесь небольшие изменения в URL, а также не большие изменения и в ответном JSON


Instagram in JSON

Давайте переделаем наш скрипт под locations приведу весь код уже с изменениями, кому нужно может сравнить
с прошлой версией.

Изменения выделил желтым цветом.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python
# -*- coding: utf8 -*-
import json, urllib, urllib2, os.path
import codecs
import time

DIR = os.path.abspath(os.curdir) + '/' 
                                       
tag = '213094418'

def get(url, timeout=10):
        try:
            return urllib2.urlopen(url, timeout=timeout).read()
        except:
            return 0

def get_max_id(jsonres):
    try:
        jres = jsonres['location']['media']['page_info']['end_cursor']
        return jres
    except:
        return 0

def have_next_page(jsonres):
    try:
        jres = jsonres['location']['media']['page_info']['has_next_page']
        if  jres == True:
            return 1
        else:
            return 0
    except:
        return 0

def get_media_info(noderow):
        m = []
        for x in noderow:
              code = x['code']
              owner= x['owner']
              mydate = x['date']
              try:
                 caption = x['caption']
              except:
                 caption = 'none'
              m.append([str(code),str(owner),str(mydate),caption])
        return m

def main(tag):
    f = codecs.open('instagram_by_' + tag + '_data.txt','w', 'utf-8')     
    main_url = 'https://www.instagram.com/explore/locations/' + tag + '/?__a=1'
    page = 1
    res = json.loads(get(main_url)) 
    max_id = None
    while page == 1:
        for i in get_media_info(res['location']['media']['nodes']):
             caption = i[3]
             print i[0]
             mycaption2 = caption.replace('\n','')
             f.write(str(i[0]) + ',' + str(i[1])+ ','+ str(i[2])+ ','+ mycaption2+'\n')
        page = have_next_page(res)
        time.sleep(3)
        if page == 1:
            print 'next page'
            max_id = get_max_id(res)
            main_url = 'https://www.instagram.com/explore/locations/' + tag + '/?__a=1' + '&max_id=' + str(max_id)
            res = json.loads(get(main_url))
    print 'DONE!'

if __name__ == '__main__':
    main(tag)


Ну вот собственно этот скрипт собирает данные уже по локации

Я не специалист по языкам программирования и код наверное
далек от идеала, но он работает и свою функцию в принципе
выполняет.

Если у вас есть вопросы, замечания или предложения
можно писать в коменты

воскресенье, 3 июля 2016 г.

Собираем аудиторию по хештегу из Instagram

В этой статье вы научитесь собирать список фото и ИД аккаунтов из инстаграма по любому хештегу.


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

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

И так поехали, приведу весь код сразу и потом поясню что он делает:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python
# -*- coding: utf8 -*-
import json, urllib, urllib2, random, os.path
import codecs
import time
from urllib import urlencode

DIR = os.path.abspath(os.curdir) + '/' #текущая директория куда будет писаться файл с
                                       #результатами
tag = 'самара' #здесь задаем переменную с нужным нам хештегом

#выполнение запроса к сайту и получение данных 
def get(url, timeout=10):
        try:
            return urllib2.urlopen(url, timeout=timeout).read()
        except:
            return 0

def get_max_id(jsonres):
    try:
        jres = jsonres['tag']['media']['page_info']['end_cursor']
        return jres
    except:
        return 0

def have_next_page(jsonres):
    try:
        jres = jsonres['tag']['media']['page_info']['has_next_page']
        if  jres == True:
            return 1
        else:
            return 0
    except:
        return 0

def get_media_info(noderow):
    try:
        return [(x['code'], x['owner'], x['date'], x['caption']) for x in noderow]
    except:
        return 0

def main(tag):
    f = codecs.open('instagram_by_' + tag + '_data.txt', 'w', encoding='utf-8')     
    main_url = 'https://www.instagram.com/explore/tags/' + tag + '/?__a=1'
    page = 1
    res = json.loads(get(main_url)) 
    max_id = None
    while page == 1:
        for i in get_media_info(res['tag']['media']['nodes']):
             caption = i[3]
             mycaption2 = caption.replace('\n','')
             f.write(str(i[0]) + ',' + str(i[1])+ ','+ str(i[2])+ ','+ mycaption2+'\n')
        page = have_next_page(res)
        time.sleep(3)
        if page == 1:
            print 'next page'
            max_id = get_max_id(res)
            main_url = 'https://www.instagram.com/explore/tags/' + tag + '/?__a=1' + '&max_id=' + str(max_id)
            res = json.loads(get(main_url))
    print 'DONE!'

if __name__ == '__main__':
    main(tag)

Прежде чем разобраться в этом коде, попробуйте пройти по адресу https://www.instagram.com/explore/tags/здесьнужныйвамхештег/?__a=1
Я в коде использовал хештег самара
https://www.instagram.com/explore/tags/самара/?__a=1

Вам откроется вот такая картинка:





Это как раз и есть лента инстаграма в формате JSON, вот её мы с вами и сохраняем в свой файлик.
Для перехода к следующей странице ленты, так называемая пагинация, мы используем параметр '&max_id='
подставляя в него значение end_cursor и так продолжаем до тех пор пока в JSON ответе флаг параметра 'has_next_page' 
не будет равен false.

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


В каждой строке файла, через разделитель(в нашем случае это , запятая) будет содержаться информация согласно этой функции:


def get_media_info(noderow):
    try:
        return [(x['code'], x['owner'], x['date'], x['caption']) for x in noderow]
    except:
        return 0

Где [code] - это ид фотки(поста), [owner] - это ID - пользователя , [date] - дата поста в unix timestamp формате , [caption] - это первичный комментарий пользователя в котором он описывает фото и дополнительные хештеги.

В принципе этого файла более чем достаточно для сбора и анализа аудитории, то есть благодаря наличию остальных хештегов, вы можете отфильтровать торговцев которые перечисляют кучу всевозможных городов. Так же благодаря этим данным вы можете выбрать людей занимающихся какой-то специализацией, например салоны красоты. 
Конечно для более полноценного анализа этот файл лучше импортировать в какую нибудь СУБД или на крайний случай в Excel.
Сколько данных дает инстаграм, вышеуказанным скриптом достается не очень большое кол-во постов, всегда по разному может 20 тыс. может 30 тыс. хотя по общему количеству постов по популярному хештегу может быть и более 1 млн., так же в ленту не попадут посты из закрытых аккаунтов, хотя в общем количестве они фигурируют. Проверено экспериментальным путем.

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

Всем спасибо за внимание.

Если есть вопросы пишите в комментариях






четверг, 23 июня 2016 г.

Различные сервисы для работы с Instagram

Сервисы/программы/приложения для работы с Instagram


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


Про блог

Для чего этот блог?

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

Тем более что они постоянно, что-то там подкручивают в плане рекламы, по-этому интересно будет по экспериментировать и проанализировать, что к чему.

Ну и основной эксперимент это продвижение блога в обычном поиске Яндекса и Гугла. Постараюсь подробно описывать все действия и отчитываться по результатам.