среда, 4 октября 2017 г.

Популярные хештеги на русском ТОП 50

Ниже представляем список наиболее популярных русскоязычных хештегов Instagram на 04.10.2017


ТОП русские хештеги инстаграм
ТОП русские хештеги инстаграм

более полный список смотреть тут

москва46 637 595
лето26 392 463
россия24 361 366
любовь18 861 582
питер17 836 003
маникюр17 633 460
мода17 085 042
отдых16 945 609
весна15 950 434
стиль14 537 150
семья14 056 531
природа13 577 660
спб13 181 167
море12 619 930
спорт12 554 884
фото12 464 568
ручнаяработа10 599 555
девочкитакиедевочки10 127 185
зима10 067 725
люблю9 346 151
пп9 274 277
сочи9 095 635
вечер8 892 420
красиво8 834 462
казань8 826 822
солнце8 804 758
утро8 705 050
отпуск8 603 728
девушка8 555 213
селфи8 551 595
новыйгод8 483 345
платье8 195 423
обувь8 052 673
дизайн8 001 631
зож7 988 976
санктпетербург7 891 898
киев7 735 228
друзья7 635 649
дизайнногтей7 459 853
жизнь7 456 015
девушки7 193 380
доброеутро7 180 255
небо6 937 516
макияж6 652 710
еда6 581 099
инстамама6 429 809
шеллак6 429 628
ростов6 364 406
дом6 302 972


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

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


воскресенье, 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 млн., так же в ленту не попадут посты из закрытых аккаунтов, хотя в общем количестве они фигурируют. Проверено экспериментальным путем.

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

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

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