selesnow/ryandexdirect

Трудности пи работе с 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 логин агентского аккаунта, т.е. если вам не нужны именно параллельные вычисления а просто собрать данные из подчиненных аккаунтов в одну таблицу то тут даже велосипед не придётся изобретать.

Да, мне нужно собрать данные из пары сотен подчиненных аккаунтов в одну таблицу.
Буду тестировать