123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import requests
- import json
- class News:
- """Содержит методы для получения новостей с VIOMS API.
- Для инициализации нужен ID списка рассылки ВИОМС"""
- def __init__(self, news_channel_id: int, is_getting_old=False) -> None:
- self.channel_id = news_channel_id
- self.news_id = 1 if is_getting_old else 0
- self.news = []
- def check_news(self) -> dict:
- """Получает информацию в формате json с api ВИОМС. Возвращает Объект
- с ошибками или с количеством новых записей"""
- url = f"https://www.vioms.ru/api/mobile/v2/email_lists/{self.channel_id}/mailings.json?page=1"
- try:
- r = requests.get(url, timeout=4)
- except requests.exceptions.RequestException:
- return {"error": f"Connection error. URL: {url}"}
- try:
- news = json.loads(r.text)["mailings"]
- except json.JSONDecodeError or KeyError:
- return {"error": f"Not valid responce from URL: {url}."}
- news_id = self.news_id
- # FIX сортировка новостей по их айди в сторону уменьшения
- news.sort(key=(lambda i : int(i['id'])), reverse=True)
- self.news_id = int(news[0]["id"])
-
- if news_id != 0:
- self.news = [n for n in news if n["id"] > news_id]
- return {"news_count": len(self.news)}
- def get_news_items(self) -> list:
- """Возвращает список с объектами по каждой новости
- (заголовок, ссылка, полный HTML)"""
- news_data = []
- for n in self.news:
- url = f"https://www.vioms.ru/api/mobile/email_lists/{self.channel_id}/mailings/{n['id']}.json"
- r = requests.get(url)
- news_item = json.loads(r.text)
- news_item = self.get_post_by_id(self.channel_id, n['id'])
- news_data.append(news_item)
- self.news = []
- return news_data
- def get_post_by_id(self, list_id: int, post_id: int):
- url = f"https://www.vioms.ru/api/mobile/email_lists/{list_id}/mailings/{post_id}.json"
- r = requests.get(url)
- news_item = json.loads(r.text)
- return {
- "title": news_item["subject"].strip(),
- "link": f"https://www.vioms.ru/mailings/{post_id}/full",
- "html": news_item["rendered_html"]
- }
|