Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » Новичок в GNU/Linux’е (2)

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

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
}

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 19:13 17-06-2020 | Исправлено: iNNOKENTIY21, 22:14 07-08-2020
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » UNIX » Новичок в GNU/Linux’е (2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru