以前Pixabayから画像を検索するNode.jsのスクリプトを書きましたが、PowerShell版をつくって見ます。
事前準備
Pixabay API キーを取得
- Pixabay にログイン
- 以下のページから API キーを取得
Pixabay API DocumentationDocumentation to Pixabay's API for searching and retrieving free images and videos.
取得した API キーを環境変数、またはコードに直接書きます(今回は環境変数例)。
環境変数の設定
取得したAPIキーを環境変数に設定
PowerShellのプロファイルにセット
code $profile
以下を追記
$env:PIXABAY_KEY = "取得したAPIキー"
ソースコード
<#
.SYNOPSIS
Pixabayを画像検索
.DESCRIPTION
PixabayのAPIを使ってキーワードによる画像検索を行いURIの一覧を取得する。
.EXAMPLE
PixabaySearch.ps1 -Query "キーワード" -PerPage 50 -ImageType "photo"
#>
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Query,
[int]$PerPage = 50,
[string]$ImageType = "photo" # photo / illustration / vector など
)
# API キー取得
$apiKey = $env:PIXABAY_KEY
if (-not $apiKey) {
Write-Error "環境変数 PIXABAY_KEY が設定されていません。`n`$env:PIXABAY_KEY に API キーを設定してください。"
exit 1
}
# クエリを URL エンコード
$encodedQuery = [System.Uri]::EscapeDataString($Query)
# API URL 作成
$url = "https://pixabay.com/api/?key=$apiKey&q=$encodedQuery&image_type=$ImageType&per_page=$PerPage"
try {
# API 呼び出し
$res = Invoke-RestMethod -Uri $url -Method Get
}
catch {
Write-Error "Pixabay API の呼び出しに失敗しました: $_"
exit 1
}
if (-not $res.hits -or $res.hits.Count -eq 0) {
Write-Warning "ヒットがありませんでした。"
exit 0
}
# largeImageURL を 1行ずつ出力(パイプライン前提)
foreach ($hit in $res.hits) {
$hit.largeImageURL
}
実行
PixabaySearch.ps1 cat
https://pixabay.com/get/xxx1.jpg
https://pixabay.com/get/xxx2.jpg
https://pixabay.com/get/xxx3.jpg
URLだけが出力されるので、PowerShellのパイプラインでつなげて処理する。
最初の 1 件だけダウンロード
PixabaySearch.ps1 cat `
| Select-Object -First 1 `
| ForEach-Object { Invoke-WebRequest -Uri $_ -OutFile "cat.jpg" }
ダウンロードした画像


全件ダウンロード
PixabaySearch.ps1 sky `
| ForEach-Object {
$name = Split-Path $_ -Leaf
Invoke-WebRequest -Uri $_ -OutFile $name
}
ランダムに1件ダウンロード
PixabaySearch.ps1 cat `
| Get-Random `
| ForEach-Object {
# タイムスタンプ生成(例: 20251203-203455)
$timestamp = (Get-Date).ToString("yyyyMMdd-HHmmss")
# ファイル名を設定
$name = "$timestamp.jpg"
Invoke-WebRequest -Uri $_ -OutFile $name
Write-Host "Downloaded: $name"
}
ダウンロードした画像




コメント