Сервис по определению принадлежности даты к выходному дню (API производственного календаря)

    Добрый день, коллеги! Совсем недавно решил выложить в общий доступ свой маленький проект, связанный с определением выходного дня (очень не хватает слова «выхòдность», т.е. принадлежность к выходному дню). Мне это понадобилось, когда я составлял план срочных бэкапов и их переливки из одного офиса в другой, дабы не тревожить пользователей в рабочие дни.

    Основная суть проекта проста — в 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


    1. Добавить ещё стран (хотя бы ex-USSR страны)
    2. Добавить форматы для вывода JSON/XML/YAML
    3. Добавить расширенный режим

    Послесловие


    Я буду очень рад, если у сервиса прибавится пользователей (разумеется, это повлияет на скорость разработки и добавления фич) и всегда рад пообщаться в Telegram и по почте andrey@esin.name
    Поделиться публикацией
    Комментарии 24
      0

      Выходной день это вместе с праздниками? Если нет, то чем не устраивает обычный расчет Юлианская дата? А если да, то насколько можно доверять по заполнению праздничных дней по СНГ?

        0

        Upd: нарыл еще такой сервис http://api1.vasha-ats.ru/daytype.php?date=2017-07-22
        Как понимаю, совпадает с вашим по функционалу

          0
          Там только за 2016 и 2017 годы. Хотя уже есть за 2018 год.
            0
            Спасибо, но опять же, нельзя сократить до простейшего ответа в 1 или 0 (но это моё мнение и сервис писал именно с этим учётом)
            0
            Да, всё верно. Выходной, это праздники и прочее, несколько позже добавлю сокращённые дни.
            В данный момент, только РФ. (Обязуюсь добавить в ближайшее время другие страны). Данные берутся из указов МинТруда и сверяются с Консультант+ и Гарант.
            +1
            (кстати, полный список загруженных годов и стран, можно узнать тут).

            404 ошибка на https://isdayoff.ru/db.


            Но, если честно, web-сервис для определения выходного это какой-то перебор. Я пользуюсь numpy.is_busday и это одна строчка + определение календаря, если мне нужно добавить какие-то специфические календари, типа когда была открыта биржа или что-то еще. Вот это и есть одна-две строчки.

              +1
              За 404 дико извиняюсь. Восстановил

              Но, если честно, web-сервис для определения выходного это какой-то перебор.

              CalaaS (Calendar-as-a-Service, только что придумал). Вы пишите на python, как понимаете, возможностей достаточно много и можно подключить любые библиотеки, тот же bash имеет несколько больше ограничений, поэтому простое curl… и сервис на стороне часто спасает.
                0

                ладно, уговорили.


                тогда где возможность выбора календаря? (знаю, что сейчас один, но, скажем, добавите вы туда выходные в украине или сша — как выбрать?)

                  0

                  В данный момент вижу 2 пути:


                  1. Просто параметр cc (с кодом страны из ISO) после даты — наверно, самое простое
                  2. Использование поддомена вместо параметра (короче на целых 3 символа) — и в плане балансировки этот способ интереснее
              0
              Э-э-э-э. Извините конечно, но определять выходной день или нет можно просто, делением и проверкой возврата?
              И делается это скриптом написанном на коленке, единственная проблема прикрутить все праздники для разных стран, хотя это вопрос времени, парсить их потихоньку и добавлять.
              А где https?

              собственно сервису проверки даты он нужен, как козе рукав.
              Добавить форматы для вывода JSON/XML/YAML

              Вот это правильно, но все же если апи то излишне, каждый сам может обработать ответ в нужном виде, если только забирать с сервиса список выходных за год, но зачем?

              Добавить расширенный режим

              Можно поподробнее что туда будет входить?

              И к слову а почему 22 декабря 2222 это некорректная дата?
                0

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


                Год некорректный скорее всего потому, что для него пока ещё не опубликован трудовой календарь.

                  0
                  Э-э-э-э. Извините конечно, но определять выходной день или нет можно просто, делением и проверкой возврата?
                  И делается это скриптом написанном на коленке, единственная проблема прикрутить все праздники для разных стран, хотя это вопрос времени, парсить их потихоньку и добавлять.


                  Как ответили чуть ниже, праздники (в частности в РФ, примерно летом МинТруд обозначает приказом), угадать — невозможно, а в целом это и есть некая цель — прикрутить праздники и выходные разных государств, как и написал в TODO

                  Вот это правильно, но все же если апи то излишне, каждый сам может обработать ответ в нужном виде, если только забирать с сервиса список выходных за год, но зачем?

                  Как говорится, на вкус и цвет, все фломастеры разные, мне удобно работать с plain данными, т.к. работаю из bash, я более чем уверен, что есть люди, которым проще скормить кусок JSON, и работать как с объектом. Это уже как по накатанной.

                  Можно поподробнее что туда будет входить?

                  Во-первых, самое простое — это возврат предпраздничного дня (код ответа 2), во-вторых, чуть расширеннее возврат данных, полная дата и т.д.

                  И к слову а почему 22 декабря 2222 это некорректная дата?

                  Да, Вы оптимист :) Нет данных по этому году, пока что, поэтому ошибка (хотя я вот смотрю так, думаю, да, вероятно, имеет смысл добавить динамическое определение выходного). Спасибо.
                    0
                    собственно сервису проверки даты он нужен, как козе рукав.

                    ну почему же? зачем всем видеть, что айпи 33.33.33.33 решил узнать выходной ли пятое апреля 18 года?

                    0
                    Отличное начинание!
                    Только на 2 года вперёд?
                    https://isdayoff.ru/20190729 = 100
                      0
                      Увы, да.
                      Актуальная база находится здесь: https://isdayoff.ru/db

                      (МинТруд пока не в курсе, как назначит праздники в 2019 году)
                        0

                        а почему код ошибки 100? почему бы не сделать простое и всем понятное: 404, если года в календаре нет?

                          0
                          Так же хорошее замечание, но код возврата сервиса <> коду возврата HTTP (но ваше замечание весьма в тему и приму его во внимание. Спасибо)
                      0

                      а может iso формат даты лучше? во-первых документированный, во-вторых читается глазами легче, а экономия на двух дефисах минимальна

                        0
                        Пожалуй да, удобно при запросе через date -I
                        (кстати YYYYMMDD — так же ISO 8601:2004, или мы про разные ISO говорим?)
                          0
                          вы правы, с точки зрения ISO8601 YYYYMMDD правильный формат, я почему-то был уверен что обязательны разделители, привычка к YYYY-MM-DD видимо сказалась
                        0
                        А где ссылка на гитхаб?
                        0
                        Надеюсь, вы учли, что сб и вс не всегда выходные.
                          0
                          Да, конечно
                          Возьмём например 28 апреля 2018 года (был перенос выходного с 28 на 30 апреля по указу в РФ):
                          curl https://isdayoff.ru/20180428
                          0
                          

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое