Snippets

Tuomas Hietanen Fetch GitHub download count for a file in a repo

Created by Tuomas Hietanen
//GitHub has a public JsonApi to expose file download count.

//#r "FSharp.Data.dll"
open FSharp.Data
open System

[<Literal>]
let projectrepo = "https://api.github.com/repos/fsprojects/paket/releases"

type RepoData = JsonProvider<projectrepo>

let items = RepoData.Load projectrepo

/// Fetch download count per day:
/// [|("2017-07-21", 6170); ("2017-07-20", 1043); ... |]
let fetchDownloadCountFor filename =
    items 
    |> Array.map(fun pkg ->
        pkg.Assets 
        |> Array.filter(fun a -> a.BrowserDownloadUrl.EndsWith("/"+filename))
        |> Array.map(fun a -> a.CreatedAt.ToString("yyyy-MM-dd"), a.DownloadCount)
    ) |> Array.concat
    |> Array.groupBy fst
    |> Array.map(fun (k,v) -> k, (v |> Array.sumBy snd))
    
/// Data start day and total count.
/// ("2017-07-07", 36158)
let all =
    let daily = fetchDownloadCountFor "paket.exe" 
    let from = daily |> Array.minBy fst |> fst
    let total = daily |> Array.sumBy snd
    from, total

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.