Расскажите о вашей задаче
Аналитика

Как обойти блокировку API запрещенных сервисов с помощью скриптов R

Несмотря на блокировку различных сервисов, онлайн-бизнесу они жизненно необходимы, особенно — их интеграция по API. В этой статье я расскажу, как обойти блокировку API запрещенных сервисов в скриптах R и продолжать использовать пакеты ryandexdirect, rvkstat, rmytarget, googlesheets, RGA и bigrquery. Это позволит использовать API Google Analytics, Google Sheets, Google BigQuery (актуально для РФ) и ВК, Яндекс.Директ, myTarget (актуально для Украины).

Обход блокировки в полуавтоматическом режиме

1. Найдите любой сервис, генерирующий списки доступных прокси (например, https://hidemy.name/ru/proxy-list/).

2. Выберите в фильтре тип прокси, поддерживающий HTTPS.

Выберите в фильтре тип прокси, поддерживающий HTTPS

3. Сформируйте список доступных прокси-серверов.

4. Далее понадобятся только IP-адрес и порт прокси сервера (обычно использую сервера с портом 3128):

Далее понадобятся только IP-адрес и порт прокси сервера (обычно использую сервера с портом 3128)

5. Например, возьмем американский сервер, который из третьей строки списка IP 104.37.212.5, порт 3128. В код R необходимо направить интернет-соединение через прокси-сервер, для этого добавляем в код строку:

Sys.setenv(https_proxy="http://104.37.212.5:3128")

6. Пишем код обращения к API (пример — чуть дальше).

7. Добавляем строку для отключения интернет-соединения от прокси-сервера:

Sys.unsetenv("https_proxy")

8. Если прокси-сервер требует прохождения аутентификации, можете указать имя пользователя и пароль:

Sys.setenv(https_proxy="http://user:password@proxy_server:port")

9. Проверьте, установлена ли настройка соединения — введите в R консоль команду:

Sys.getenv("https_proxy")

В ответ на эту команду в консоли появится запись:

[1] "http://104.37.212.5:3128"

Это значит, что соединение через прокси установлено успешно.

Создать обращение к API Google Analytics через прокси-сервер

#Установка пакетов
install_github('artemklevtsov/RGA')

#Подключаем пакет RGA
library(RGA)


#ID представления из которого необходимо получить данные
ga_view_id <- "ga:1111111111"

#Направляем интернет-соединение через прокси-сервер, IP и порт которого мы получили на предыдущем шаге
Sys.setenv(https_proxy="http://104.37.212.5:3128")

#Аутентификация в Google Analytics
authorize()

#Запрашиваем данные из Google Analytics
ga_data <-get_ga(profileId  = ga_view_id,
                 start.date = "8daysAgo",
                 end.date   = "yesterday",
                 dimensions = "ga:date",
                 metrics    = "ga:impressions,
                               ga:adClicks,
                               ga:adCost,
                               ga:sessions,
                               ga:bounces,
                               ga:transactions")



#Отключаемся от прокси-сервера
Sys.unsetenv("https_proxy")

Создать обращение к API Яндекс.Директ через прокси-сервер

Перед использованием приведенного ниже кода необходимо установить пакеты devtools и ryandexditrect:

install.packages("devtools")
library(devtools)
install_github('selesnow/ryandexdirect')

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

Теперь можно использовать следующий код на языке R, подставляя в аргументы функций свои значения:

#Подключаем пакет ryandexdirect
library(ryandexdirect)

#Получаем API токен
myToken <- yadirGetToken()

#Направляем интернет-соединение через прокси-сервер, IP и порт которого мы получили на предыдущем шаге
Sys.setenv(https_proxy="http://104.37.212.5:3128")

#Обращаемся к API Яндекс.Директ
My_report <- yadirGetReport(ReportType = "CAMPAIGN_PERFORMANCE_REPORT", 
                           DateRangeType = "CUSTOM_DATE", 
                           DateFrom = '2017-01-01', 
                           DateTo = '2017-01-31', 
                           Login = <YourLogin>, 
                           Token = myToken)

#Отключаемся от прокси-сервера
Sys.unsetenv("https_proxy")

Как автоматизировать получение IP и порта прокси-сервера?

Если установить ещё несколько пакетов и немного дописать код, процесс получения IP-адреса и порта бесплатного прокси-сервера можно полностью автоматизировать.

Дело в том, что сервис GimmeProxy API предоставляет возможность загрузки IP адреса и порта с помощью API.

Во-первых, необходимо установить пакеты RCurl и jsonlite:

#Установка пакетов
if(!"RCurl" %in% installed.packages()[,1]){install.packages("RCurl")}
if(!"jsonlite" %in% installed.packages()[,1]){install.packages("jsonlite")}

#Подключаем пакеты
library(RCurl)
library(jsonlite)
library(ryandexdirect)

#Запрашиваем IP-адрес и порт
proxy_list_raw <- getURL("https://gimmeproxy.com/api/getProxy?supportsHttps=true&port=3128")

#Сохраняем IP-адрес и порт в переменную для использования в коде
proxy_ip_port <- fromJSON(proxy_list_raw)$ipPort



#Направляем интернет-соединение через прокси-сервер
Sys.setenv(https_proxy=proxy_ip_port)

#Получаем API токен
myToken <- yadirGetToken()

#Обращаемся к API Яндекс.Директ
My_report <- yadirGetReport(ReportType = "CAMPAIGN_PERFORMANCE_REPORT", 
                           DateRangeType = "CUSTOM_DATE", 
                           DateFrom = '2017-01-01', 
                           DateTo = '2017-01-31', 
                           FieldNames = c("CampaignName","Impressions","Clicks"), 
                           Login = <YourLogin>, 
                           Token = myToken)

#Отключаемся от прокси-сервера
Sys.unsetenv("https_proxy")

Вначале по API мы запрашиваем IP-адрес и порт прокси-сервера с помощью функции getURL из пакета Curl, далее конвертируем её в объект-лист с помощью функции fromJSON, доступной в пакете jsonlite, и, наконец, сохраняем IP-адрес и порт в переменную proxy_ip_port. Затем эту переменную используем в коде в качестве аргумента функции Sys.setenv.

Как вы понимаете, все бесплатное работает не так стабильно, как хотелось бы, поэтому в качестве недорогой но стабильно работающей и значительно более гибкой в настройках альтернативы рекомендую купить доступ к API у HideMy.name. Запросите доступ к API в этойформе.

Актуальную стоимость доступа к API можно узнать по этой ссылке.

Как автоматизировать получение IP-адреса, порта прокси-сервера и запуск необходимых настроек с помощью пакета getProxy

Код из предыдущего пункта — рабочий, он полезен для понимания, как использовать любое API, с помощью которого можно получить IP и порт прокси-сервера.

Чтобы упростить работу с бесплатными сервисами, предоставляющими IP и порт прокси-серверов, я написал пакет getProxy. С его помощью вы в одной строке кода можете автоматически запрашивать IP-адрес и порт прокси, применять к запросу фильтры по порту, странам и типу прокси-сервера, а также сразу внедрять полученные настройки.

На данный момент пакет содержит всего одну функцию getProxy. Функция использует два бесплатных API-сервиса: gimmeproxy.com и getproxylist.com, обращаясь к ним за IP и портом публично доступных и бесплатных прокси-серверов.

Установка пакета getProxy

Установите пакет из репозитория GitHub:

if(!"devtools" %in% installed.packages()[,1]){install.packages("devtools")}
library(devtools)
install_github("selesnow/getProxy")

Аргументы функции getProxy

  • country — код страны в формате ISO 3166-1 alpha-2. Коды всех стран можно найти здесь.
  • notCountry — код страны, по которой не надо запрашивать настройки прокси-сервера, в формате ISO 3166-1 alpha-2.
  • supportsHttps — логическое значение TRUE или FALSE, используется для фильтрации прокси-серверов по поддержке протокола https.
  • port — номер порта для фильтрации прокси-серверов.
  • type — тип протокола прокси-сервера, поддерживает возможные значения «http», «socks4», «socks5».
  • action — действие, которое необходимо выполнить: start, чтобы получить и сразу направить интернет-соединение через прокси-сервер, get — если хотите получить IP-адрес и порт прокси-сервера, но не применять эти настройки, stop — если хотите отключиться от прокси-сервера.

Пример использования функции getProxy

Чтобы автоматизировать процесс получения IP-адреса и порта прокси-сервера и сохранения его в объект без перенаправления интернет-соединения, достаточно в аргументе action установить значение get.

prox_ip_and_port <- getProxy(port = "3128", country = "RU", action = "get")

Если хотите получить IP-адрес и порт прокси-сервера, а также одновременно применить полученные настройки, в аргумент action передайте значение start.

prox_ip_and_port <- getProxy(port = "3128", country = "RU", supportsHttps = TRUE, action = "start")

Если необходимо отключиться от прокси-сервера, достаточно передать в аргумент action значение stop.

getProxy(action = "stop")

Пример обращения к API Google Analytics через прокси-сервер с помощью пакета getProxy

# подключаем библиотеки
library(getProxy)
library(RGA)

# аутентификация в Google Analytics
authorize()

# ID представления из которого необходимо получить данные
ga_view_id <- "ga:1111111111"

# Перенаправляем соединение через Proxy сервер
getProxy(supportsHttps = T, 
         country = "us", 
         type = "http", 
         action = "start")

# Запрашиваем данные из Google Analytics
ga_data <-get_ga(profileId  = ga_view_id,
                 start.date = "8daysAgo",
                 end.date   = "yesterday",
                 dimensions = "ga:date",
                 metrics    = "ga:impressions,
                               ga:adClicks,
                               ga:adCost,
                               ga:sessions,
                               ga:bounces,
                               ga:transactions")

# Отключаемся от Proxy сервера
getProxy(action = "stop")

Ранее я описывал дополнительные примеры кода на на языке R по работе с API Google Analytics.

Пример обращения к API Яндекс.Директ через прокси-сервер с помощью пакета getProxy

Перед запуском приведенного ниже кода у вас уже должны быть установлены пакеты ryandexdirect и getProxy.

#Подключаем пакеты
library(ryandexdirect)
library(getProxy)

#Запрашиваем IP-адрес и порт и применяем полученные настройки
getProxy(port = "3128", country = "RU", supportsHttps = TRUE, action = "start")

#Получаем API токен
myToken <- yadirGetToken()

#Обращаемся к API Яндекс.Директ
My_report <- yadirGetReport(ReportType = "CAMPAIGN_PERFORMANCE_REPORT", 
                           DateRangeType = "CUSTOM_DATE", 
                           DateFrom = '2017-01-01', 
                           DateTo = '2017-01-31', 
                           FieldNames = c("CampaignName","Impressions","Clicks"), 
                           Login = <YourLogin>, 
                           Token = myToken)

#Отключаемся от прокси-сервера
getProxy(action = "stop")

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

Выводы

Для обхода блокировки доступа к API в ваши скрипты на языке R достаточно добавить всего две строки и использовать функции Sys.setenv и Sys.unsetenv.

Немного дописав скрипт, вы сможете беспрепятственно получать данные из API необходимых сервисов. В большинстве случаев будет достаточно бесплатных API-сервисов, для работы с которыми я написал пакет getProxy.

Читайте также о методах использования языка R в интернет-маркетинге.

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

25
6
0
Обнаружили ошибку? Выделите ее и нажмите Ctrl + Enter.

Комментарии (0)

Последние комментарии

    Чтобы оставить комментарий, нужно войти

    Подписаться

    на самую полезную рассылку по интернет-маркетингу

    Самое

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