You are not logged in.

#1 2020-12-14 23:06:44

AnakinNN
Member
From: Нижний Новгород
Registered: 2017-08-07
Posts: 598
Website

Скрипт для наблюдения за своими правками

Часто бывает, что хочется наблюдать за тем, что происходит со своими правками в OSM - а именно, кто изменял уже отредактированные ранее тобой объекты:
* не навандалил ли;
* не заменил ли опрометчиво данные, свежесобранные на местности, на устаревшие из каких-нибудь муниципальных схем/реестров
и т. д.

OSMCha эту задачу не решает: она позволяет следить за всеми изменениями на конкретной территории, но безотносительно к тому, "потрогал" ты когда-либо объекты на ней, или нет. Здесь же задача ортогональная: неважно, в какой точке мира расположен объект, но если я его хоть раз редактировал (а это значит, что либо он мне не безразличен, либо у меня была какая-то информация о нём, которой до этого базе не было), то хочется знать, кто и что делал с ним после меня.

Для этих целей я написал на питоне скрипт (точнее, пару скриптов - второй помогает проще обрабатывать результаты первого), который сейчас выкладываю для использования всеми желающими:

https://yadi.sk/d/MxhOXjvhe6wa6g

Отдельной документации по нему нет, я постарался описать всё необходимое посредством комментариев в коде на русском языке. Для работы нужен Pyhton с установленными модулями requests и more_itertools (оба можно установить с помощью утилиты pip). Разработка и практическое использование производилось на связке Windows 10 + Python 3.9. Под другими версиями не проверялось, но скорее всего заработает и более старых (ну, конечно, на Python 2.7 не пойдёт smile).

Важный момент - скрипт делает только пакетные запросы к API, и нигде не спускается до уровня "отдельный запрос для каждого объекта". Поэтому даже когда число исправленных пользователем объектов исчисляется сотнями тысяч, он отрабатывает буквально за несколько минут.

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

Last edited by AnakinNN (2021-01-05 19:20:38)

Offline

#2 2020-12-15 04:32:21

П3тр0виЧъ
Member
From: Новотроицк, Оренбургская
Registered: 2016-12-08
Posts: 117

Re: Скрипт для наблюдения за своими правками

AnakinNN wrote:

к своему вкладку

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

Offline

#3 2020-12-15 08:04:38

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 8,202

Re: Скрипт для наблюдения за своими правками

И как это на практике, что делать в тем ворохом из сотни тысяч точек что ты когда то-то трогал?

Offline

#4 2020-12-15 11:40:21

AnakinNN
Member
From: Нижний Новгород
Registered: 2017-08-07
Posts: 598
Website

Re: Скрипт для наблюдения за своими правками

П3тр0виЧъ wrote:

Крайний вариант вахтёрства, прям Совой запахло. Вместо того, чтобы внести больше правок, трястись над своими точками, как Кощей над златом.

Напомнило анекдот про долгоносика в колхозе. Тогда и OSMCha - тоже вахтёрство. Но обычно всё же хочется, чтобы потраченное на рисование время не было обращено в ничто стараниями отдельных уникумов. Вон в НЯКе народ плакался о том, как плохо не иметь возможности мониторить правки яндексовых роботов, потому что фигню творят и не вычистишь потом за ними.

Сова, насколько я помню, вопросы и претензии к чужим правкам писал сотнями и грозился всё откатить. Я за несколько лет пользования скриптом заметил буквально с пяток случаев порчи данных, по которым писал комментарии к чейнжсетам. В одном случае оказалось, что человек вносит правки по Яндекс.Панорамам от 2017 года, а я на месте был летом 2020. В другом наломала дров местная таксокомпания, которая меняла все name чёрт-те как, лишь бы у них в программе удобнее искалось. А иногда при просмотре изменений безо всяких вопросов узнавал о новых принятых тегах (например, line_management), которые начал использовать в дальнейшем сам.

freeExec wrote:

И как это на практике, что делать в тем ворохом из сотни тысяч точек что ты когда то-то трогал?

