From 338035be936dbaeeb0ad62faa7c7fefb2824d6b4 Mon Sep 17 00:00:00 2001 From: Jason Shirk Date: Wed, 17 Aug 2016 18:01:15 -0700 Subject: [PATCH] Update rest demo (#1854) --- demos/rest/curlDemo.txt | 20 --------- demos/rest/readme.md | 16 +++----- demos/rest/rest.ps1 | 89 ++++++++++++++++++++--------------------- 3 files changed, 48 insertions(+), 77 deletions(-) delete mode 100644 demos/rest/curlDemo.txt diff --git a/demos/rest/curlDemo.txt b/demos/rest/curlDemo.txt deleted file mode 100644 index eff97d7e99..0000000000 --- a/demos/rest/curlDemo.txt +++ /dev/null @@ -1,20 +0,0 @@ -# EQ Linux - -# get the json from the repo api and assign it to the txt file - -# This grads the json file from the API -curl -u > outputtest.txt - -# Reformats the json block to proper json (removes the newlines) -string=$(cat temp.txt) - -# Replace the "private" value to false -find='"private": true' -replace='"private": false' -string2=${string/$find/$replace} - -# push the json block into a txt file -echo $string2 > output.txt - -# Post the updated JSON data to the repo -curl -u --data @output.txt \ No newline at end of file diff --git a/demos/rest/readme.md b/demos/rest/readme.md index 8499f61271..0d58e7a098 100644 --- a/demos/rest/readme.md +++ b/demos/rest/readme.md @@ -1,13 +1,7 @@ -This demo shows interacting with the Github API via Invoke-RestMethod. -NOTE: A repo URL must be specified in these scripts and a Github PAT token with access to the repo must be generated and specified +## Rest demo + +This demo shows interacting with the Github API via Invoke-WebRequest. rest.ps1: -Invoke-RestMethod is used to get the json of a repo as a PowerShell object, -the object is then manipulated and the "private" parameter is changed to 'false'. -The object is converted back to json formating and Posted back to the repo API - -The benefit of PowerShell is shown at the end of the script with PS objects. -Enabling users to get info on multiple repos and then sort that data as objects. - -curlDemo.txt: -This shows the equavilent bash commmands to change the private status of a Github repo +Invoke-WebRequest and ConvertFrom-Json are used to get the issues of a repo. +The issues are processed as objects to find the most commented on issues. diff --git a/demos/rest/rest.ps1 b/demos/rest/rest.ps1 index 196ccca75e..4800b360df 100644 --- a/demos/rest/rest.ps1 +++ b/demos/rest/rest.ps1 @@ -1,46 +1,43 @@ -# NOTE: This demo is still in progress and needs validation in Linux -# ------------------------------------ - -#region Setup the credentials for use in HTTP header -$user = '' -$pass= "" -$pair = "${user}:${pass}" -$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair) -$base64 = [System.Convert]::ToBase64String($bytes) -$basicAuthValue = "Basic $base64" -$headers = @{ Authorization = $basicAuthValue } -#endregion - -# Changing the status of a Private GitHub repository to Public - -# URL to PowerShell Github Repo -$PowerShellGithubUri = '' - -# Get the blob from the Github API as a PS object -$JsonBlock = Invoke-RestMethod -Uri $PowerShellGithubUri -Headers $headers - -# Explore the object (Notice that it is a private repo) -$JsonBlock - -# Given it is an object, you can explore and interact with it -# Change the private value to false -$JsonBlock.private = 'false' - -# Convert the object back to a json -$Json = ConvertTo-Json $JsonBlock - -# Post the updated json block back to the GitHub -Invoke-RestMethod -Uri $PowerShellGithubUri -Headers $headers -Method Post -Body $Json - - -# -------------- - -# We can also use the PS objects to sort the different repos on github - -# If we grab the json from the PowerShell github -Invoke-RestMethod https://api.github.com/users/powershell/repos | sv repoData - -# We can sort it based on the number of forks each repo has -$repoData | Sort-Object -Property forks_count -Descending | ft -f id,name,stargazers_count,forks_count - -$repoData | Sort-Object -Property stargazers_count -Descending | ft -f id,name,stargazers_count,forks_count + +#----------------- + +function Get-Issues +{ + param([string]$UserName, + [string]$Repo, + [ValidateRange(1,100)][int]$PerPage = 100) + + $body = @{ + per_page = $PerPage + } + + $uri = "https://api.github.com/repos/$UserName/$Repo/issues" + while ($uri) + { + $response = Invoke-WebRequest -Uri $uri -Body $body + $response.Content | ConvertFrom-Json | Write-Output + + $uri = $null + foreach ($link in $response.Headers.Link -split ',') + { + if ($link -match '\s*<(.*)>;\s+rel="next"') + { + $uri = $matches[1] + } + } + } +} + +$issues = Get-Issues -UserName lzybkr -Repo PSReadline + +$issues.Count + +$issues | Sort-Object -Descending comments | Select-Object -First 15 | ft number,comments,title + +foreach ($issue in $issues) +{ + if ($issue.labels.name -contains 'bug' -and $issue.labels.name -contains 'vi mode') + { + "{0} is a vi mode bug" -f $issue.url + } +} \ No newline at end of file