shikhalev.*

Анонс

Написал скрипт для автопостинга выборок из iNaturalist в tg-каналы. Скрипт делает выборку по произвольно сконфигурированным параметрам (которые, разумеется, должны поддерживаться iNaturalist API), затем берет случайное наблюдение, постит его, а остальные складывает в пул, который будет задействован, если свежие кончатся. Это если коротко.

Более подробно, как это все работает, а главное — как настраивается, я описал в README проекта inat-get/inat-channel. В том числе и на русском. Здесь пара моментов:

  • Наблюдения не дублируются.

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

  • Форматирование делается ERB-шаблоном, т.е. максимально гибко.

  • Скрипт прекрасно работает на GitHub Actions, запускаясь по расписанию. Для контроля неповторямости необходимо настроить обратный пуш, чтобы данные, которые хранятся в JSON-файлах, сохранялись в репозитории между сеансами.

  • Используется iNaturalist API v2, которое находится в ранней бете и может поломаться. Однако, на первой версии пришлось бы вытягивать в десятки, если не в сотни раз бо́льшие объемы данных, что малоприемлемо.

Примеры

На реальных примерах работу скрипта можно посмотреть на двух моих каналах:

Подписывайтесь, ставьте лайки, комментируйте… Отелеграмливайте свои проекты. В общем, велкам.

Замечания

Из разряда «сегодня я узнал, что…»

iNaturalist API v2

Вторая версия API позволяет выбирать получаемые поля. С учетом того, что поля сами по себе зачастую составные и объемные, это очень важный момент.

У меня есть смутное ощущение, что отвечает вторая версия чуть медленнее, чем первая (в смысле пинга), но а) я могу ошибаться — это лишь ощущение, б) не сказать, чтоб задержка была прям большой, и в) когда эта версия выйдет из бе­ты и станет основной, думаю, на нее выделят мощности.

Schedule в GitHub Actions

Это вполне документировано, что нет никаких гарантий своевременного запуска. Задержка зависит от текущей загрузки серверов и всегда разная. И она может быть реально большой — до часа у меня пока ни разу не доходило, но 55 минут — вполне.

Запланированные сообщения

Через Telegram Bot API нельзя создать запланированное сообщение. Это можно сделать только через MTProto API, но там нужно использовать человеческий аккаунт, а не ботовый… Так что придется смириться с тем, что посты выходят не по точному расписанию, поскольку рисковать своим собственным акком я не собираюсь.

Эмодзи

В сообщениях Telegram нельзя вставлять произвольные иконки, переключать шрифты и т.д. Можно использовать эмодзи, но они выглядят, на мой взгляд, аляповато. Так что, хотя я их использовал в шаблоне по умолчанию для независимости от языка, но в своих каналах из шаблона убрал. Как выглядит пост, разукрашенный эмодзи, можно посмотреть тут — https://t.me/urals_nature/1541 — это один из тех постов, которые были сделаны в процессе отладки/наладки.

Текущая версия и планы

Сейчас версия 0.9.0, которую я бы охарактеризовал как довольно уверенную бету.

Думаю неторопливо (очень неторопливо) сделать тесты и документацию, упорядочить нотификацию админа (в случае сбоев или исчерпания пула), после чего зафиксировать версию 1.0.

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