Как установить куки для всей сессии R? - PullRequest
0 голосов
/ 27 ноября 2018

Я извлекаю данные о погоде с помощью пакета weatherData, но нет параметров для указания единиц измерения.Некоторое время код работал нормально, собирая данные в метрических единицах, но иногда он прекращал работать и извлекал данные в имперских единицах.

Я выяснил, что проблема в файлах cookie сайта и не имеет ничего общего с пакетом.Пакет печатает URL-адрес, с которого он загружает данные, поэтому я использовал его для экспериментов.При загрузке URL с указанными файлами cookie данные выглядят нормально.

(единицы измерения можно увидеть в названиях столбцов)

# Installing and loading packages
install.packages("readr")
install.packages("httr")
library(readr)
library(httr)

# The url for the data
url<-"https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=ILIMBURG179&month=11&day=6&year=2018&dayend=27&monthend=11&yearend=2018&graphspan=custom&format=1"

# Getting the data with cookies
response <- GET(url, set_cookies(`Units` = "metric"))

# Reading and printing the data 
# (don't mind the weird empty lines, 
# the data cleaning is dorne in the package)
(df <- read_csv(content(x = response,as = 'text', encoding = "UTF-8")))
# Notice the Temperature in Celcius 

Однако без файлов cookie

# Getting the data WITHOUT cookies
response <- GET(url)

# Reading and printing the data 
 (df <- read_csv(content(x = response,as = 'text', encoding = "UTF-8")))
# Notice the temperature in Fahrenheit

Мой вопрос: как я могу установить файлы cookie таким образом, чтобыПакет использует их при извлечении данных?Вот фактический пакет и функция для загрузки данных.

# installing and loading the package
install_github("Ram-N/weatherData")
library(weatherData)

# Pulling weather data for given station
(dat <- getWeatherForDate(station_id = "ILIMBURG179",
              start_date = "2018-11-06", 
              end_date = Sys.Date(), 
              station_type = "ID", 
              opt_detailed = F, 
              opt_all_columns = T))

Я проверил исходный код пакета, но я не знаком с использованным методом загрузки данных.Я считаю, что он использует функцию curl().Единственное решение, которое я могу придумать, - это изменить пакет и установить куки где-нибудь, куда загружаются данные.

...