metravel-travel-article

star 0

Статьи-путешествия metravel.by из папок с фото (по годам): SEO-статьи с точками на карте, обложкой, галереей; правка существующих статей. Триггеры: «сделай статьи из папки <год>», «залей фото к статье», «путеводитель по городу».

kelios By kelios schedule Updated 6/10/2026

name: metravel-travel-article description: >- Статьи-путешествия metravel.by из папок с фото (по годам): SEO-статьи с точками на карте, обложкой, галереей; правка существующих статей. Триггеры: «сделай статьи из папки <год>», «залей фото к статье», «путеводитель по городу».

metravel-travel-article

Движок и регламент для публикации путешествий на metravel.by.

Принципы (ОБЯЗАТЕЛЬНО)

  1. Не дублировать. Перед созданием получи список уже существующих путешествий за этот год и пропусти совпадения: GET https://metravel.by/api/travels/?where={"publish":1,"moderation":1,"year":"<YEAR>"}&perPage=100 Сопоставь по смыслу (одно реальное путешествие может быть разбито на несколько статей — например Хорватия). Не создавай повтор.
  2. Цель текста — польза + память. Статья должна (а) реально помочь тому, кто собирается посетить место, и (б) сохранить личную память о поездке. Тёплый живой тон + конкретика. 2a. Пиши как человек, без шаблонных заголовков. НЕ используй секции «Вступление», «Что увидели», «Как прошло», «Итог», «Точки», «Описание» — это выдаёт генерацию. Начинай сразу с живого абзаца-крючка (без заголовка), заканчивай абзацем-выводом (без заголовка). Заголовки — только осмысленные и естественные: по названиям мест («Вавельский замок», «Костёл Святой Троицы», «Прогулка по Казимежу») или по теме («Что посмотреть», «Как добраться», «Практическая информация», «Маршрут в цифрах»). Для путеводителей по городу заголовки = названия достопримечательностей. Не дублируй заголовок статьи в теле. 2c. Опирайся на точки-достопримечательности travelAddress[] из GET /api/travels/{id}/ (address/categoryName/coord/travelImageThumbUrl) — это объекты, на которых сфокусирована статья (название, тип, координаты, фото). По каждому значимому добавляй полезную и интересную достоверную инфо о месте (история, легенды, топонимика, год/стиль постройки, чем известно, практика), привязывая её к соответствующему объекту/фото в теле. 2b. При исправлении/дописывании — вставляй ПО КОНТЕКСТУ, а не валом в конец. Сначала прочитай тело и сопоставь новый текст с существующими разделами/фото. Справку об объекте (история, легенды, топонимика) ставь ИНЛАЙН рядом с его заголовком и фото, а не отдельным дублирующим <h2> в хвосте — иначе текст отрывается от своих фото и появляются два заголовка об одном объекте. В конец выноси только финальное и не дублирующее: «Маршрут в цифрах», «Практическая информация», «Что рядом». Для контекстной перестановки правь полное тело через безопасный редактор scripts/seo-edit.js --id <ID> --desc-file full.html (бэкап + верификация + авто-откат), а не сырым append.
  3. Города — это путеводитель. Если поездка про город (Краков, Варшава, и т.п.), пиши полноценный путеводитель: добавляй ВСЁ, что стоит посмотреть, опираясь на рейтинги (TripAdvisor, Google Maps top sights), а не только на свои фото. Сгруппируй по районам/темам, добавь практику по ключевым объектам.
  4. Правильные названия. Определяй место точно (по GPS + содержимому фото + веб-проверке). Не угадывай наобум (пример ошибки: озеро Сосина ≠ Гродек). Если не уверен — пометь [уточнить] и проверь поиском.
  5. Практическая информация:
    • Замки/музеи/парки/аттракционы → часы работы, цены, офсайт. Бери из веб-поиска, помечай «актуально на <год>, уточняйте на офсайте». Не выдумывай цифры.
    • Тропы/походы → «Маршрут в цифрах» из GPS-трека фото: длина (≈, нижняя оценка по точкам), перепад высот (мин–макс, надёжно), высшая точка, время в пути. 5b. У каждой точки — категория (тип места). Точка без категории недопустима. Тип задаётся id из справочника categoryTravelAddress (Замок=43, Костёл=150, Озеро=84, Гора=26, Музей=76, Площадь=187, Водопад=20, Город=184 и т.д. — facets). Движок проставляет категорию автоматически по названию точки (point_categories), но проверяй адекватность; для непонятных — Город(184). 5c. Никогда не упоминай источник данных. В тексте НЕ должно быть «по GPS», «из фото», «по EXIF», «по точкам съёмки», «по кластеру», «по аэрокадрам» — это выдаёт генерацию. Цифры маршрута подавай просто как факт («около 5 км», «перепад ~460 м»). Движок (strip_meta) вычищает такие фразы на upsert.
  6. Обложку выбирай ВИЗУАЛЬНО — это обязательный шаг. Авто-обложка движка — лишь черновик, её почти всегда нужно заменить. После заливки фото просмотри глазами (Read) 5–8 кадров-кандидатов из папки (равномерно по съёмке) и выбери самый «открыточный»: достопримечательность, пейзаж, общий вид места, узнаваемый кадр. Установи: python scripts/metravel_publish.py cover <id> "<файл>". На обложку НИКОГДА не ставь: еду/рестораны/кафе, селфи и крупные планы людей, интерьеры/квартиры/хостелы/номера, машины, рекламные щиты и вывески, домашних животных, таблички, случайные бытовые кадры. Если в папке смешаны «домашние» кадры (большая поездка с папкой ДОМ) — отбирай фото только по GPS-кластеру места. Галерея — тоже без мусора; лишние кадры убирай DELETE /api/gallery/{imageId}/. Фото к точкам подбираются по GPS-близости (движок делает это сам).
  7. Что пропускать: папки «Дом/ДОМ», домашние события (Рождество, Новый год, шашлыки), ТЦ, и чисто бытовые кадры. Однодневные поездки берём, если это место, а не дом.
  8. Черновики, не публикация. Создавай как publish=false, moderation=false. Публикацию/модерацию включает пользователь.

