В чем проблема
Как известно ссылки часто бывают слишком длинными, например меня на идею автоматизировать линкшортингх
(врядли есть такое слово, но теперь - да) пока я смотрел стрим одно известного вертолета будучи модером в чате, и было зареквестировано скинуть ссылку на другой канал в чат, однако ютуб тупо обрезает ссылки в чате, почему сслыка вида https://www.youtube.com/channel/UCJLorkdDK41pOQyoVQbFqJQ была бы отправлена примерно как https://www.youtube.com/channel/UCJLor... и была бы бесполезна. Тогда(пару часов назад) я просто сгенерил пост со ссылкой внутри, но сейчас хотелось бы более автоматизированное решение.
1. Создаем шаблон(архетип) hugo
В hugo встроены такие штуки как архитипы(archetypes), которые используются как шаблон при создании нового контента с помощью hugo new, например hugo new posts/post_name.md заюзает archetypes/posts.md если он есть, или default.md если его нет.
Я создал такой архетип:
<html>
<head>
<title>Redirect</title>
<meta http-equiv = "refresh" content = "2; url = {% url %}" />
</head>
<body>
<h1>Thanks for trusting slnt-opp shortener!</h1>
<h2>Redirecting to </h2>
<h3> * точка . dot <h3>
<h5> это типа спиннер(не тот кторый для аутистов, а который показывает загрузку) </h5>
</body>
<script>
console.log("всякая гугол онолитека")
</script>
</html>
Из чего же он состоит
- Самое главное: редирект на
urlурл прописан как рельсовый шаблон, но не обманывайтесь, здесь ничего это не будет, ибо зачем. Редиректит через 2 секунды после загрузки страницы - Какое-то вранье
- Куда редиректит
- там написано
2. Пишем скрит обработчик
2.1 Что делает сокращатели уникальными?
ID конечно, благо все уже придумано, поэтому я генерирую названия для ссылки из данного пользователем(мной) названия и uuid
require "securerandom"
uuid = SecureRandom.hex(3)
=> eb0cd2
2.2 Какие еще данные?
Имя для ссылки и урл берем из аргументов:
name, url = ARGV
То есть вызовываться это будет ./shortcut heli https://www.youtube.com/channel/UCJLorkdDK41pOQyoVQbFqJQ
2.3 Генерируем ссылку
В первую очередь создаем страницу из архитипа с названием созданным из имени и uuid:
filename = name + uuid
`hugo new s/#{filename}.html`
Вписываем данные:
template = File.read("content/s/#{filename}.html").gsub('{% name %}', name).gsub('{% url %}', url)
И записываем файл назад:
File.open("content/s/#{filename}.html", 'w') do |f|
f.write template
end
Дальше уже дело ваше, но лично я запускаю мой скрипт deploy, который заливает новую версию сайта на сервер, а после красивенько вывожу ссылку:
puts "New link generated:"
puts "\n\thttps://slnt-opp.xyz/s/#{filename}\t\n\n"
По итогу весь процесс занимает пару секунд и выглядит так от начала до конца:
slnt_opp@slnt-opp-mbp slnt-opp.xyz % ./shortcut heli https://www.youtube.com/channel/UCJLorkdDK41pOQyoVQbFqJQ
New link generated:
https://slnt-opp.xyz/s/helib9947b
slnt_opp@slnt-opp-mbp slnt-opp.xyz %
Спасибо за внимание, обращайся если нужны короткие ссылки, хех