Блог пользователя thebvog

Автор thebvog, 10 лет назад, По-русски

С появлением CodeForces API стало проще реализовать различные идеи, которые раньше можно было сделать только через парсинг. Предлагаю вашему вниманию небольшую утилитку на Python-е. Изначально она писалась под conky и парсила список контестов, но сейчас, с появлением API, появилась возможность выделить работу с ним в отдельный класс. Из старого функционала пока позволяет только просматривать через conky текущую информацию о пользователе и грядущих контестах, скоро допилю оставшуюся с хаками и таблицей результатов. Поэтому кому нужно отображение информации в conky или просто класс для работы с CodeForces API, надеюсь пригодится. Запуск:

conky.py [options]

Пример для конфигурации conky (обновляется каждые 30 минут):

${execpi 1800  python ~/cfclass/conky.py --next-contest-list --div1 --hr --colors}

Параметры:

  • --next-contest-list — список грядущих контестов

  • --user-info handle,...,handle — информацию о пользователях, заданных списком

  • --current-standings handle,...,handle — таблицы результатов всех соревнований, в которых указанные пользователи принимают участие

  • --div1, --div2 — фильтрация списка по дивизионам

Использование класса:

from cfclass import CodeForces
cf = CodeForces()
result = cf.getContestList(gym=False)

Со включенным параметром --color:

Без него:

Показывает таблицы результатов всех соревнований, в которых указанные пользователи принимают участие: ${execpi 300 python ~/cfclass/conky.py --current-standings --hr --colors --handles subscriber,stevenkplus}

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

UPD добавил скриншоты.

UPD2 добавлены некоторые фичи и скриншоты

  • Проголосовать: нравится
  • +39
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится -11 Проголосовать: не нравится

Жаль что у меня сейчас стоит Windows :/

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Все понял. А как поправить цвета на Windows?

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Отключить цвета можно, убрав флаг --color. Выбор цвета пока отсутствует, добавлю в ближайшем коммите.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Нет, на Windows цветов нет с флагом --color.

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Вот эту ${execpi 1800 python ~/cfclass/conky.py --next-contest-list --hr --colors} строчку вставлять нужно в конфигурацию conky, или что там есть под windows, а если хотите увидеть как он выводит в консоль, то так:

        conky.py --next-contest-list --hr --colors
        
»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

как по мне парсить контесты лучше, чем брать их через api. страница /contests весит примерно 15кб, а запрос (даже без gym=true) сейчас 80кб и будет расти вечно.

  • »
    »
    10 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Думаю, это не проблема, просто ввести параметр типа future=true, который отображает только грядущие контесты, а для прошедших ввести фильтр top, например. JSON приятнее обрабатывать, да и парой десятков килобайт никого не испугаешь. P.S. это как feature request к CodeForces API.

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Ты пишешь:

if not result:
    return False
return result

Я бы написал:return result or False или даже return result.

result — возвращаемое значение CodeForces._request может быть None или словарём.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +9 Проголосовать: не нравится

    Согласен, return result or False — короче, спасибо. Я не хочу делать просто return result, т.к. потом таким способом, по моему мнению, логичнее проверять результат как if result.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Как ты думаешь, что выведет следующий код?

      result = None #instead of False
      if result:
          print "We can work with result"
      else:
          print "fail result"
      
      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        "fail result", бесспорно. Просто моё предпочтение проверять переменную так в if, чтоб она была либо словарем, либо False.