Авторизация

Скрипт берёт токен из METRAVEL_TOKEN (env) или ~/.metravel_token. Токен — это сессионный токен залогиненного пользователя metravel.by (DRF Token), используется только к metravel.by. В код/гит токен не коммитить. Получение: пользователь даёт токен, либо берётся из браузера (DevTools → Application → Local Storage → userToken).

Процесс

  1. Обзор папки года (внешний диск, напр. /Volumes/.../НАШИ ФОТКИ/<YEAR>): перечисли месяцы → подпапки → число фото/видео. Отбрось «Дом»/события.
  2. Дедуп против сайта (см. принцип 1).
  3. Точки из EXIF: вытащи GPS из фото, кластеризуй в места (scripts/exif_points.py из истории, или PIL). Координаты идут в раздел «Точки для карты».
  4. Напиши markdown-черновик (формат ниже). Храни вне гита, напр. ~/metravel-content/<YEAR>/NN-slug.md.
  5. Создай/обнови статью: python scripts/metravel_publish.py upsert <draft.md> [--id <id>] --year <YEAR> (при --id точки сохраняют свои id — фото к точкам не теряются).
  6. Залей фото: python scripts/metravel_publish.py photos <id> "<folder>" [...] [--gallery N] (обложка + галерея + фото к точкам по GPS). Для нестандартной обложки: python scripts/metravel_publish.py cover <id> "<file>".
  7. Вставь фото в текст описания (не только галерея!): python scripts/metravel_publish.py descimg <id> — вставляет в текст ФОТО К ТОЧКАМ (релевантные месту, о котором речь; где заголовок = название точки, ставится её фото), НЕ дублируя кадры из галереи. Идемпотентно. Поэтому у точек должны быть фото — сначала photos, потом descimg. В описании не должно быть «только текст».
  8. Проверь GET-ом: точки (с категориями), страны, галерея, обложка, фото в тексте.

Формат markdown-черновика

---
title: "SEO-заголовок (≤200 симв., с ключевыми словами и местом)"
country: Польша            # или "Польша, Чехия" — маппинг в id внутри скрипта
region: Регион / город
date: YYYY-MM-DD
categories: [Поход, Хайкинг, Тур выходного дня, Самостоятельное путешествие]
---
# Заголовок
## Вступление
...
## Маршрут по точкам / Что посмотреть
...
## Практическая информация   # часы/цены (музеи) или «Маршрут в цифрах» (походы)
...
## Итог
---
## Фото для загрузки          # заметки, не идёт в описание
## Точки для карты            # таблица: | Название | lat, lng |
| Вавель | 50.04821, 19.93145 |

Всё, что после --- перед ## Фото, попадает в описание (HTML). Блоки «Фото» и «Точки для карты» в описание НЕ идут (точки уходят как координаты в карту).

Справочники

python scripts/metravel_publish.py facets — актуальные id категорий и стран. Базовые: категории Поход=2, Хайкинг=21, Треккинг=22, Тур выходного дня=19, Самостоятельное=20, Автопутешествие=6, Сплав=4, Веломаршрут=24, Велопоход=7. Страны: Польша=160, Словакия=184, Чехия=215.

API-справка (на случай ручной работы)

  • Список: GET /api/travels/?where={...}&perPage=100 (cookie или Token).
  • Деталь: GET /api/travels/<id>/.
  • Создать/обновить: PUT /api/travels/upsert/ (Token). id:null = создать, id:<n> = обновить. Обязательны многие поля (см. скрипт): transports/month/ complexity/companions/over_nights_stay/thumbs200ForCollectionArr/ travelImageThumbUrlArr/travelImageAddress = []; minus/plus/recommendation/ youtube_link = "draft_placeholder". Точки = coordsMeTravel:[{id,lat,lng, address,country,categories,image}].
  • Фото: POST /api/upload (multipart) поля file,collection,id. collection: travelMainImage (обложка, id=travel), gallery (id=travel), description (в текст, id=travel), travelImageAddress (фото точки, id=точки).
  • Кураторство галереи: DELETE /api/gallery/{imageId}/ — удалить плохой кадр из галереи (id картинки из ответа upload или из travel.gallery[].id); POST|PATCH /api/gallery/reorder/ — порядок. Используй, чтобы убрать неудачные снимки (еда, ТЦ, случайное) из галереи.
  • Полная OpenAPI-схема бэкенда (90 endpoints): http://192.168.50.36/api/schema/ (ReDoc: /api/schema/redoc/). Создания категорий точек (categoryTravelAddress) в API НЕТ — это фиксированный справочник (админка Django). Подбирай из существующих 200+ типов; новый тип добавляется только в админке бэкенда.
Install via CLI
npx skills add https://github.com/kelios/metravel2 --skill metravel-travel-article
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator