Skip to content

Commit 4feaf83

Browse files
author
James Brundage
committed
feat: Get-OpenGraph ( Fixes #2 )
1 parent e09fc49 commit 4feaf83

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

Commands/Get-OpenGraph.ps1

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
function Get-OpenGraph
2+
{
3+
<#
4+
.SYNOPSIS
5+
Gets Open Graph metadata for a given URL.
6+
.DESCRIPTION
7+
Gets Open Graph metadata for a given URL.
8+
9+
[Open Graph](https://ogp.me/) is a protocol that enables any web page to become a rich object in a social graph.
10+
11+
It is used many social networks to display rich content when links are shared.
12+
13+
This function retrieves the Open Graph metadata from a given URL and returns it as a custom object.
14+
.EXAMPLE
15+
Get-OpenGraph -Url https://abc.com/
16+
.EXAMPLE
17+
'https://cnn.com/',
18+
'https://msnbc.com/',
19+
'https://fox.com/' |
20+
Get-OpenGraph
21+
#>
22+
[Alias('openGraph','ogp')]
23+
param(
24+
# The URL that may contain Open Graph metadata
25+
[Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
26+
[Uri]
27+
$Url,
28+
29+
# A dictionary of additional Open Graph metadata to include in the result
30+
[Parameter(ValueFromPipelineByPropertyName)]
31+
[Collections.IDictionary]
32+
$Data
33+
)
34+
35+
begin {
36+
# Make a regex to match meta tags
37+
$metaRegex = [Regex]::new('<meta.+?/>','IgnoreCase','00:00:00.1')
38+
}
39+
40+
process {
41+
# Declare an empty object to hold the Open Graph metadata
42+
$openGraphMetadata = [Ordered]@{PSTypeName='OpenGraph'}
43+
if ($Url) {
44+
$restResponse = Invoke-RestMethod -Uri $Url
45+
foreach ($match in $metaRegex.Matches("$restResponse")) {
46+
$matchXml = "$match" -as [xml]
47+
if ($matchXml.meta.property -and $matchXml.meta.content) {
48+
$openGraphMetadata[$matchXml.meta.property] = $matchXml.meta.content
49+
}
50+
}
51+
}
52+
if ($Data) {
53+
foreach ($key in $Data.Keys) {
54+
$openGraphMetadata[$key] = $Data[$key]
55+
}
56+
}
57+
58+
if (-not $openGraphMetadata.Count) { return }
59+
60+
[PSCustomObject]$openGraphMetadata
61+
}
62+
}

0 commit comments

Comments
 (0)