Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GitHub Api download zip or tarball link

There was a good link here about how the zip/tarball string is created

When I download a zip from github, what is the hex string at the end of the file name represent?

But I'm looking at the GitHub APIv3 and I was curious if I'm missing something.

  1. Is there a way to get the zip/tarball link via an API call?

  2. If not, is there a way I can build that string without using the git binary or library? Meaning, can I use various API calls to pull out th data a need and assemble to URL I need?

I know the second question is a little unreasonable for stackoverflow and this is a bit of a fun project for me, so I would prefer on the second question if you just kind of nudged me in the right direction as opposed to throwing down a code snippet. Or just told me if it was possible.

like image 808
mkly Avatar asked Dec 04 '11 17:12

mkly


People also ask

How do I download a ZIP file from GitHub?

When downloading materials to your laptop, it is easiest to download the entire repository. To do this, go to the GitHub page for the workshop, click on the green Code button, then download the repository as a ZIP file. The filename may be different than what's in the picture. Find the downloaded .

What is a tarball download?

Github provides a feature of downloading entire repository from a single URL (a tarball). The downloaded repository file is combined into a single file using Linux tar command. The archive file is also compressed using gzip compression.


2 Answers

You can wget your way out of the GitHub repo to get a tar file (archive):

wget --no-check-certificate https://github.com/User/repo/archive/master.tar.gz  # better, if the certificate authorities are present: wget https://github.com/User/repo/archive/master.tar.gz 

will get you a file named 'master' from the user 'User''s repo 'repo'.

The updated V3 API url is:

https://api.github.com/repos/User/repo/:archive_format/:ref # # two possibilities for fomat: https://api.github.com/repos/User/repo/tarball/master https://api.github.com/repos/User/repo/zipball/master  # from github example: $curl -L https://api.github.com/repos/octokit/octokit.rb/tarball > octokit.tar.gz 

You can then tar xpvf master, getting the full archive. It will create a directory following the naming convention described in the question you mentioned.

No git binary is needed to get an archive from GitHub, thanks to their download service "Nodeload".


ligemer proposed in an edit the following example:

Edit 2016-08-25 - Shell Example With Wget, Variables, and Untar:

#!/bin/bash -ex  # arguments: # token = $1 # organization = $2 # repo name = $3 # branch = $4  wget --header="Authorization: token ${1}" --header="Accept:application/vnd.github.v3.raw" -O - https://api.github.com/repos/${2}/${3}/tarball/${4} | tar xz 

Call via:

$ scriptName.sh token my-organization site.com master 

The command above will download and extract the Github folder to the same directory as the script.


Diogo Quintela suggests in the comments:

The following example allow the download, extract and cut the top level directory

curl -L https://api.github.com/repos/octokit/octokit.rb/tarball | tar xz --strip=1  
like image 57
VonC Avatar answered Nov 01 '22 04:11

VonC


The syntax is described in the docs:

GET /repos/:owner/:repo/:archive_format/:ref 

The following example URL will point (via a 302 redirect) to a zip archive of master in the hadley/devtools repo:

https://api.github.com/repos/hadley/devtools/zipball/master

(The other option for archive_format is tarball.)

I have no idea since when this API is available.

like image 36
krlmlr Avatar answered Nov 01 '22 04:11

krlmlr