r - 使用坚持()可靠地获取在线文件的最佳方法?
问题描述
我有一个树莓派,用来收集卫星数据。它需要的第一步是从http://www.celestrak.com/NORAD/elements/weather.txt获取有关卫星轨道的信息,但是 Pi 所在的 wifi 连接不可靠。我一直在使用来自 httr 的 GET() ,
satellite_data <- GET("http://www.celestrak.com/NORAD/elements/weather.txt")
但我正在寻找一个更强大的解决方案来重试,如果它失败了,每次不成功的尝试都会从几秒钟到几小时或一天后退。是我无法实时调试的远程传感器。我查看了https://purrr.tidyverse.org/reference/insistently.html但仍然不知道如何将它与 GET 一起使用。
解决方案
我做过的最好的是
possibly_get_data <- function(url, n_tries, ...){
#Set exponential back-off so that each ith request waits pause_base * 2^i
rate <- rate_backoff(pause_base = 1, max_times = n_tries)
possibly_insistent_get <- insistently(GET, rate, quiet = FALSE) %>% possibly(otherwise = NULL)
possibly_insistent_get(url, ...)
}
所以通过网络连接我得到
> library(httr)
> library(purrr)
> library(reprex)
> possibly_get_data <- function(url, n_tries, ...){
+
+ rate <- rate_backoff(pause_base = 1, max_times = n_tries)
+ possibly_insistent_get <- insistently(GET, rate, quiet = FALSE) %>% possibly(otherwise = NULL)
+
+ possibly_insistent_get(url, ...)
+ }
> satellite_data <- possibly_get_data("http://www.celestrak.com/NORAD/elements/weather.txt", 5)
> satellite_data
Response [http://www.celestrak.com/NORAD/elements/weather.txt]
Date: 2019-08-18 12:50
Status: 200
Content-Type: text/plain
Size: 9.07 kB
DMSP 5D-2 F14 (USA 131)
1 24753U 97012A 19228.95808892 .00000036 00000-0 41402-4 0 9995
2 24753 99.0314 236.6619 0008659 358.7096 1.4054 14.15859916154988
NOAA 15
1 25338U 98030A 19228.92040895 .00000033 00000-0 32688-4 0 9997
2 25338 98.7447 250.0738 0011550 73.3037 286.9410 14.25926944105431
DMSP 5D-3 F15 (USA 147)
1 25991U 99067A 19228.94325824 -.00000108 00000-0 -31378-4 0 9993
2 25991 98.9231 193.7199 0008799 249.0096 180.8141 14.16519712 17178
METEOSAT-8 (MSG-1)
...
没有连接我得到
> satellite_data <- possibly_get_data("http://www.celestrak.com/NORAD/elements/weather.txt", 5)
Error: Could not resolve host: www.celestrak.com
Retrying in 1 seconds.
Error: Could not resolve host: www.celestrak.com
Retrying in 3 seconds.
Error: Could not resolve host: www.celestrak.com
Retrying in 7 seconds.
Error: Could not resolve host: www.celestrak.com
Retrying in 1e+01 seconds.
Error: Could not resolve host: www.celestrak.com
> satellite_data
NULL
但它还没有处理来自服务器的错误响应
推荐阅读
- r - 将字符串包装成设定的行数
- python - 为什么在 Jupyter 笔记本中调用 cv2.imshow() 时出现无响应窗口
- ios - 我应该在 iOS 应用程序中手动控制代码中的 Google Admob 频率吗
- javascript - 在 Three.JS 中用鼠标在 Z 方向上画线
- node.js - 我想做一个命令,为我的机器人提供邀请链接。我的机器人是用 node.js 编写的
- amazon-cloudfront - 使用 aws r53、cloudfront 和 s3 静态网站将顶点域重定向到特定 URI
- unity3d - 在 Unity 中更改分辨率时,如何使我的 UI 文本以我的 2d 对象为中心?
- reactjs - 为什么清理 useEffect 挂钩会看到 RTKQ 的结果为 isLoading 以及如何避免该问题?
- debugging - 用 MCU 上的另一个 3.3V gpio 引脚控制 SWD 复位引脚
- python - 如果视频播放超过 3 秒,则添加观看次数