Ну вот у меня сейчас 772 чейнжсета, затрагивающих порядка 112k точек, 10k веев и 2k отношений. С 13 ноября по сегодняшний день был изменён 101 объект из них. Большая часть правок - уточнение геометрии отдельных нодов. То есть отсматривается всё за 10 минут.

Last edited by AnakinNN (2020-12-15 11:54:01)

Offline

#5 2020-12-15 12:39:36

pfg21
Member
From: Чебоксары
Registered: 2012-10-18
Posts: 3,887

Re: Скрипт для наблюдения за своими правками

-

Last edited by pfg21 (2020-12-15 13:03:38)

Offline

#6 2020-12-15 13:17:40

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 8,202

Re: Скрипт для наблюдения за своими правками

Да, интересно, оказалось hdyc имеет такую статистику - у скольких объектов ты последний автор.
Для точек ~20% были после меня изменены, для линий это ~35%. И вроде бы не много, но в абсолютных цифрах это порядка 600 в неделю. И по большей части врятли кого сильно интересует кто там дальше уточняет, нарисованный тобой по IRS лес, реку или поле.
Мне казалось, что тех, кого это интересует, хотят следить всё же за POI. И возможно не только за своими, а скажем за магазинами конкретной сети. Вот хочу мониторить все Магниты в стране, например.

Offline

#7 2020-12-15 13:37:08

AnakinNN
Member
From: Нижний Новгород
Registered: 2017-08-07
Posts: 598
Website

Re: Скрипт для наблюдения за своими правками

freeExec wrote:

Мне казалось, что тех, кого это интересует, хотят следить всё же за POI. И возможно не только за своими, а скажем за магазинами конкретной сети. Вот хочу мониторить все Магниты в стране, например.

Я как раз POI в основном пропускаю, там мне чаще попадают правки от RocketData. Тот кейс был про ЛЭП - в 2017 году на Яндексе ЛЭП в Покровском-Стрешнево заброшена, а сейчас она уже восстановлена и обновлена. Тема электроэнергетики интересна малому числу маперов, поэтому если там кто-то накосячит, то неизвестно сколько времени в базе пробудут неверные данные. Но в целом, как я заметил, чаще правят геометрию, чем теги. Была идея сделать вывод только в том случае, если был удален объектов с тегом или изменены теги на существующем, но в API тогда придется делать вызов на каждый объект и парсить его историю, и тогда скрипт будет работать сутки.

Offline

#8 2020-12-15 13:44:16

Miroff
Member
Registered: 2010-01-26
Posts: 154

Re: Скрипт для наблюдения за своими правками

AnakinNN wrote:

Была идея сделать вывод только в том случае, если был удален объектов с тегом или изменены теги на существующем, но в API тогда придется делать вызов на каждый объект и парсить его историю, и тогда скрипт будет работать сутки.

Можно же обращаться к локальной базе

Offline

#9 2020-12-15 13:49:35

AnakinNN
Member
From: Нижний Новгород
Registered: 2017-08-07
Posts: 598
Website

Re: Скрипт для наблюдения за своими правками

Miroff wrote:

Можно же обращаться к локальной базе

Тогда надо место (много места), где её локально хранить + будет всегда некий лаг между ней и актуальным состоянием.

Offline

#10 2020-12-16 05:46:01

istepan
Member
Registered: 2014-11-11
Posts: 193

Re: Скрипт для наблюдения за своими правками

П3тр0виЧъ wrote:

Крайний вариант вахтёрства, прям Совой запахло.

Полезный скрипт.
Я вношу правки там где физически бываю и часто вижу как всякие apple и прочие переписчики населения начинают вредить.

Я был тут несколько месяцев назад, а кто-то посмел внести данные за 17-й год. Я хочу следить за этим!

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

Offline

#11 2020-12-16 10:51:21

illiapoint
Member
Registered: 2017-07-25
Posts: 10

Re: Скрипт для наблюдения за своими правками

Как по мне - инструмент - это всегда хорошо. Есть те, кому он интересен. А есть те, кто колесят по просторам страны и правят все подряд на площадях в тысячи километров - тогда да им такой инструмент, может, и не нужен.

Offline

#12 2020-12-18 15:38:42

amgusha
Member
Registered: 2019-01-26
Posts: 19

Re: Скрипт для наблюдения за своими правками

Скрипт MakeWatchList.py не хочет работать и падает с ошибкой

  File "./MakeWatchList.py", line 87, in <module>
    for chunk in grouper(objects[obj_type], CHUNK_SIZE, None):
  File "/usr/lib/python3/dist-packages/more_itertools/recipes.py", line 295, in grouper
    args = [iter(iterable)] * n
TypeError: 'int' object is not iterable

Python 3.7, Debian Linux 10.7

Last edited by amgusha (2020-12-18 15:43:34)

Offline

#13 2020-12-23 20:44:38

Imp_GL
Member
Registered: 2014-08-17
Posts: 822
Website

Re: Скрипт для наблюдения за своими правками

А потом сойдутся в бою два скрипта...

Offline

#14 2020-12-24 09:16:22

AnakinNN
Member
From: Нижний Новгород
Registered: 2017-08-07
Posts: 598
Website

Re: Скрипт для наблюдения за своими правками

amgusha wrote:

Python 3.7, Debian Linux 10.7

Я под Linux не проверял (и сильно не уверен, что в обозримом будущем на это будет время sad ), но скорее всего дело в том, что какой-то кривой модуль more_itertools встал.

Offline

#15 2021-01-05 13:26:22

XnL
Member
Registered: 2018-06-23
Posts: 8

Re: Скрипт для наблюдения за своими правками

Ссылка на скрипты не работает.

Offline

#16 2021-01-05 19:21:05

AnakinNN
Member
From: Нижний Новгород
Registered: 2017-08-07
Posts: 598
Website

Re: Скрипт для наблюдения за своими правками

Да, проводил небольшую реорганизацию у себя на Я.Диске. Сейчас должна быть рабочая.

Offline

#17 2021-01-06 02:31:54

luiswoo
Member
Registered: 2010-09-11
Posts: 1,563

Re: Скрипт для наблюдения за своими правками

Processed 5979 from 5979 relations, total 3877 objects changed
sh: pause: команда не найдена

Без ограничения по территории, как-то сложно 3877 строк проверить. Если это количество строк. Как и не слишком принципиально, что с теми объектами, созданными 10 лет назад в Астрахани…
Не знаю, должна ли быть команда pause в пятом баше, и какое отношение к этому имеет питон, но выдало, что выдало. Сценарий завершился штатно, в процессах не висит.

Offline

#18 2021-01-06 08:19:28

AnakinNN
Member
From: Нижний Новгород
Registered: 2017-08-07
Posts: 598
Website

Re: Скрипт для наблюдения за своими правками

luiswoo wrote:

Без ограничения по территории, как-то сложно 3877 строк проверить. Если это количество строк. Как и не слишком принципиально, что с теми объектами, созданными 10 лет назад в Астрахани…

Можно изменить константу TIME_START с 1 января 2000 на более позднюю. Что будет значить следующее: "те объекты, которые я правил до этого момента (ибо по этой константе отсекаются загружаемые чейнжсеты) - фиг с ними, следим только за теми, что потрогал после".

luiswoo wrote:

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

Это просто последняя команда в скрипте - питон вызывает функцию pause() операционной системы. Нужно в винде, чтобы окно консоли сразу не закрывалось после отработки, а можно было прочитать результат. Если команды в системе нет - и правда не страшно.

Offline

#19 2021-01-11 15:51:00

Stratula
Member
Registered: 2020-10-06
Posts: 13

Re: Скрипт для наблюдения за своими правками

Спасибо за скрипт, с ним интересно.
Вы можете добавить возможность игнорировать определённые объекты?
Условно я добавляю в список "relation/12104967" и скрипт его пропускает.

Offline

Board footer

Powered by FluxBB