Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- param(
- [PSCredential]
- $Credential
- )
- $headers = @{}
- if($Credential)
- {
- $networkCredential = $Credential.GetNetworkCredential()
- $user = $networkCredential.Username
- $pass = $networkCredential.Password
- $pair = "${user}:${pass}"
- $bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
- $base64 = [System.Convert]::ToBase64String($bytes)
- $basicAuthValue = "Basic $base64"
- $headers = @{ Authorization = $basicAuthValue }
- }
- $last = 0
- if(Test-Path repositories.csv)
- {
- $lastItem = Get-Content repositories.csv -Tail 1 | ConvertFrom-Csv -Header Id,Name,html_url,description,languages
- $last = $lastItem.Id
- }
- function Ensure-RateLimit
- {
- do
- {
- $limit = (Invoke-RestMethod -uri "https://api.github.com/rate_limit" -Headers $headers).Rate
- if(([int] $limit.Remaining) -lt 10)
- {
- Write-Progress ("Waiting. Rate limit resets in: " +
- ([System.DateTimeOffset]::FromUnixTimeSeconds($limit.Reset).ToLocalTime().DateTime - (Get-Date)))
- Start-Sleep -Seconds 60
- }
- } while($limit.Remaining -lt 10)
- }
- while($true)
- {
- Ensure-RateLimit
- $repositories = Invoke-RestMethod -uri "https://api.github.com/repositories?since=$last" -Headers $headers
- if(-not $repositories)
- {
- break
- }
- $firstRepository = $repositories[0]
- Write-Progress ("Processing repository {0}: {1} - {2}" -f $firstRepository.Id,$firstRepository.Name,$firstRepository.Description)
- foreach($repository in $repositories)
- {
- Ensure-RateLimit
- $outputObject = $repository | Select-Object Id,Name,html_url,Description,Languages
- $languages = (Invoke-RestMethod $repository.languages_url -Headers $headers).PSObject.Properties.Name -join ":"
- $outputObject.Languages = $languages
- $outputObject | Export-Csv repositories.csv -Append -NoTypeInformation
- $last = $repository.id
- }
- }
Add Comment
Please, Sign In to add comment