Заметки · 14.06.2024

Как я QR генерировал

Завершающий (надеюсь) пост про QR. Пост-приквел.

Ранее я выкладывал отдельно модуль для генерации кодов в IDE Lazarus и консольную утилиту, но совсем не рассказал с чего всё началось.

А началось всё, как водится, с простого и безобидного желания растянуть чаепитие до рамок бесконечности. Ну, хотя бы примерно.

Поступила задача накуролесить QR-кодов из множества url, бережно сложенных в текстовый файл. Заниматься копипастой и веб-генерацией — долго. А вот написать консольную утилиту и с помощью простого ps1-скрипта скормить ей весь массив данных — это быстро! Помните про «день потерять, потом за пять минут долететь«? Нет?! Тогда ссылка.

Попробую смоделировать условия и для этого возьму заглавную страницу этого же сайта. Она у меня выступит массивом ссылок. Знакомьтесь — переменная $links. Далее создам папку рядом с файлом скрипта и туда (впоследствии) сложу сгенерированные картинки в формате png и размером в 500 пикселей.

Собственно, код:

# Получаем список ссылок с предустановленной фильтрацией #
$links = ((Invoke-Webrequest -Uri https://ngdream.ru/ -UseBasicParsing).Links).href -like "*2024*"

# Переменная с именем директории #
$dir = "$PSScriptRoot\qr"

# Создаём директорию по пути из переменной $dir #
New-Item -Path $dir -ItemType Directory -Force | Out-Null

# Запускаем перебор #
foreach ($link in $links)
{
    # Генерируем случайное имя файла #
    $randomname = [System.IO.Path]::GetRandomFileName()

    # Путь к файлу изображения с QR-кодом #
    $filepath = "$dir\$randomname"
    
    # Генерируем QR-код #
    Start-Process -FilePath qrcg.exe -ArgumentList "$link $filepath png 500" -NoNewWindow
}

Кстати сказать, у PowerShell есть свой собственный отличный модуль для генерации QR.