Как обойти блокировку 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.
3. Сформируйте список доступных прокси-серверов.
4. Далее понадобятся только IP-адрес и порт прокси сервера (обычно использую сервера с портом 3128):
5. Например, возьмем американский сервер, который из третьей строки списка IP 104.37.212.5, порт 3128. В код R необходимо направить интернет-соединение через прокси-сервер, для этого добавляем в код строку:
Sys.setenv(https_proxy="https://104.37.212.5:3128")
6. Пишем код обращения к API (пример — чуть дальше).
7. Добавляем строку для отключения интернет-соединения от прокси-сервера:
Sys.unsetenv("https_proxy")
8. Если прокси-сервер требует прохождения аутентификации, можете указать имя пользователя и пароль:
Sys.setenv(https_proxy="https://user:password@proxy_server:port")
9. Проверьте, установлена ли настройка соединения — введите в R консоль команду:
Sys.getenv("https_proxy")
В ответ на эту команду в консоли появится запись:
[1] "https://104.37.212.5:3128"
Это значит, что соединение через прокси установлено успешно.
Создать обращение к API Google Analytics через прокси-сервер
#Установка пакетовinstall_github('artemklevtsov/RGA')
#Подключаем пакет RGAlibrary(RGA)#ID представления из которого необходимо получить данные
ga_view_id <- "ga:1111111111"#Направляем интернет-соединение через прокси-сервер, IP
и порт которого мы получили на предыдущем шагеSys.setenv(https_proxy="https://104.37.212.5:3128")
#Аутентификация в Google Analyticsauthorize()#Запрашиваем данные из Google Analyticsga_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, подставляя в аргументы функций свои значения:
#Подключаем пакет ryandexdirectlibrary(ryandexdirect)#Получаем API токенmyToken
<- yadirGetToken()#Направляем интернет-соединение через прокси-сервер, IP
и порт которого мы получили на предыдущем шагеSys.setenv(https_proxy="
https://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 Analyticsauthorize()# ID представления
из которого необходимо получить данныеga_view_id <- "ga:1111111111"
# Перенаправляем соединение через Proxy серверgetProxy(supportsHttps = T,
country = "us", type = "http", action = "start")#
Запрашиваем данные из Google Analyticsga_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
Пример обращения к 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
Надеюсь, пост поможет вам спокойно работать в привычных сервисах, невзирая на внешние обстоятельства.
Свежее
75 ошибок при ASO-оптимизации и при анализе ее результатов
ТОП распространенных ошибок в ASO-оптимизации, которых стоит избегать
30 украинских авторских блогов в Telegram, которые точно должны быть в подписках
Самые эффективные каналы, которые пишут о бизнесе и IT
Обзор лучших сервисов email-рассылок — как выбрать
Лучший сервис email-рассылок — тот, что решает задачи вашего бизнеса. Обзор рынка, критерии выбора, опции, стоимость и тенденции развития.