2016-03-28 80 views
2

Son zamanlarda, Yahoo kimlik doğrulama mekanizmasını iki adım olarak değiştirdi. Şimdi, bir yahoo sitesine giriş yaptığımda, kullanıcı adımı koydum ve sonra bir kod vermek için yahoo mobil uygulamasını açmamı ister. Alternatif olarak, bunu e-postayla alabilir veya başka bir şekilde size mesaj gönderebilirsiniz. Bunun sonucu, Yahoo sitelerine programlı olarak giriş yapmak için kullanılan kod artık çalışmıyor. Bu kod sadece giriş formuna yönlendiriyor. Kullanışlı bir dize ile ve countrycode=1 olmadan ve olmadan form değerlerinde denedim. Mobil uygulamama baktıktan sonra bir kod girerek iyiyim, ancak bu kodu girmek için beni sayfaya yönlendirmiyor. Bugünlerde R kullanarak Yahoo'ya nasıl gireceğiz?Yahoo ile giriş yap travesti

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)) 

cevap

1

Tamam, ben burada bunun cevabına rastladım. Ben rvest atmak olacağını bir uyarıya yanıt olarak httr::add_headers("Content-Length"=0) kullanıyordum: Warning message: In request_POST(session, url = url, body = request$values, encode = request$encode, : Length Required (HTTP 411).

Sonradan anlaşıldı ki ben içerik uzunluğu başlığını eklerseniz uyarıya rağmen, her şey gayet iyi ve aslında çalışmış, giriş başarısız olur. Yani, yahoo giriş yapmak benim kod şöyle bakıyor biter:

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) 

Daha sonra oturum açma kodu almak için yahoo uygulamasına gidin, adınızı gönderin ... iki aşamalı bir süreç. Gerekli yahoo şifresi yok. Giriş kodunu almak için readline kullanıyorum. İyi çalışıyor gibi görünüyor ... Giriş yaptıktan sonra fantezi futbol verilerimi kazıyorum. Bir içerik uzunluğu üstbilgisini soran uyarının sizi çalışmayan bir yola sürükleyeceği çok ilginç. Bu arada, bu durum Google'a giriş yapmaya çalışırken de geçerlidir. Uyarıyı göz ardı etmelisin ve iyi çalışıyor.

İlgili konular