Guest User

Untitled

a guest
Mar 26th, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. param(
  2.     [PSCredential]
  3.     $Credential
  4. )
  5.  
  6. $headers = @{}
  7. if($Credential)
  8. {
  9.     $networkCredential = $Credential.GetNetworkCredential()
  10.     $user = $networkCredential.Username
  11.     $pass = $networkCredential.Password
  12.  
  13.     $pair = "${user}:${pass}"
  14.  
  15.     $bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
  16.     $base64 = [System.Convert]::ToBase64String($bytes)
  17.     $basicAuthValue = "Basic $base64"
  18.     $headers = @{ Authorization = $basicAuthValue }    
  19. }
  20.  
  21. $last = 0
  22. if(Test-Path repositories.csv)
  23. {
  24.     $lastItem = Get-Content repositories.csv -Tail 1 | ConvertFrom-Csv -Header Id,Name,html_url,description,languages
  25.     $last = $lastItem.Id
  26. }
  27.  
  28. function Ensure-RateLimit
  29. {
  30.     do
  31.     {
  32.         $limit = (Invoke-RestMethod -uri "https://api.github.com/rate_limit" -Headers $headers).Rate
  33.        
  34.         if(([int] $limit.Remaining) -lt 10)
  35.         {
  36.             Write-Progress ("Waiting. Rate limit resets in: " +
  37.                 ([System.DateTimeOffset]::FromUnixTimeSeconds($limit.Reset).ToLocalTime().DateTime - (Get-Date)))
  38.             Start-Sleep -Seconds 60
  39.         }
  40.     } while($limit.Remaining -lt 10)
  41. }
  42.  
  43. while($true)
  44. {
  45.     Ensure-RateLimit
  46.     $repositories = Invoke-RestMethod -uri "https://api.github.com/repositories?since=$last" -Headers $headers
  47.     if(-not $repositories)
  48.     {
  49.         break
  50.     }
  51.  
  52.     $firstRepository = $repositories[0]
  53.     Write-Progress ("Processing repository {0}: {1} - {2}" -f $firstRepository.Id,$firstRepository.Name,$firstRepository.Description)
  54.  
  55.     foreach($repository in $repositories)
  56.     {
  57.         Ensure-RateLimit
  58.         $outputObject = $repository | Select-Object Id,Name,html_url,Description,Languages
  59.         $languages = (Invoke-RestMethod $repository.languages_url -Headers $headers).PSObject.Properties.Name -join ":"
  60.         $outputObject.Languages = $languages
  61.  
  62.         $outputObject | Export-Csv repositories.csv -Append -NoTypeInformation
  63.         $last = $repository.id      
  64.     }
  65. }
Add Comment
Please, Sign In to add comment