Подробное руководство по извлечению данных из Instagram

Instagram - это социальная сеть, которая позволяет пользователям публиковать фотографии и видео. У приложения более 800 миллионов активных пользователей в месяц. В основном он используется, чтобы делиться личными моментами с друзьями, но есть также некоторые бизнес-функции, которые можно использовать в маркетинговых целях. Instagram Graph API - это набор конечных точек Facebook Graph API, которые позволяют приложениям получать доступ к данным в профессиональных аккаунтах Instagram (как бизнес-аккаунтах, так и аккаунтах Creator).

Чтобы использовать Instagram API, доступ к учетным записям осуществляется косвенно через учетные записи Facebook, поэтому все пользователи приложения должны иметь учетную запись Facebook для взаимодействия с API. Без лишних слов, давайте сразу же приступим.

Шаг 1. Регистрация приложения

Чтобы начать, мы сначала зарегистрируемся как разработчик Facebook, перейдя в Facebook для разработчиков и щелкнув Начать. После регистрации мы создадим наше первое приложение в Facebook Developers. Следующее, что нужно сделать, это выбрать тип нашего приложения, имя приложения и адрес электронной почты. После того, как мы завершим процесс создания приложения, наше приложение будет загружено на панели инструментов приложения, как показано ниже.

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

Шаг 2. Аутентификация

Аутентификация пользователя приложения осуществляется с помощью токенов доступа. Мы будем использовать токен доступа Facebook. Мы можем получить токен доступа из Graph API Explorer, а также сгенерировать долгоживущий токен доступа, который мы можем использовать в нашем коде.

Мы также не должны забывать добавлять разрешения, относящиеся к данным, которые мы хотим получить из Instagram.

Это разрешение мы добавили на страницу Api Explorer.

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

показов в день

Количество показов в день, которое является метрикой в ​​разделе instagram_manage_insights, отражает общее количество раз, когда ваш контент отображается людям в Instagram, включая повторные просмотры.

Напишите следующие строки кода для извлечения данных.

#We import our libraries
import requests
import pandas as pd
import json
import numpy as np
from datetime import datetime, timedelta
#we instantiate a time variable,so we could generate date from 2021 to 2019
d0 = datetime(2019, 12,16)
d1 = datetime(2021, 9,15)
dt = timedelta(days = 10)
#Numpy was used to calculate 10 days addition to each date and then save to a list
dates = np.arange(d0, d1, dt).astype(datetime).tolist()
EndTime=[]
#we loop through the dates here to add ten days to each of our dates and make this our end time
for i in dates:
    days=timedelta(days=10)
    vl=i+days
    B.append(vl)
startTime=[]
#we loop through the EndTime list to remove 10 days from the date and make this our Start time.
for i in EndTime:
    b=i - timedelta(days=10)
    StartTime.append(b)

После того, как мы сгенерировали время начала и время окончания, мы передадим URL. Затем преобразуйте это индивидуальное время в UTC, потому что для передачи его через API оно должно быть в формате UTC.

#we import the time library
import time
import datetime
convert_EndTime=[]
#we loop through the list containing this date and convert each to a UTC format
for i in convert_EndTime:
    unixtime = time.mktime(i.timetuple())
    convert_EndTime.append(unixtime)
convert_startTime=[]
#we loop through the list containing this date and convert each to a UTC format
for i in convert_StartTime:
    unixtime = time.mktime(i.timetuple())
    convert_startTime.append(unixtime)
tot_impressions=[]
#we create a function here and use the get request to obtain the data and also we pass all our parameters in
def impressions():
#we loop through the starttime to pass in the values
    for i, j in enumerate(startTime):
    #the url to send to the api
        the_url = 'https://graph.facebook.com/v12.0/17841425263195637/insights?metric=impressions&period=days_28&since=%s&until=%s'%(j, EndTime[i])
        r_response = requests.get(the_url,
                                headers = {
                                    'Authorization':'Bearer '+ 'EAAMtRXnqMycBAOz9pcx9GzQmPhKEUJgr9WGNZBBu4tZAaWcJ1RXtE5Ex0mscsrRPyBK20VHLE7P0bSDz3rDF8js9SefswaZAyWCLaO5rqHsFrweLYf8x14Gb9Pc5Xh0DWcOWIJJvZA1qDZB5Va3RG5ZAHKnZBz0HAugqIuejVlqT1egHDAS6p01',
                                    'Content-Type': 'application/json'
                                }
                                )
        #we use json to load this response data
        reaction_response_data = json.loads(r_response.text)
        #we use sleep method here because the data we want to get is quite much and we don't want our code to crash
        time.sleep(2)
     #we append all data to an empty list we defined earlier
        tot_impressions.append(reaction_response_data)
        time.sleep(5)

