Skip to content

Instantly share code, notes, and snippets.

@petarvucetin
Created May 26, 2013 03:53
Show Gist options
  • Save petarvucetin/5651662 to your computer and use it in GitHub Desktop.
Save petarvucetin/5651662 to your computer and use it in GitHub Desktop.
Get top n pages of NugetPackages similar to Jon Galloway power shell approach see http://weblogs.asp.net/jgalloway/archive/2011/02/02/downloading-a-local-nuget-repository-with-powershell.aspx
#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\3.0\Runtime\v4.0\Type Providers\FSharp.Data.TypeProviders.dll"
#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.Services.Client.dll"
#r @"C:\Program Files (x86)\Microsoft WCF Data Services\5.0\bin\.NETFramework\Microsoft.Data.OData.dll"
open Microsoft.FSharp.Data.TypeProviders
open System.Data.Services.Client
open System.Net
open System.IO
let apiUrl = "http://packages.nuget.org/api/v1/package/"
let localDirectory = @"D:\NugetLocalCache\"
let downloadUrl id version = apiUrl + id + "/" + version
let localUrl id version = localDirectory + id + "." + version + ".nugpkg"
let myPackageList = @"D:\MyCommonNugetPackages\list.txt"
type myService = ODataService<"http://packages.nuget.org/v1/FeedService.svc/">
let top = 0
let pageSize = 40
let currentPage = 0
let provider = myService.GetDataContext()
let packages = myService.ServiceTypes.V1FeedPackage()
let getPackage (remote:string) (local:string) =
let wc = new WebClient()
wc.DownloadFile(remote, local)
let getTopPackages page =
printfn "Current page %i" page
let q = query {
for p in provider.Packages do
where (p.IsLatestVersion = true)
sortByDescending p.DownloadCount
skip (pageSize * page )
take pageSize
select p
}
q |> Seq.toList |> List.iter (fun p -> getPackage (downloadUrl p.Id p.Version) (localUrl p.Id p.Version) )
//does local folder exist?
if not (Directory.Exists(localDirectory))
then
let dir = Directory.CreateDirectory(localDirectory)
printfn "%s" (dir.ToString())
// main part of the program
[0..top] |> List.map (fun i -> getTopPackages(i)) |> ignore
printfn "Done."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment