План прост:
1. Поставить Mysql на машину
2. Создать там нужное бд и таблицы
3. Загрузить данные за позавчерашний день через R
4. Настроить скрипт загрузки с динамическими датами http://sotnik.biz.ua/blog/ppc_in_power_bi/
5. Запустить по крону его через 5 минут https://2steps.pro/r-script-launching-with-task-scheduler.html
6. Если все ок, то ставим крон на 9.30
1. Поставить Mysql на машину
Скачиваем mysql-installer-web-community-5.7.19.0 и следуем установщику. Если что, то гуглим.
Чтобы войти в мускул:
mysql -u root -p
2. Создать там нужное бд и таблицы
Так как кодировка R и винды cp1251, то нужно создать дб в этой же кодировки.
Важно чтобы кодировка в скрипте и в БД была одинаковая. Проверить кодировку в R можно так Sys.getlocale()
CREATE DATABASE organic_data1 CHARACTER SET cp1251 COLLATE cp1251_general_ci;
А затем нужные таблицы:
CREATE TABLE ga_organic_data( date DATE, sourceMedium VARCHAR(256), landingPagePath VARCHAR(256), deviceCategory VARCHAR(256), hostname VARCHAR(256), sessions INTEGER, transactions INTEGER, transactionRevenue DECIMAL );
3. Загрузить данные за позавчерашний день через R
Коннектимся к бд и загружаем:
conMySQL1 <- dbConnect(MySQL(), dbname = "organic_data1", user = "root", password = "makarovs", host = "localhost",port=3306) dbWriteTable (conMySQL1, "ga_organic_data", ga_organic_data, row.names = FALSE, append = TRUE)
Сложность была в определении hostname и имени пользователя. Помогла статья: https://stackoverflow.com/questions/4093603/how-do-i-find-out-my-mysql-url-host-port-and-username
4. Настроить скрипт загрузки с динамическими датами
library(RMySQL) library("googleAuthR") library("googleAnalyticsR") library("jsonlite") conMySQL1 <- dbConnect(MySQL(), dbname = "organic_data1", user = "root", password = "makarovs", host = "localhost",port=3306) old_data <- dbReadTable(conMySQL1, "ga_organic_data") last_date <- max(old_data$date) start_date <- as.character.Date(as.Date(last_date)+1) end_date <- as.character.Date(Sys.Date() - 1) # Сюда вставить то, что в json-файле. Обязательно заменить обратный слеш \ на двойной \\ json <- '{ } ' # функция для авторизации gar_auth_service <- function(json, scope = getOption("googleAuthR.scopes.selected")){ endpoint <- httr::oauth_endpoints("google") secrets <- jsonlite::fromJSON(json) scope <- paste(scope, collapse=" ") if(is.null(secrets$private_key)){ stop("$private_key not found in JSON - have you downloaded the correct JSON file? (Service Account Keys, not service account client)") } google_token <- httr::oauth_service_token(endpoint, secrets, scope) Authentication$set("public", "token", google_token, overwrite=TRUE) Authentication$set("public", "method", "service_json", overwrite=TRUE) return(invisible(Authentication$public_fields$token)) } # авторизируемся gar_auth_service( json = json, scope = "https://www.googleapis.com/auth/analytics" ) # id представления GA ga_view <- '46195197' df <- dim_filter("sourceMedium","REGEXP","(google / organic|yandex / organic)") fc <- filter_clause_ga4(list(df)) # Выгружаем данные ga_organic_data <- google_analytics_4(ga_view, date_range = c(start_date,end_date), dimensions=c('date','sourceMedium','landingPagePath','deviceCategory','hostname'), metrics = c('sessions','transactions','transactionRevenue'), dim_filters = fc, anti_sample = TRUE) dbWriteTable (conMySQL1, "ga_organic_data", ga_organic_data, row.names = FALSE, append = TRUE) dbDisconnect(conMySQL1)
5. Запустить по крону его через 5 минут