Google API — сокращение URL-адресов с помощью R

Я пытаюсь использовать R для быстрого сокращения пакета URL-адресов. Документация API Google предоставляет решение ниже с использованием curl

curl https://www.googleapis.com/urlshortener/v1/url \
  -H 'Content-Type: application/json' \
  -d '{"longUrl": "http://www.google.com/"}'

Я попытался преобразовать его в R с помощью R, но я продолжаю получать сообщение «Ошибка: неверный запрос». Вот с чем я работаю.

library(RCurl)
library(RJSONIO)

postForm( "https://www.googleapis.com/urlshortener/v1/url" ,
      .params= c(data = '{"longUrl":"www.google.com"}'), 
      .opts = list( httpheader = "Content-Type: application/json",
                    ssl.verifypeer = FALSE))

person user1637000    schedule 07.06.2014    source источник
comment
Пропустите косые черты в вашем json.   -  person Thomas    schedule 07.06.2014
comment
Это сработало для вас? Если это так, вы можете опубликовать код, потому что он продолжает выдавать ту же ошибку.   -  person user1637000    schedule 08.06.2014


Ответы (2)


Вот решение, использующее httr в качестве оболочки для RCurl.

> library("httr")
> POST('https://www.googleapis.com/urlshortener/v1/url',
       add_headers("Content-Type"="application/json"),
       body='{"longUrl": "http://www.google.com/"}')
Response [https://www.googleapis.com/urlshortener/v1/url]
  Status: 200
  Content-type: application/json; charset=UTF-8
{
 "kind": "urlshortener#url",
 "id": "http://goo.gl/fbsS",
 "longUrl": "http://www.google.com/"
}
person Thomas    schedule 08.06.2014

Мне больше повезло с разбором выходных данных при использовании Rcurl + JSONIO в соответствии с предложением из https://stackoverflow.com/questions/12302941/convert-curl-code-into-r-via-the-rcurl-package

library(RCurl)
library(RJSONIO)
test <- postForm("https://www.googleapis.com/urlshortener/v1/url",
                 .opts = list(postfields = toJSON(list(longUrl = "http://www.google.com/")),
                 httpheader = c('Content-Type' = 'application/json', Accept = 'application/json'),
                 ssl.verifypeer = FALSE))
person Jacek Jońca-Jasiński    schedule 26.06.2014