You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在learnr::tutorial markdown中导入帕尔默站最新摄像头图像?

解决learnr教程中插入帕尔默站实时摄像头图片的问题

我之前也碰到过类似的动态摄像头图片在R Markdown/learnr里无法正常显示的情况,帮你梳理下问题根源和可行的解决方案:

问题背后的原因

你用的图片URL带了动态参数(?=92056851.6281),这是网站用来规避浏览器缓存的随机戳——固定用这个参数的话,要么显示旧的缓存图,要么随着参数失效直接加载失败;另外部分网站会设置防盗链策略,直接引用外部图片URL可能被服务器拦截。

具体解决方案

方案1:用HTML标签+动态时间戳强制刷新

learnr支持直接嵌入HTML,我们可以手动添加时间戳参数,让每次打开教程时都请求最新的画面:

<img src="https://www.usap.gov/videoclipsandmaps/SouthPoleWebcam/Pal00095.jpg?r=<!--%20= Sys.time() %20-->" 
     alt="南极洲帕尔默站实时摄像头画面" 
     style="width: 100%;" />

这里的<!--%20= Sys.time() %20-->会被knitr解析为当前时间戳,每次加载页面都会生成新的参数,确保拿到最新的摄像头图像。

方案2:用R代码动态生成图片元素

如果更习惯用R代码控制,可以在learnr的代码块中生成带时间戳的图片标签,同时关闭代码输出(echo=FALSE):

library(htmltools)

# 生成带时间戳的图片链接,避免缓存
img_url <- paste0(
  "https://www.usap.gov/videoclipsandmaps/SouthPoleWebcam/Pal00095.jpg",
  "?r=", as.integer(Sys.time())  # 用整数时间戳作为参数
)

# 生成HTML图片元素
tags$img(
  src = img_url,
  alt = "南极洲帕尔默站实时摄像头画面",
  width = "100%"
)

把这段代码放在{r, echo=FALSE}的代码块中,learnr会自动渲染出最新的图片。

方案3:临时下载图片再显示(应对防盗链)

如果前两种方法因为防盗链无法加载,可以先把图片临时下载到本地,再插入到教程中:

# 创建临时文件存储图片
temp_img <- tempfile(fileext = ".jpg")

# 下载最新图片(mode="wb"确保二进制下载正确)
download.file(
  url = "https://www.usap.gov/videoclipsandmaps/SouthPoleWebcam/Pal00095.jpg",
  destfile = temp_img,
  mode = "wb",
  quiet = TRUE
)

# 插入图片
knitr::include_graphics(temp_img)

这个方法的缺点是每次加载页面都要下载图片,可能有轻微延迟,但能绕过大部分防盗链限制。

内容的提问来源于stack exchange,提问作者Silviculturalist

火山引擎 最新活动