Сергей Алексеев
- Site, penza-afisha.ru
- API, vk.com/dev
Кузнецов Артём
- Site, https://rostokhall.ru
- API, http://dev.timepad.ru
License: MIT License
Сергей Алексеев
Кузнецов Артём
В наш модуль добавить базовый абстрактный класс для наших парсеров
https://docs.python.org/3/library/abc.html#abc.abstractmethod
class BaseParser:
name: str
def __init__(self, name):
self.items = []
def get_request_params(self) -> Tuple[str, str, dict]:
"""
Это метод должен возвращать кортеж следующих данных
- имя метода requests (get, post)
- url
- kwargs, которые будут добавлены в параметры запроса
"""
pass
def parse(self, string: str) -> None:
"""
Это метод должен парсить страницу и добавлять найденные events в
items
"""
pass
Fix bugs Parsers: Bar60 and Rostokhall
Добавить class Fetcher
class Fetcher:
def __init__(self, parsers: List[BaseParser]):
self.parsers = parsers
def __call__(self):
"""
Данная функция должна в цикле проходить по всем классам парсеров, создава их
инстансы паресеров и последовательно вызывать у них get_request_params,
получать параметры запроса делать запрос, залогировав начало и конец запроса по
name парсера, далее передавать результат в методе парсе того же самого парсера
и добавлять результат в results. Каждый этап должен логироваться, не забываем про
обработку ошибок
"""
results = []
class Task:
def __init__(self, timeout, runner, callback):
self.timeout = timeout # в секундах
self.runner = runner # Сама функция, которая будет запускаться, в нашем случае Fetcher
self.callback = callback # Сюда мы будем передавать результат, сохранить ивенты
self.next = datetime.utcnow()
@property
def need_run(self, datetime);
"""
тут надо реализовать проверку того что мы должны запустить данные таск,
в нашем случае просто проверяем что self.next меньше времени, которое мы передали
"""
def update_next(self):
"""
Тут обновляем наш next
"""
Сделать команду runscheduler
https://docs.djangoproject.com/en/3.0/howto/custom-management-commands/
Данная функция должна в ход принимать на вход список ивентов, в формате словаря, проверять что такого нет в базе и если нет то сохранять, возвращает она список id новых ивентов
Токен бота передавать аргументом в командной строке
Добавить модель User c полями
Добавить тесты
Текущие API routes изменить:
/api/v1/public/
Используемое API routes:
/api/v1/private/places
/api/v1/private/events
Добавить дополнительное поле owner для модели Place, null=True, blank=True
Добавление месте, форма должна проверять имена на уникальность.
Добавление события, список мест это выпадающий список с местами, который создал пользователь.
Для команды /auth
нам генерится токен и возвращается ссылка типа
http://localhost:3000/auth?token={token}
. Это токен мы сохраняем в React приложении в localStorage
, шлем запрос на /api/v1/auth/success
(тут шлем сообщение в телегу Login success
) и потом все запросы отправляем на сервер с нашим токеном с заголовком
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
. И когда мы авторизованы у нас должна появится кнопка logout, слать запрос /api/v1/auth/logout
, который будет удалять данный токен из базы и далее слать сообщение в телегу Logout success
и в React приложении удаляем токен из localStorage
Добавить класс планировщик
class Scheduler:
def __init__(self, tasks, timeout=1):
self.tasks = tasks # список задач
self.timeout = timeout
def run(self):
"""
Данная функция в бесконечном цикле проходит по все задачам, проверяет пришло ли
время их запускать методом need_run передавая туда текущее время,
если да то последовательно вызвает runner, полученный результат
передает в callback и делает update_next. После того как пройдет по все задачам,
засыпает на timeout
"""
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.