是否有一个指向GitHub的链接,用于在最新版本的存储库中下载文件?

 oz法卡山英雄营 发布于 2022-12-31 19:51

使用GitHub的发布功能,可以提供下载特定版本的已发布软件的链接.但是,每次发布时,都需要更新gh页面.

有没有办法获得任何最新版软件的特定文件的链接?

例如,这将是一个静态链接:

https://github.com/USER/PROJECT/releases/download/v0.0.0/package.zip

我想要的是:

https://github.com/USER/PROJECT/releases/download/latest/package.zip

注意:此问题与GitHub最新版本之间的区别在于此问题 专门要求访问该文件,而不是GitHub最新版本页面

Putna.. 58

获取最新版本资产下载链接的Linux解决方案(仅当发布只有一个资产时才有效)

curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4

管道中的另一个grep将找到适合您的分发和体系结构的文件.对于64位Ubuntu上的[atom](https://github.com/atom/atom)文本编辑器:`curl -s https://api.github.com/repos/atom/atom/releases | grep browser_download_url | grep '64 [.] deb'| 头-n 1 | 切-d'"' - f 4` (7认同)

@maikel grepping for browser_download_url仍然适合我. (4认同)

没有browser_download_url了.你现在可以使用tarball_url.`curl -s https://api.github.com/repos/git-ftp/git-ftp/releases | grep tarball_url | 头-n 1 | 切-d'"' - f 4` (3认同)


Jaex.. 29

您可以使用GitHub Releases API执行ajax请求以获取最新版本下载URL .它还显示它何时发布以及下载次数:

function GetLatestReleaseInfo() {
  $.getJSON("https://api.github.com/repos/ShareX/ShareX/releases/latest").done(function(release) {
    var asset = release.assets[0];
    var downloadCount = 0;
    for (var i = 0; i < release.assets.length; i++) {
      downloadCount += release.assets[i].download_count;
    }
    var oneHour = 60 * 60 * 1000;
    var oneDay = 24 * oneHour;
    var dateDiff = new Date() - new Date(asset.updated_at);
    var timeAgo;
    if (dateDiff < oneDay) {
      timeAgo = (dateDiff / oneHour).toFixed(1) + " hours ago";
    } else {
      timeAgo = (dateDiff / oneDay).toFixed(1) + " days ago";
    }
    var releaseInfo = release.name + " was updated " + timeAgo + " and downloaded " + downloadCount.toLocaleString() + " times.";
    $(".download").attr("href", asset.browser_download_url);
    $(".release-info").text(releaseInfo);
    $(".release-info").fadeIn("slow");
  });
}

GetLatestReleaseInfo();

Download

为您设置默认按钮URL的版本页面(如重要的是https://github.com/ShareX/ShareX/releases/latest),所以如果浏览器不支持AJAX(或JavaScript),或者是速度太慢,获取URL,下载按钮仍然有效.

当Ajax请求完成时,此按钮的URL将自动更改为直接下载URL.

编辑:

我还制作了一个下载页面,其中显示了多个版本,您可以在此处找到:https://getsharex.com/downloads/

它的源代码:https://github.com/ShareX/sharex.github.io/blob/master/js/downloads.js

9 个回答
  • 您可以使用GitHub Releases API执行ajax请求以获取最新版本下载URL .它还显示它何时发布以及下载次数:

    function GetLatestReleaseInfo() {
      $.getJSON("https://api.github.com/repos/ShareX/ShareX/releases/latest").done(function(release) {
        var asset = release.assets[0];
        var downloadCount = 0;
        for (var i = 0; i < release.assets.length; i++) {
          downloadCount += release.assets[i].download_count;
        }
        var oneHour = 60 * 60 * 1000;
        var oneDay = 24 * oneHour;
        var dateDiff = new Date() - new Date(asset.updated_at);
        var timeAgo;
        if (dateDiff < oneDay) {
          timeAgo = (dateDiff / oneHour).toFixed(1) + " hours ago";
        } else {
          timeAgo = (dateDiff / oneDay).toFixed(1) + " days ago";
        }
        var releaseInfo = release.name + " was updated " + timeAgo + " and downloaded " + downloadCount.toLocaleString() + " times.";
        $(".download").attr("href", asset.browser_download_url);
        $(".release-info").text(releaseInfo);
        $(".release-info").fadeIn("slow");
      });
    }
    
    GetLatestReleaseInfo();
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a class="download" href="https://github.com/ShareX/ShareX/releases/latest">Download</a>
    <p class="release-info"></p>
    2022-12-31 19:52 回答
  • 获取最新版本资产下载链接的Linux解决方案(仅当发布只有一个资产时才有效)

    curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4
    

    2022-12-31 19:52 回答
  • 迟了几年,但我只是实现了一个简单的重定向来支持https://github.com/USER/PROJECT/releases/latest/download/package.zip。那应该重定向到最新的标记package.zip发布资产。希望它很方便!

    2022-12-31 19:52 回答
  • 从命令行使用curljq,检索最新版本的第一个文件:

    curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | \
      jq --raw-output '.assets[0] | .browser_download_url'
    

    2022-12-31 19:52 回答
  • 如前所述,jq对于此API和其他REST API非常有用.

    tl; dr - 更多详情如下

    假设你想要macOS发布:

    URL=$( curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
       | jq -r '.assets[] | select(.name=="atom-mac.zip") | .browser_download_url' )
    curl -LO "$URL"
    

    原子释放的解决方案

    注意每个repo可以有不同的方式来提供所需的工件,所以我将演示一个表现良好的原子.

    获取已发布资产的名称

    curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
        | jq -r '.assets[] | .name'
    
    atom-1.15.0-delta.nupkg
    atom-1.15.0-full.nupkg
    atom-amd64.deb
    ...
    

    获取所需资产的下载URL

    atom-mac下面是我通过jq获得的资产select(.name=="atom-mac.zip")

    curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
        | jq -r '.assets[] | select(.name=="atom-mac.zip") | .browser_download_url'
    
    https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip
    

    下载工件

    curl -LO "https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip"
    

    jq游乐场

    jq语法可能很难.这是一个试验jq上述内容的游乐场:https: //jqplay.org/s/h6_LfoEHLZ

    安全

    如果可能的话,您应该采取措施通过sha256sum和gpg确保下载的工件的有效性.

    2022-12-31 19:52 回答
  • 另一个使用curl和wget从最新版本页面下载单个二进制文件的Linux解决方案

    curl -s -L https://github.com/bosun-monitor/bosun/releases/latest | egrep -o '/bosun-monitor/bosun/releases/download/[0-9]*/scollector-linux-armv6' | wget --base=http://github.com/ -i - -O scollector
    

    说明:

    curl -s -L 是静默下载最新版本的HTML(在重定向之后)

    egrep -o '...' 使用正则表达式查找所需的文件

    wget --base=http://github.com/ -i - 将管道的相对路径转换为绝对URL

    -O scollector设置所需的文件名.

    -N如果文件较新但S3发出403 Forbidden错误,则可能只能添加下载.

    2022-12-31 19:52 回答
  • 使用(内部)wget获取HTML内容的解决方案,为zip文件(使用egrep)过滤它,然后下载zip文件(使用外部wget).

    wget https://github.com/$(wget https://github.com/<USER>/<PROJECT>/releases/latest -O - | egrep '/.*/.*/.*zip' -o)
    

    2022-12-31 19:52 回答
  • 只需使用以下网址之一即可下载最新版本:(例如,从boxbilling项目中获取网址):https ://api.github.com/repos/boxbilling/boxbilling/releases

    以zip格式下载最新版本:https: //api.github.com/repos/boxbilling/boxbilling/zipball

    以tarball下载最新版本:https: //api.github.com/repos/boxbilling/boxbilling/tarball

    单击其中一个URL立即下载最新版本。当我编写此行时,当前为:boxbilling-boxbilling-4.20-30-g452ad1c [.zip / .tar.gz]

    更新:在我的日志文件中找到另一个URL(请参见上面的示例) https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master

    2022-12-31 19:54 回答
  • 截至2018年5月23日,根据GitHub支持,这是不可能的

    2018年6月23日联系support@github.com,并显示以下消息:

    您能确定目前除了弄乱API之外没有其他方法吗?

    他们回答:

    感谢您与我们联系。我们建议使用API​​来获取最新版本,因为该方法稳定,有据可查,并且不会在短期内发生变化:

    https://developer.github.com/v3/repos/releases/#get-the-latest-release

    我还将在以下位置进行跟踪:https : //github.com/isaacs/github/issues/658

    没有任何依赖关系的Python解决方案

    坚固耐用:

    #!/usr/bin/env python3
    
    import json
    import urllib.request
    
    _json = json.loads(urllib.request.urlopen(urllib.request.Request(
        'https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases/latest',
         headers={'Accept': 'application/vnd.github.v3+json'},
    )).read())
    asset = _json['assets'][0]
    urllib.request.urlretrieve(asset['browser_download_url'], asset['name'])
    

    也可以看看:

    在Python中最快的HTTP GET方法是什么?

    基本的HTTP文件下载并保存到python中的磁盘上?

    还考虑预发行

    /latest没有看到预发布版本,但是由于首先/releases显示了最新版本,因此很容易做到:

    #!/usr/bin/env python3
    
    import json
    import urllib.request
    
    _json = json.loads(urllib.request.urlopen(urllib.request.Request(
        'https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases',
         headers={'Accept': 'application/vnd.github.v3+json'},
    )).read())
    asset = _json[0]['assets'][0]
    urllib.request.urlretrieve(asset['browser_download_url'], asset['name'])
    

    2022-12-31 19:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有