public/Get-BookMetadata.ps1
|
function Get-BookMetadata { <# .SYNOPSIS Retrieves book metadata from the Open Library API. .DESCRIPTION Fetches detailed book information from Open Library using an ISBN. Returns book title, publisher, publication date, page count, cover URL, and first sentence. If the book is not found, returns a placeholder object with the ISBN. .PARAMETER ISBN The ISBN (International Standard Book Number) of the book to look up. Can be ISBN-10 or ISBN-13 format. .EXAMPLE Get-BookMetadata -ISBN '9780134685991' Retrieves metadata for Effective Java (3rd Edition). .EXAMPLE $metadata = Get-BookMetadata -ISBN '9780062316097' Add-Book @metadata Fetches book metadata and pipes it to Add-Book for storage. .EXAMPLE '9780134685991', '9780062316097' | ForEach-Object { Get-BookMetadata -ISBN $_ } Retrieves metadata for multiple books. .OUTPUTS PSCustomObject with properties: - ISBN: The book's ISBN - Title: Book title - PublishDate: Publication date - Publishers: Publisher name(s) - NumberOfPages: Page count - CoverUrl: URL to book cover image - FirstSentence: Opening sentence of the book - ScannedAt: Timestamp when metadata was retrieved #> [CmdletBinding()] Param( [Parameter(Mandatory)] [String] $ISBN ) end { try { $BookInfo = Invoke-RestMethod -Uri "https://openlibrary.org/isbn/$ISBN.json" -ErrorAction Stop $CoverUrl = if ($BookInfo.covers -and $BookInfo.covers.Count -gt 0) { "https://covers.openlibrary.org/b/id/$($BookInfo.covers[0])-M.jpg" } else { $null } # Create book object $Book = [pscustomobject]@{ ISBN = if ($BookInfo.isbn_13) { $BookInfo.isbn_13[0] } else { $ISBN } Title = $BookInfo.title PublishDate = $BookInfo.publish_date Publishers = $BookInfo.publishers -join ', ' NumberOfPages = $BookInfo.number_of_pages CoverUrl = $CoverUrl FirstSentence = $BookInfo.first_sentence.value ScannedAt = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' } $Book } catch { Write-Warning -Message 'Book not found, writing generic record' $Book = [PSCustomObject]@{ ISBN = $ISBN Title = "Unknown (ISBN: $ISBN)" PublishDate = 'N/A' Publishers = 'N/A' NumberOfPages = $null CoverUrl = $null FirstSentence = 'N/A' ScannedAt = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' } $Book } } } |