2017-05-19 3 views
0

http://www.librarything.com/services/rest/1.1/?method=librarything.ck.getwork&isbn=9788426379696&apikey=d231aa37c9b4f5d304a60a3d0ad1dad4내가 R을 사용하여 해당 XML의 설명을 얻으려고하지만 난 힘든 시간을 그 일을하는 데 문제가

http://www.librarything.com/services/rest/1.1/?method=librarything.ck.getwork&isbn=9788426348593&apikey=d231aa37c9b4f5d304a60a3d0ad1dad4

R과 API의 XML 1.1을 얻을.

모든 XML에 매개 변수가 모두있는 것은 아니기 때문에 설명이 없기 때문에 설명의 위치를 ​​"연결"할 수 없으며 다른 매개 변수가 없기 때문에 설명의 색인이 변경 될 수 있습니다.

속성에 단어 설명이있는 xml을 "검색"하는 방법이 필요합니다.

require(stringr) 
library("rjson") 
require(XML) 
cat("\014") 
gc() 

isbn <- 9788426379696 
key <- 'd231aa37c9b4f5d304a60a3d0ad1dad4' 

descripcion_librarything <- function(isbn_num ,APIKey){ 

    url <- "http://www.librarything.com/services/rest/1.1/?method=librarything.ck.getwork&isbn=" 
    url<- paste(url,isbn_num, "&apikey=", APIKey, sep = "") 
    data <- xmlParse(url) 
    xml_data <- xmlToList(data) 
    class(xml_data) 

    #<field type="14" name="description" displayName="Description"> 

    xml_data$ltml$item$author$text 
    xml_data$ltml$item$commonknowledge$fieldList[17]$field$versionList$version$factList$fact 

    doc = xmlInternalTreeParse(url) 
    hasSentence = xpathApply(doc, "description") 
    xpathApply(doc, "description") 

    doc = xmlTreeParse(url) 
    xmlAttrs(xmlRoot(doc)[[1]][[1]][[5]][[1]][[17]]) 

    str <- null 
    return(str) 
} 

descripcion_librarything (isbn, key) 

미리 감사드립니다.

+0

찾을 수없는 상태에 유용한 무언가를 반환 할 수있는 방법을 제공합니다 EED 무엇을 반환 & & 과정 설명을 대상으로 할 수있는 방법을 제공합니다. 여기에서 그것을 삭제하십시오 (편집 이력에 남아 있습니다). 그런 다음 즉시 사이트에서 무효화하십시오. – hrbrmstr

답변

0

루프 xml 데이터 <을 통해 -이 같은 xmlToList (데이터) :

for (i in 1:length(xml_data$ltml$item$commonknowledge$fieldList)){ 
     if(xml_data$ltml$item$commonknowledge$fieldList[i]$field$.attrs['name'] == "description"){ 
      print(paste('index ',i)) 
     } 
    } 
1
library(httr) 
library(xml2) 

get_description <- function(ISBN) { 

    httr::GET("http://www.librarything.com/services/rest/1.1/", 
      query=list(method = "librarything.ck.getwork", 
         isbn = ISBN, 
         apikey = Sys.getenv("LIBRARYTHING_API_KEY"))) -> res 

    stop_for_status(res) 

    res <- content(res, as="text") 
    doc <- read_xml(res) 

    desc <- xml_find_all(doc, ".//*[@name='description']") 

    if (length(desc) > 0) { 
    xml_text(desc) # or whatever you need 
    } else { 
    "" # or whatever you want to return if not found 
    } 

} 

isbns <- c("9788426379696", "9788426348593") 

purrr::map_chr(isbns, get_description) 

그건 :

  • 그것이 포장 API
  • 는 API 키를 유지한다 스크립트 및 StackOverflow 게시물 (DELTYE & 키를 무효화)
  • 당신이
  • 방금 ​​세상을 LibraryThing은 대한 API 키를 준