2022-06-02 12:56:03 +04:00
|
|
|
import json
|
2025-02-18 17:40:36 +04:00
|
|
|
import os
|
2022-07-13 15:48:01 +04:00
|
|
|
from datetime import datetime, timedelta
|
2022-06-02 12:56:03 +04:00
|
|
|
|
|
|
|
import pyodbc
|
|
|
|
import requests
|
|
|
|
from bs4 import BeautifulSoup
|
|
|
|
|
2025-02-18 17:40:36 +04:00
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv() # take environment variables from .env.
|
2022-07-13 15:48:01 +04:00
|
|
|
|
2025-02-18 17:40:36 +04:00
|
|
|
messageTo = os.getenv('MESSAGE_IS')
|
2022-09-13 09:56:27 +04:00
|
|
|
driverFrom = {'lxc': '/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.0.so.1.1', 'windows': '{ODBC Driver 17 for SQL Server}'}
|
2022-07-13 15:48:01 +04:00
|
|
|
|
2025-02-18 17:40:36 +04:00
|
|
|
bot_token = os.getenv('TELEGRAM_BOT_TOKEN')
|
2022-07-13 15:48:01 +04:00
|
|
|
|
2025-02-18 17:40:36 +04:00
|
|
|
server = os.getenv('DB_SERVER')
|
|
|
|
database = os.getenv('DB_DATABASE')
|
|
|
|
username = os.getenv('DB_USERNAME')
|
|
|
|
password = os.getenv('DB_PASSWORD')
|
2022-06-02 12:56:03 +04:00
|
|
|
cnxn = pyodbc.connect(
|
2022-07-13 15:48:01 +04:00
|
|
|
'DRIVER=' + driverFrom.get('lxc') + ';SERVER=' + server + ';' +
|
2022-06-03 08:08:40 +00:00
|
|
|
'DATABASE=' + database + ';UID=' + username + ';PWD=' + password + ';Encrypt=no')
|
2022-06-02 12:56:03 +04:00
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
with open('datetime.json') as json_file:
|
2022-07-13 15:48:01 +04:00
|
|
|
strDatetime = json.load(json_file)
|
|
|
|
date = datetime.fromisoformat(strDatetime) + timedelta(microseconds=10)
|
|
|
|
#MS SQL хранит на одно значение больше в микросекундах, поэтому 713372 (Python) < 7133722 (MS SQL)
|
|
|
|
|
2022-06-02 12:56:03 +04:00
|
|
|
|
|
|
|
cursor = cnxn.cursor()
|
2022-06-06 19:52:58 +04:00
|
|
|
cursor.execute("SELECT Id, Title, Body, DateCreate FROM Newses "
|
|
|
|
"WHERE Newses.IsDeleted = 0 AND Newses.DateCreate > ? "
|
2022-06-02 12:56:03 +04:00
|
|
|
"ORDER BY Newses.DateCreate", date) # например - 2022-04-02 11:19:29.778400
|
|
|
|
row = cursor.fetchone()
|
|
|
|
|
|
|
|
while row:
|
|
|
|
soup = BeautifulSoup(row[2], features="html.parser")
|
|
|
|
textNews = soup.get_text('\n').replace("\n\n\n\n", "\n").replace("\n\n\n", "\n").replace("\n\n", "\n")
|
2023-02-03 10:21:56 +04:00
|
|
|
if len(textNews) > 3000:
|
|
|
|
textNews = textNews[:3000] + '...'
|
2022-06-03 08:08:40 +00:00
|
|
|
params = {'chat_id': messageTo.get('is'),
|
2022-06-02 12:56:03 +04:00
|
|
|
'text': f'{row[1]}\n{textNews}\nhttp://is.ulstu.ru/News/ShowNews/{row[0]}'}
|
2025-02-18 17:40:36 +04:00
|
|
|
requests.get(f'https://api.telegram.org/bot{bot_token}/sendMessage',
|
2022-06-02 12:56:03 +04:00
|
|
|
params=params)
|
2025-02-18 17:40:36 +04:00
|
|
|
|
2022-06-06 19:52:58 +04:00
|
|
|
date = row[3]
|
2022-06-02 12:56:03 +04:00
|
|
|
row = cursor.fetchone()
|
|
|
|
|
2022-06-06 19:52:58 +04:00
|
|
|
|
2022-06-02 12:56:03 +04:00
|
|
|
with open('datetime.json', 'w') as outfile:
|
2022-06-06 19:52:58 +04:00
|
|
|
json.dump(str(date), outfile)
|
2022-06-02 12:56:03 +04:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|