如何获取最新的RStudio版本

时间:2017-09-03 11:33:49

标签: r bash xpath rstudio

我正在努力编写一个脚本,以某种方式抓取https://www.rstudio.com/products/rstudio/download/获取最新RStudio版本的数量,下载并安装它。

由于我是R程序员,我开始使用rvest包编写R脚本。我设法刮掉了RStudio服务器的下载链接,但我仍然无法获得RStudio本身。

以下是为Ubuntu获取64位RStudio服务器下载链接的R代码。

if(!require('stringr')) install.packages('stringr', Ncpus=8, repos='http://cran.us.r-project.org')
if(!require('rvest')) install.packages('rvest', Ncpus=8, repos='http://cran.us.r-project.org')

xpath<-'//code[(((count(preceding-sibling::*) + 1) = 3) and parent::*)]'
url<-'https://www.rstudio.com/products/rstudio/download-server/'
thepage<-xml2::read_html(url)
the_links_html <- rvest::html_nodes(thepage,xpath=xpath)
the_links <- rvest::html_text(the_links_html)
the_link <- the_links[stringr::str_detect(the_links, '-amd64\\\\.deb')]
the_r_uri<-stringr::str_match(the_link, 'https://.*$')
cat(the_r_uri)

不幸的是,RStudio桌面下载页面的布局完全不同,我在同样的方法不起作用。

有人可以帮我吗?我无法相信,世界上所有数据科学家都手动升级他们的RStudio!

有一个更简单的脚本版本,它读取RStudio-server的版本。 Bash版本:

RSTUDIO_LATEST=$(wget --no-check-certificate -qO- https://s3.amazonaws.com/rstudio-server/current.ver)

或R版本:

scan('https://s3.amazonaws.com/rstudio-server/current.ver', what = character(0))

但是RStudio-desktop的版本仍然无法实现。

4 个答案:

答案 0 :(得分:2)

您似乎可以从网址http://download1.rstudio.org/current.ver获取最新的稳定版本号,并且它是更新的(出于某种未知原因),至少在撰写此答案时。

$ curl -s http://download1.rstudio.org/current.ver 1.1.447

$ curl -s https://www.rstudio.org/links/check_for_update?version=1.0.0 | grep -oEi 'update-version=([0-9]+\.[0-9]+\.[0-9]+)' | awk -F= '{print $2}' 1.1.423

在此处找到:https://github.com/yutannihilation/ansible-playbook-r/blob/master/tasks/install-rstudio-server.yml

答案 1 :(得分:1)

这里有一个近乎解决方案:

https://hub.docker.com/r/rocker/rstudio-daily/~/dockerfile/

在这个用于最新版本的脚本中:

https://raw.githubusercontent.com/rocker-org/rstudio-daily/master/latest.R

您希望修改该脚本以更严格地接受它所接受的内容,即我希望这个脚本rstudio-server-1.1.355-amd64.deb而不是stretch变体。

(但你可以修改它来定位你想要的构建类型,这是每日构建,Ubuntu的RStudio Server。)

答案 2 :(得分:1)

如果您使用版本字符串查询RStudio的check_for_update,您将获得更新版本以及从何处获取该版本的URL:

https://www.rstudio.org/links/check_for_update?version=1.0.0

  

更新版本= 1.0.153&安培;更新-URL = HTTPS%3A%2F%2Fwww.rstudio.com%2Fproducts%2Frstudio%2Fdownload%2F&安培;更新消息= RStudio%201.0.153%图20是%20now%20available %20%28you%27re%20using%201.0.0%29&安培;更新紧急= 0

见这里:

https://github.com/rstudio/rstudio/blob/54cd3abcfc58837b433464c793fe9b03a87f0bb4/src/cpp/session/modules/SessionUpdates.R

如果您真的想从下载页面中删除它,那么我会在第一个href类的第一个<a>中获得<td>的{​​{1}} “下载”,然后解析“RStudio-”和“.exe”之间的三个点分隔数字。 RStudio在所有平台上发布版本,因此从Windows下载中获取它应该就足够了。

<table>

答案 3 :(得分:0)

如果有人有兴趣,这是我最终的RServer-desktop-on-Ubuntu更新脚本。它安装RStudio-desktop 64位,然后,如果Fira Console字体可用,则从http://imgur.com/a/xo3tg为RStudio应用补丁,因此连字开始工作。

#!/bin/bash
if dpkg -s rstudio >/dev/null 2>/dev/null; then
    ver=$(apt show rstudio | grep Version)
    pattern='^Version: ([0-9.]+)\s*$'
    if [[ $ver =~ $pattern ]]; then
        ourversion=${BASH_REMATCH[1]}
        netversion=$(Rscript -e 'cat(stringr::str_match(scan("https://www.rstudio.org/links/check_for_update?version=1.0.0", what = character(0), quiet=TRUE), "^[^=]+=([^\\&]+)\\&.*")[[2]])')
        if [[ $ourversion != $netversion ]]; then
            RSTUDIO_URI=$(Rscript /tmp/get_rstudio_uri.R)
        fi
        tee /tmp/get_rstudio_uri.R <<EOF
if(!require('rvest')) install.packages('rvest', repos='http://cran.us.r-project.org')
xpath='.downloads:nth-child(2) tr:nth-child(5) a'
url = "https://www.rstudio.com/products/rstudio/download/"
thepage<-xml2::read_html(url)
cat(html_node(thepage, xpath) %>% html_attr("href"))
EOF
        RSTUDIO_URI=$(Rscript /tmp/get_rstudio_uri.R)

        wget -c --output-document /tmp/rstudio.deb $RSTUDIO_URI 
        sudo dpkg -i /tmp/rstudio.deb
        rm /tmp/rstudio.deb
        rm /tmp/get_rstudio_uri.R

        if fc-list |grep -q FiraCode; then
            if !grep -q "text-rendering:" /usr/lib/rstudio/www/index.htm; then
                sudo sed -i '/<head>/a<style>*{text-rendering: optimizeLegibility;}<\/style>' /usr/lib/rstudio/www/index.htm
            fi
        fi
    fi
fi