Очистка данных

Следующим шагом будет очистка данных и извлечение всех необходимых столбцов.

End_time=[]
Description=[]
Impression_values=[]
#we loop through the data and append all data we need to separate list
for i in tot_impressions:
    for v in i['data']:
        Description.append(v['description'])
        for s in v['values']:
            End_time.append(s['end_time'])
            Impression_values.append(s['value'])
import pandas as pd
#We then save a data as a dataframe
dataframH= {'No_of_Times_Media_Account_viewed_Daily': Impression_values,'Time':End_time}
dfH = pd.DataFrame(dataframH)

Данные об общем охвате за день

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

Напишите строки кода ниже, чтобы извлечь эти данные.

#We create our function here and initiate an empty list to save our response
tot_reach=[]
def reach():
#We loop through the starttime and pass it under our metric and as well the End time
    for i, j in enumerate(startTime):
        #the url to our api
        the_url = 'https://graph.facebook.com/v12.0/17841425263195637/insights?metric=reach,profile_views&period=day&since=%s&until=%s'%(j, EndTime[i])
        #we use the GET Request method to extract our data
        r_response = requests.get(the_url,
                                headers = {
                                    'Authorization':'Bearer '+ 'EAAMtRXnqMycBAOz9pcx9GzQmPhKEUJgr9WGNZBBu4tZAaWcJ1RXtE5Ex0mscsrRPyBK20VHLE7P0bSDz3rDF8js9SefswaZAyWCLaO5rqHsFrweLYf8x14Gb9Pc5Xh0DWcOWIJJvZA1qDZB5Va3RG5ZAHKnZBz0HAugqIuejVlqT1egHDAS6p01',
                                    'Content-Type': 'application/json'
                                }
                                )
        #we use json to load the data response
        reaction_response_data = json.loads(r_response.text)
        time.sleep(2)
        print('getting_data')
        #we append all data to an empty list
        tot_reach.append(reaction_response_data)
        time.sleep(5)

Очистка данных

Мы очистим данные об общем охвате с помощью следующего кода. После этого разделите каждый столбец по отдельности, а затем объедините в один DataFrame.

a_bucket=[]
#we loop through our response data
for i in tot_reach:
    for k in i['data']:
        a_bucket.append(k)
#we create the size of the data here and opened an empty list for each column we need
a_size=len(a_bucket)
title=[]
values=[]
Endtime=[]
#we loop through the data using the size of the our data and then append the data to individual list created
for i in range(0, a_size):     
    title.append(a_bucket[i]['title'])
    values.append([m['value'] for m in a_bucket[i]['values']])
    Endtime.append([m['end_time'] for m in a_bucket[i]['values']])
#we convert this data to a dataframe
datafram_r = {'title': title, 'Nvalues': values,'Time':Endtime}
df_R = pd.DataFrame(datafram_r)
#Some columns in this dataframe contains data which are in a single list
#We will make each data to be row by row format
rows=[]
#we will loop through the column we're interested in working with and use lambda to handle this 
_df= df_R.apply(lambda row: [rows.append([row['title'], nn]) 
                        for nn in row.Nvalues], axis=1)
df_new_1 = pd.DataFrame(rows, columns=['title','Total_No_of_Reach_per_day_from_users'])
rows_1=[]
_df= df_R.apply(lambda row: [rows_1.append([row['title'], nn]) 
                        for nn in row.Time], axis=1)
df_new_2 = pd.DataFrame(rows_1, columns=['title','Time'])
df_new_1['Time'] = df_new_2['Time']

Заключение

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

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