Трудности пи работе с DoSNOW
falkonua opened this issue · 8 comments
Алексей, приветствую
Прочитал статью на Харбе https://habr.com/ru/post/437078/?fbclid=IwAR1d9noUkbdfAeeLAibngszzBqLvYwrg_Q5F1ANLSrowrMXCW0DIbDBsOro#paket-dosnow-i-osobennosti-raboty-v-mnogopotochnom-rezhime
Немного скорректировал код для работы с агентским аккаунтом
cl <- makeCluster(4)
registerDoSNOW(cl)
res2 <- data.frame()
res2 <- foreach(login=Logins$Klient, setwd("C:/test"), packages = "ryandexdirect", .combine= 'rbind', .inorder=F ) %do% {cbind(yadirGetKeyWords(AgencyAccount = AgencyAccountList), login)
}
stopCluster(cl)
На выходе получаю вот такую ошибку
res2 <- foreach(login=Logins$Klient, setwd("C:/test"), packages = "ryandexdirect", .combine= 'rbind', .inorder=F ) %do% {cbind(yadirGetKeyWords(AgencyAccount = AgencyAccountList), login)
- }
Load token from C:/test/хххххххх.yadirAuth.RData
Token expire in 117 days
ProcessingError in { :
task 1 failed - "Некорректный запрос - В HTTP-заголовке Client-Login необходимо указать логин рекламодателя"
Подскажите что я делаю не так?
Может есть возможность поделиться примером рабочего кода?
Добрый вечер, при работе с агентским аккаунтом в AgencyAccount надо передать логин агетского аккаунта, он будет статичен, а в аргумент Login уже передавать по очереди логины клиетских аккаунтов из счётчика logins, если эта подсказка не поможет то утром накидаю вам пример кода.
Добрый вечер,я так и делаю использую следующий код
AgencyAccountList <- "agency_Login"
и использую в этой части кода
%do% {cbind(yadirGetKeyWords(AgencyAccount = AgencyAccountList)
Если вас не затруднит накидайте пожалуйста пример кода, буду очень благодарен
Приветвую ещё раз, вот пример кода, единственное подствьте свои значения TokenPath и AgencyAccount.
library(doSNOW)
library(foreach)
library(ryandexdirect)
# авторизация под агентским аккаунтом
yadirAuth(Login = "логин агентского аккаунта",
TokenPath = "путь к папке где будет хранится файл с полученными учётными данными")
# получаем список клиентов из агентского аккаунта
clients <- yadirGetClientList(AgencyAccount = "логин агентского аккаунта",
TokenPath = "путь к папке где будет хранится файл с полученными учётными данными")
# получаем логины активных клиентов
client_logins <- clients$Login[clients$StatusArch == "NO"]
cl <- makeCluster(4)
registerDoSNOW(cl)
res2 <- data.frame()
res2 <- foreach(login = client_logins,
.combine= "rbind",
.inorder=F ) %dopar% {kw <- ryandexdirect::yadirGetKeyWords(AgencyAccount = "логин агентского аккаунта",
Login = login,
TokenPath ="путь к папке где будет хранится файл с полученными учётными данными")
# проверяем получены ли ключевые слова
if ( nrow(kw) > 0) {
# если получены добавляем логин клиента
kw <- cbind(kw, Client = login) }
else {
# если не получены добавляем пустой столбец, для сохранения структуры данных
kw <- cbind(kw, Client = character(0))
}
}
}
stopCluster(cl)
Если всё получилось прошу закрыть тикет.
Алексей, благодарю.
На сейчас вот такая ошибка
https://drive.google.com/folderview?id=11iV2JshKpmx-V6T0bdacTiLmvZKtSWmT
Скрин добавил на гугл диск
Какая то проблема с 3им логином, так с ходу разобраться невозможно, надо отдельно по нему запрашивать список ключей и разбираться, как вариант просто пропустите его вот так login = client_logins[-3]
О том что проблема именно с ним видно из сообщеня об ошибке, Task3.
Если будут ещё какие то подобные ошибке тоже пробуйте исключать эти аккаунты client_logins[-c(3,6,9)]
И так далее.
Все заработало благодарю за помощь.
А возможно таким образом получать другие параметры: Клики, Показы и т.д?
Рад, что у вас получилось разобраться.
Конечно, таким образом можно что угодно получить, но дело в том, что со статисктй все проще, используйте функцию yadirGerReport
, в аргумент Login вы там и так можете передать вектор из логинов подчиненных аккаунтов, в аргумент AgencyAccount логин агентского аккаунта, т.е. если вам не нужны именно параллельные вычисления а просто собрать данные из подчиненных аккаунтов в одну таблицу то тут даже велосипед не придётся изобретать.
Да, мне нужно собрать данные из пары сотен подчиненных аккаунтов в одну таблицу.
Буду тестировать