Живой эксперимент · Агрегация публичных новостей

WarMap Live

Карта мира с зарегистрированными военными инцидентами, собранная из публичных новостных сообщений.

72 бесплатные публичные новостные ленты, читаются каждые пять минут. Модель читает заголовки, классифицирует произошедшее и наносит его на карту — и каждая метка ведёт обратно к статье, из которой она взята.

Это агрегатор публичных сообщений, а не проверенные разведданные, и он устроен так, чтобы прямо об этом говорить. Без аккаунта, без платного доступа, без стены с трекерами.

Коротко о главном

72

Публичные новостные ленты

5 мин

Интервал обновления

11

Языки

$0

Бесплатно, без аккаунта

Как это работает

От записи в RSS до метки на карте.

Четыре этапа выполняются каждые пять минут. Большинство статей вообще не доходит до модели, и это сделано намеренно.

1

Прочитать ленты

Опрашиваются 72 бесплатных публичных новостных RSS-ленты. Никаких платных новостных API. Лента, самая свежая запись которой старше десяти дней или которая не разбирается вовсе, считается отказавшей, а не исправной — две мёртвые ленты месяцами рапортовали об успехе, отдавая при этом статьи 2018 года.

2

Оценить и отсеять

Каждая статья оценивается на предмет того, описывает ли она военный инцидент, и около 95 % отсеиваются ещё до запуска какой-либо модели. Оставшееся сверяется с уже виденным, поэтому в тихом интервале модель вызывается ноль раз, а не тратит запрос впустую.

3

Классифицировать и разместить

Модели разрешено только классифицировать инцидент и оценить, где он произошёл. Ей никогда не позволено предоставлять URL источника, название издания или отметку времени — они переносятся дословно из записи ленты. Всё, что не проходит проверку, отбрасывается, а не чинится.

4

Нанести на карту вместе с источником

Инцидент записывается в базу данных и появляется на карте в течение цикла обновления вместе со ссылкой на исходную статью и собственной постоянной страницей, на которую можно сослаться.

Два правила

Чего проект принципиально не делает.

Он не должен выдумывать новости.

В раннем черновике было восемь примерных инцидентов вместе с числом жертв, приписанным Reuters, AP и BBC. На сайте, который подаёт себя как живое освещение конфликта, это выдуманные новости. Их удалили, и теперь проект поставляется вообще без стартовых данных — карта остаётся пустой, пока на неё не попадёт что-то настоящее.

Стрелка из одной страны в другую — это утверждение о факте, поэтому дуги рисуются только там, где исходная статья действительно назвала атакующую сторону или район пуска. Всё остальное получает обычную метку.

Он не должен заполнять тихий час.

Раньше карта дополняла скудное временное окно более старыми инцидентами извне, чтобы почти пустой мир не выглядел сломанным. При одном-семи инцидентах в час это дополнение давало большую часть того, что видел посетитель: тот, кто смотрел на «последний час», смотрел в основном на вчера.

Теперь окно абсолютное. Тихий час отображается как тихий час, а более широкие окна — в одно касание.

Инженерная заметка

Отрисовка на сервере, потому что краулеры не выполняют JavaScript.

WarMap Live начинался как одностраничное приложение на React. Оно отдавало пустой корневой элемент и собирало список инцидентов в браузере, поэтому всё, что мог прочитать краулер, оказывалось внутри запасного блока noscript — а его Google отбрасывает при отрисовке. Большинство ИИ-краулеров вообще не выполняют JavaScript: для них страница была непрозрачным URL.

Его переписали так, чтобы каждая страница отрисовывалась на границе сети, а карта оставалась единственной частью, которой действительно нужен браузер. Замеры на той же главной странице:

Слов видит краулер

10 404

Отдаваемый JavaScript

104 КБ 53 КБ

Работает без JavaScript

Всё, кроме карты

Фильтры — это обычные ссылки, а не кнопки, поэтому каждое отфильтрованное представление является настоящим URL и работает без скриптов; при наличии JavaScript карта превращает их в обновления на месте.

Прочтите это, прежде чем ссылаться

Чем эта карта не является.

Эти ограничения опубликованы на самом сайте, в его документации и в файле, который он предлагает ИИ-ассистентам, потому что карта конфликта, преувеличивающая собственную надёжность, хуже, чем отсутствие карты.

Это не проверенные разведданные. Он агрегирует публичные новостные сообщения, и человеческой проверки в цепочке нет.

Координаты — это оценки. Модель определяет место каждого инцидента по заголовку. Метка может оказаться не в том городе, не в том регионе, а иногда и не в той стране.

Происхождение — это атрибуция. Это то, что сказала статья, а не наблюдаемая точка пуска.

Первые цифры потом уточняются. Число жертв — это то, что говорилось в статье на момент публикации.

Часть источников контролируется государством. Они подают утверждения как факты.

Пустая область — это не тишина. Это значит, что ни одна отслеживаемая лента не опубликовала подходящего сообщения.

Не подходит для решений, связанных с безопасностью, поездками, оперативной работой, журналистикой, страхованием или правом, без обращения к первоисточнику.

Создано на

Один worker, одна база данных, одна карта.

Всё работает на Cloudflare, включая задание по расписанию, которое читает ленты. Нет сервера, который надо поддерживать, и нет отдельного бэкенда.

Cloudflare Workers Hono JSX на границе сети D1 Leaflet TypeScript Cron каждые 5 минут Только публичный RSS Отрисовка на сервере
Посмотреть вживую

Карта и есть продукт.

Открываете — и сразу видите текущее окно: без аккаунта, без баннера о куки, и каждый инцидент в одном клике от своего источника.

WarMap Live агрегирует публичные новостные сообщения. Это не проверенные разведданные, и никакой гарантии точности не даётся. Всегда проверяйте источник по ссылке, прежде чем полагаться на то, что вы здесь видите.