Навіщо?

Я вирішив отримати практичний досвід роботи з GitHub Actions та GitHub Pages.

Мій блог має RSS-стрічку, і це дало ідею: якщо автоматично обробляти RSS-сторінки, можна отримати повну резервну копію блогу у форматі Markdown.

А вже цей Markdown легко опублікувати в репозиторії GitHub Pages / Jekyll.

Таким чином я отримую:

  • автоматичний бек-ап контенту
  • контроль над контентом у Git
  • можливість міграції з Blogger без втрат
  • статичну версію блогу

Приклад використання


Блоґ котрий копіюється


Результат копіювання на GitHub pages

Опис продукту

Це Python-утиліта, яка синхронізує пости з RSS-стрічки Blogger у репозиторій GitHub Pages / Jekyll.

Вона автоматично:

  • завантажує зображення,
  • переписує внутрішні посилання,
  • генерує коректно оформлені Markdown-файли з YAML frontmatter.

Можливості

  • Automated Sync
    Отримує пости з RSS-стрічки Blogger та синхронізує їх із репозиторієм.
  • Image Handling
    Завантажує зображення блогу та зберігає їх локально в:
    assets/images/blog/
  • Link Rewriting
    Оновлює старі доменні посилання, замінюючи їх на нову адресу GitHub Pages.
  • Jekyll-compatible Output
    Генерує Markdown-файли з правильно оформленим YAML frontmatter, сумісним із Jekyll.
  • Dry Run Mode
    Дозволяє попередньо переглянути зміни без фактичного створення або перезапису файлів.
  • Configurable
    Гнучка конфігурація через змінні середовища.

Як це працює

Утиліта працює як простий пайплайн обробки даних:

Отримання RSS

Скрипт підключається до RSS-стрічки Blogger та отримує список постів.

З RSS витягується:

  • заголовок
  • дата публікації
  • HTML-контент
  • категорії (labels)
  • постійне посилання (permalink)

Обробка HTML-контенту

Отриманий HTML проходить декілька етапів трансформації:

  • очищення зайвих тегів
  • конвертація HTML → Markdown
  • переписування внутрішніх посилань на новий GitHub Pages домен
  • пошук усіх зображень

Завантаження зображень

Усі знайдені зображення:

  • завантажуються локально
  • зберігаються у assets/images/blog/
  • перейменовуються за безпечним шаблоном
  • їхні шляхи автоматично оновлюються в Markdown-файлі
  • Таким чином блог стає повністю автономним і не залежить від зовнішнього CDN Blogger.

Генерація Markdown-файлу

Для кожного поста створюється файл у форматі: YYYY-MM-DD-post-slug.md

Файл містить:

  • YAML frontmatter (title, date, tags, layout)
  • основний Markdown-контент
  • оновлені локальні шляхи до зображень
  • Формат повністю сумісний з Jekyll.

Dry Run режим

У режимі dry-run:

  • файли не записуються
  • зображення не зберігаються
  • показується список змін, які будуть виконані

Це дозволяє безпечно перевірити результат перед реальною синхронізацією.

Інтеграція з GitHub Actions

Скрипт можна запускати:

  • локально
  • через cron
  • автоматично через GitHub Actions

У випадку GitHub Actions:

  • Виконується запуск утиліти
  • Генеруються / оновлюються Markdown-файли
  • Зміни комітяться у репозиторій
  • GitHub Pages автоматично перебудовує сайт

У результаті отримуємо повністю автоматизований процес резервного копіювання та публікації.

###

####


GitHub Actions

Підсумок процесу

RSS → HTML → Markdown → Download Images → Rewrite Links → Commit → GitHub Pages Build

Посилання