Основная суть проекта проста — в 1-2 строки кода узнать выходной день или нет.
Пока возможно проверять только 1 день, только для России и начиная с 2010 года (кстати, полный список загруженных годов и стран, можно узнать тут).
Для проверки, например, 24 июля 2017 года, необходимо и достаточно:
curl https://isdayoff.ru/20170724
0
Ответ 0, а это значит будний день. Подобным образом можно проверить любой день в этом и предыдущих годах. Если будет задана некорректная дата, то ответ будет 100.
Почему не выбрать аналоги?
В процессе решения проблемы, я рассматривал аналоги, наиболее яркие из всех, это http://basicdata.ru/api/calend/ и http://xmlcalendar.ru/
1. Слишком (слишком-слишком) много информации (приходится парсить, на bash это делать сложно — проще просто получить готовый ответ от сервиса)
2. А где https?
TODO
- Добавить ещё стран (хотя бы ex-USSR страны)
- Добавить форматы для вывода JSON/XML/YAML
- Добавить расширенный режим
Послесловие
Я буду очень рад, если у сервиса прибавится пользователей (разумеется, это повлияет на скорость разработки и добавления фич) и всегда рад пообщаться в Telegram и по почте andrey@esin.name
Комментарии (24)
vasechka
24.07.2017 17:59+1(кстати, полный список загруженных годов и стран, можно узнать тут).
404 ошибка на https://isdayoff.ru/db.
Но, если честно, web-сервис для определения выходного это какой-то перебор. Я пользуюсь numpy.is_busday и это одна строчка + определение календаря, если мне нужно добавить какие-то специфические календари, типа когда была открыта биржа или что-то еще. Вот это и есть одна-две строчки.
la_stik
24.07.2017 22:03+1За 404 дико извиняюсь. Восстановил
Но, если честно, web-сервис для определения выходного это какой-то перебор.
CalaaS (Calendar-as-a-Service, только что придумал). Вы пишите на python, как понимаете, возможностей достаточно много и можно подключить любые библиотеки, тот же bash имеет несколько больше ограничений, поэтому простое curl… и сервис на стороне часто спасает.vasechka
24.07.2017 22:44ладно, уговорили.
тогда где возможность выбора календаря? (знаю, что сейчас один, но, скажем, добавите вы туда выходные в украине или сша — как выбрать?)
la_stik
24.07.2017 23:30В данный момент вижу 2 пути:
- Просто параметр cc (с кодом страны из ISO) после даты — наверно, самое простое
- Использование поддомена вместо параметра (короче на целых 3 символа) — и в плане балансировки этот способ интереснее
den_golub
24.07.2017 19:29Э-э-э-э. Извините конечно, но определять выходной день или нет можно просто, делением и проверкой возврата?
И делается это скриптом написанном на коленке, единственная проблема прикрутить все праздники для разных стран, хотя это вопрос времени, парсить их потихоньку и добавлять.
А где https?
собственно сервису проверки даты он нужен, как козе рукав.
Добавить форматы для вывода JSON/XML/YAML
Вот это правильно, но все же если апи то излишне, каждый сам может обработать ответ в нужном виде, если только забирать с сервиса список выходных за год, но зачем?
Добавить расширенный режим
Можно поподробнее что туда будет входить?
И к слову а почему 22 декабря 2222 это некорректная дата?x0wl
24.07.2017 19:45Вы не учитываете переноса выходных в связи с праздниками. Алгоритмом этот перенос посчитать невозможно, потому что он определяется волей левой пятки Минтруда.
Год некорректный скорее всего потому, что для него пока ещё не опубликован трудовой календарь.
la_stik
24.07.2017 21:59Э-э-э-э. Извините конечно, но определять выходной день или нет можно просто, делением и проверкой возврата?
И делается это скриптом написанном на коленке, единственная проблема прикрутить все праздники для разных стран, хотя это вопрос времени, парсить их потихоньку и добавлять.
Как ответили чуть ниже, праздники (в частности в РФ, примерно летом МинТруд обозначает приказом), угадать — невозможно, а в целом это и есть некая цель — прикрутить праздники и выходные разных государств, как и написал в TODO
Вот это правильно, но все же если апи то излишне, каждый сам может обработать ответ в нужном виде, если только забирать с сервиса список выходных за год, но зачем?
Как говорится, на вкус и цвет, все фломастеры разные, мне удобно работать с plain данными, т.к. работаю из bash, я более чем уверен, что есть люди, которым проще скормить кусок JSON, и работать как с объектом. Это уже как по накатанной.
Можно поподробнее что туда будет входить?
Во-первых, самое простое — это возврат предпраздничного дня (код ответа 2), во-вторых, чуть расширеннее возврат данных, полная дата и т.д.
И к слову а почему 22 декабря 2222 это некорректная дата?
Да, Вы оптимист :) Нет данных по этому году, пока что, поэтому ошибка (хотя я вот смотрю так, думаю, да, вероятно, имеет смысл добавить динамическое определение выходного). Спасибо.
vasechka
24.07.2017 22:46собственно сервису проверки даты он нужен, как козе рукав.
ну почему же? зачем всем видеть, что айпи 33.33.33.33 решил узнать выходной ли пятое апреля 18 года?
solnechnyi
24.07.2017 21:45Отличное начинание!
Только на 2 года вперёд?
https://isdayoff.ru/20190729 = 100la_stik
24.07.2017 22:04Увы, да.
Актуальная база находится здесь: https://isdayoff.ru/db
(МинТруд пока не в курсе, как назначит праздники в 2019 году)
GerrAlt
25.07.2017 10:22а может iso формат даты лучше? во-первых документированный, во-вторых читается глазами легче, а экономия на двух дефисах минимальна
la_stik
25.07.2017 13:17Пожалуй да, удобно при запросе через date -I
(кстати YYYYMMDD — так же ISO 8601:2004, или мы про разные ISO говорим?)GerrAlt
25.07.2017 16:00вы правы, с точки зрения ISO8601 YYYYMMDD правильный формат, я почему-то был уверен что обязательны разделители, привычка к YYYY-MM-DD видимо сказалась
Varfalomey
Выходной день это вместе с праздниками? Если нет, то чем не устраивает обычный расчет Юлианская дата? А если да, то насколько можно доверять по заполнению праздничных дней по СНГ?
Varfalomey
Upd: нарыл еще такой сервис http://api1.vasha-ats.ru/daytype.php?date=2017-07-22
Как понимаю, совпадает с вашим по функционалу
Lertmind
Там только за 2016 и 2017 годы. Хотя уже есть за 2018 год.
la_stik
Спасибо, но опять же, нельзя сократить до простейшего ответа в 1 или 0 (но это моё мнение и сервис писал именно с этим учётом)
la_stik
Да, всё верно. Выходной, это праздники и прочее, несколько позже добавлю сокращённые дни.
В данный момент, только РФ. (Обязуюсь добавить в ближайшее время другие страны). Данные берутся из указов МинТруда и сверяются с Консультант+ и Гарант.