2016-03-28 3 views
2

В последнее время Yahoo изменила свой механизм аутентификации на два шага. Итак, теперь, когда я заходил на сайт yahoo, я ввел свое имя пользователя, а затем он попросил меня открыть мое мобильное приложение yahoo, чтобы дать ему код. Кроме того, вы можете отправить электронное сообщение или текст другим способом. Результатом этого является то, что код, который раньше работал для программного входа на сайты Yahoo, больше не работает. Этот код просто перенаправляется на форму входа. Я пробовал с и без строки useragent и с и без countrycode=1 в значениях формы. Я в порядке с вводом кода после просмотра моего мобильного приложения, но он не пересылает меня на страницу, чтобы ввести этот код. Как мы входим в Yahoo в эти дни с помощью R?Yahoo login using rvest

url <- "http://mail.yahoo.com" 
uastring <- "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 

s <- rvest::html_session(url, httr::user_agent(uastring)) 
s_form <- rvest::html_form(s)[[1]] 
filled_form <- rvest::set_values(s_form, username="myusername", 
           passwd="mypassword") 
out <- rvest::submit_form(session=s, filled_form, submit="signin", 
          httr::add_headers("Content-Length"=0)) 

ответ

1

Хорошо, я наткнулся на ответ здесь. Я был с помощью httr::add_headers("Content-Length"=0) в ответ на предупреждение, что rvest бы бросить: Warning message: In request_POST(session, url = url, body = request$values, encode = request$encode, : Length Required (HTTP 411).

Как оказалось, несмотря на предупреждение, все работало хорошо, и на самом деле, если я добавить заголовок длины содержимого, то Логин не удается. Итак, мой код для входа в Yahoo заканчивает тем, как это:

username <- "[email protected]" 
    league_id <- "some league id to complete the fantasy football url" 

    uastring <- "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" 
    url <- "http://football.fantasysports.yahoo.com/f1/" 
    url <- paste0(url, league_id) 

    s <- rvest::html_session(url, httr::user_agent(uastring)) 
    myform <- rvest::html_form(s)[[1]] 
    myform <- rvest::set_values(myform, username=username) 
    s <- suppressWarnings(rvest::submit_form(s, myform, submit="signin")) 
    s <- rvest::jump_to(s, s$response$url) 
    myform <- rvest::html_form(s)[[1]] 
    if("code" %in% names(myform$fields)){ 
    code <- readline(prompt="In your Yahoo app, find and click on the Account Key icon.\nGet the 8 character code and\nenter it here: ") 
    }else{ 
    print("Unable to login") 
    return(NULL) 
    } 
    myform <- rvest::set_values(myform, code=code) 
    s <- suppressWarnings(rvest::submit_form(s, myform, submit="verify")) 
    if(grepl("authorize\\/verify", s$url)){ 
    print("Wrong code entered, unable to login") 
    return(NULL) 
    }else{ 
    print("Login successful") 
    } 
    s <- rvest::jump_to(s, s$response$url) 

Это двухступенчатый процесс ... Добавить свое имя пользователя, затем перейдите в Yahoo приложение, чтобы получить код для входа. Вам не нужен пароль yahoo. Я использую readline, чтобы получить код входа. Кажется, хорошо работает ... Я могу очистить свои фэнтезийные футбольные данные после завершения регистрации. Очень любопытно, что предупреждение с запросом заголовка длины контента приведет вас к следующему пути, который не работает. Кстати, эта же ситуация применяется при попытке войти в Google. Вы должны игнорировать предупреждение, и он отлично работает.