Skip to content

Instantly share code, notes, and snippets.

@darrenjrobinson
Last active January 17, 2022 00:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save darrenjrobinson/797cebfff14167d8e0cf681381a4822a to your computer and use it in GitHub Desktop.
Save darrenjrobinson/797cebfff14167d8e0cf681381a4822a to your computer and use it in GitHub Desktop.
Using Wordpress API's with PowerShell. Associated blogpost https://blog.darrenjrobinson.com/using-wordpress-apis-with-powershell/
# V2 APIs
# Basic AuthN
$userID = 'yourWordpressAccountAlias'
$userPassword = 'ABCD wTUZ pIST 9jEo 99LV 1234'
$Bytes = [System.Text.Encoding]::utf8.GetBytes("$($userID):$($userPassword)")
$encodedAuth = [Convert]::ToBase64String($Bytes)
$header = @{Authorization = "Basic $($encodedAuth)" }
Invoke-RestMethod -method get -uri "https://yourwordpressURL/wp-json/wp/v2/posts" -headers $header
# ===================================================================================================
# V1 APIs
<#
Update the following snippet with the clientID from your newly registered WordPress application and the URL from your WordPress site.
It must be the same as you registered with the application registration.
Running the snippet below will generate the URL and put it in the clipboard.
Paste it into your browser.
You will then be prompted to authenticate with your WordPress account and authorize your application.
#>
$clientID = 'myClientID'
$replyURL = 'https://myWordPressURL.com'
$url = "https://public-api.wordpress.com/oauth2/authorize?client_id=$($clientID)&redirect_uri=$($replyURL)&scope=global%20stats&response_type=code"
$url | clip
<#
After authorization use the AuthCode to get an Access Token
#>
Function Get-WordPressAccessToken {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
$clientID,
[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
$blogURL,
[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
$clientSecret,
[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
$authCode
)
try {
$result = Invoke-RestMethod https://public-api.wordpress.com/oauth2/token `
-Method Post -ContentType "application/x-www-form-urlencoded" `
-Body @{
client_id = $clientId
client_secret = $clientSecret
redirect_uri = $blogURL
grant_type = "authorization_code"
code = $authCode
} -ErrorAction STOP
return $result
}
catch {
$_
}
}
$clientID = 'yourAppClientID'
$clientSecret = 'yourAppClientSecret'
$authCode = 'code_from_browser_authorization'
$replyURL = 'https://myWordPressURL.com'
$accessToken = Get-WordPressAccessToken -ClientID $clientID -blogURL $replyURL -clientSecret $clientSecret -authCode $authCode
<#
Call the v1.1 API's. e.g Get WordPress Status
#>
Function Get-WordPressStats {
[Cmdletbinding()]
param(
[Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
[string] $siteID,
[Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
[string] $accessToken
)
$stats = Invoke-RestMethod https://public-api.wordpress.com/rest/v1.1/sites/$siteID/stats -Method Get `
-Headers @{"Authorization" = "Bearer $accessToken" } | Select-object -ExpandProperty Stats
return $stats
}
$wpBlogID = '123514446'
Get-WordPressStats -siteID $wpBlogID -accessToken $accessToken.access_token
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment