iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: #!/usr/bin/pwsh #region Help <# .SYNOPSIS Загрузка картинок дня с bing.com .DESCRIPTION Получение информации и загрузка от 0 до 8 картинок дня bing.com .PARAMETER Resolution Разрешение картинки. Требуется указать один из возможных вариантов: '1024x768', '1280x720', '1366x768', '1920x1080', '1920x1200' По умолчанию: '1920x1080' .PARAMETER Path Полный путь к папке, куда будут сохраняться картинки и лог файл По умолчанию: папка пользователя 'Изображения\Bing-Daily' .NOTES Автор: iNNOKENTIY21 .EXAMPLE Get-BingImageDaily.ps1 .EXAMPLE Get-BingImageDaily.ps1 -Resolution '1920x1200' .EXAMPLE Get-BingImageDaily.ps1 -Path 'Куда то там\Картинки дня' .EXAMPLE Get-BingImageDaily.ps1 -Resolution '1920x1200' -Path 'Куда то там\Картинки дня' #> #endregion #region Пространства имён using namespace Microsoft.PowerShell.Commands using namespace System.Xml #endregion #region Параметры param ( # Разрешение (размер) загружаемой картинки [ValidateSet ('1024x768', '1280x720', '1366x768', '1920x1080', '1920x1200')] [string] $Resolution = '1920x1080', # Полный путь к папке, куда сохранять загружаемые картинки и лог # Для windows: "$([Environment]::GetFolderPath("MyPictures"))\Bing-Daily" [string] $Path = '/home/user/pictures/Bing-Daily/' ) #endregion #region API - получение информации о картинках дня на Bing.com # Базовый адрес [uri] $BaseUri = 'https://www.bing.com' # Относительный адрес API, от 0 до 8 последних картинок (8 - это максимум) [string] $RelativeUri = 'HPImageArchive.aspx?n=8' # Сформированный, полный адрес запроса, на информацию о картинках дня [uri] $Uri = [uri]::new($BaseUri, $RelativeUri) # Запрос информации $Response = Invoke-WebRequest -Uri $Uri # Получение из ответа на запрос, данных в формате xml [xml] $Content = $Response.Content #endregion #region Загрузка картинок # Если нет картинок, выход if ($Content.images.image.Count -lt 1) { "$(Get-Date) — No image" exit } # Расширение для файлов картинок [string] $Extension = ".jpg" # Цикл получения информации о каждой картинке и сохранении её в лог, загрузки foreach ($Img in $Content.images.image) { # Базовое имя картинки [string] $Name = ($Img.urlBase -split "\.")[1] # Относительная ссылка на картинку [string] $RelativeUrl = $Img.urlBase + "_" + $Resolution + $Extension # Стартовая дата картинки дня [datetime] $Date = ([datetime]::ParseExact($Img.startdate, 'yyyyMMdd', $null)) # Дата для имени файла [string] $DateFileName = $Date.ToShortDateString().Replace('.', '_') # Полный адрес картинки для загрузки [uri] $Uri = [uri]::new($BaseUri, $RelativeUrl) # Имя файла для картинки [string] $FileName = $DateFileName + "_" + $Name + $Extension # Если нет папки для загрузки, указанной в параметрах, создать if (-not (Test-Path -Path $Path -PathType Container)) { $null = New-Item -ItemType Directory $Path } # Полный путь и имя файла для сохранения картинки $FullName = Join-Path -Path $Path -ChildPath $FileName # Если файл существует, перейти к следующему в цикле if (Test-Path -Path $FullName -PathType Leaf) { "$(Get-Date) — File: '$FullName' already exists" continue } # Загрузка картинки $Res = Invoke-WebRequest -Uri $Uri -OutFile $FullName -PassThru # Если загрузка удалась if ($Res.StatusCode -eq 200) { # Данные для записи в лог / запись лога (режим добавления в файл) [PSCustomObject] @{ Name = $Name Date = $Date Uri = $Uri FileName = $FileName Copyright = $Img.copyright ContentType = $Res.Headers.'Content-Type' ContentLength = $Res.Headers.'Content-Length' DateDownload = ([datetime]::Parse($Res.Headers.Date)) FullName = $FullName Length = (Get-Item $FullName).Length Hash = (Get-FileHash -Path $FullName).Hash } | Export-Csv -Path "$Path\log.txt" -Append } #endregion } |
|