greatwhitenorth
greatwhitenorth

Reputation: 97

httr GET operation unable to access JSON response

I am trying to access the JSON response from an API call in my R script. The API call is succesful, and I can view the JSON response in the console. However, I am unable to access any data from it.

A sample code segment is:

require(httr)

    target <- '#trump'
    sentence<- 'Donald trump has a wonderful toupe, it really is quite stunning that a man can be so refined and elegant'
    query <- url_encode(sentence)
    target <- gsub('#', '', target)
    endpoint <- "https://alchemy.p.mashape.com/text/TextGetTargetedSentiment?outputMode=json&target="
    apiCall <- paste(endpoint, target, '&text=', query, sep = '')

    resp <-GET(apiCall, add_headers("X-Mashape-Key" = sentimentKey, "Accept" = "application/json"))

    stop_for_status(resp)
    headers(resp)
    str(content(resp))
    content(resp, "text")

I followed examples in the httr quickstart guide from CRAN (here) as well as this stack.

Unfortunately, I keep getting either "unused parameters 'text' in content()" or "no definition exists for content() accepting a class of 'response.' Does anyone have any advice? PS the headers will print, and resp$content will print the raw bitstream

Upvotes: 1

Views: 1868

Answers (1)

jlhoward
jlhoward

Reputation: 59335

Expanding on the comment, you need to set the content type explicitly in the call to content(...). Since your code is not reproducible, here is an example using the Census Bureau's geocoder (which returns a json response).

library(httr)
url <- "http://geocoding.geo.census.gov/geocoder/locations/onelineaddress"
resp <-GET(url, query=list(address="1600 Pennsylvania Avenue, Washington DC",
                           benchmark=9,
                           format="json"))

json <- content(resp, type="application/json")
json$result$addressMatches[[1]]$coordinates
# $x
# [1] -77.038025
# 
# $y
# [1] 38.898735

Assuming your are actually getting a json response, and that it is well-formed, simply using content(resp, type="application/json") should work.

Upvotes: 5

Related Questions