from typing import NamedTuple
class Result(NamedTuple):
text: str # текст запроса
success: bool # успешен ли запрос
status: str # статус
async def check_text(text: str) -> Result:
url = f'https://сайт.com/?query={text}'
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
if response.status != 200:
return Result(text=text, success=False, status='Не удалось определить результат')
html = await response.text()
soup = BeautifulSoup(html, 'html.parser')
status_element = soup.find('div', class_='table-block')
if not status_element:
return Result(text=text, success=False, status='Не удалось определить результат')
status_text = status_element.get_text().strip()
# тебе нужно будет решить, когда запрос был успешен (True), а когда нет (False)
if "ok" in status_text:
return Result(text=text, success=True, status='Можно')
elif "no" in status_text:
return Result(text=text, success=False, status='Данный вариант недоступен')
elif "no1" in status_text:
return Result(text=text, success=True, status='Можно под заказ')
else:
return Result(text=text, success=False, status='Неизвестно')
result = await check_text(text)
if result.success:
... # реагируем на успешный запрос
logger.info('%s: %s', result.text, result.status)
else:
... # реагируем на неудачный запрос
logger.info('%s: %s', result.text, result.status)
@bot.callback_query_handler(func=lambda call: True)
# обрабатываем то, что начинается с 'city.'
@bot.callback_query_handler(func=lambda call: call.data.startswith('city.'))
def callback(call):
city = call.data[len('city.'):] # отрезаем префикс 'city.'
if city == 'istanbul':
bot.send_message(call.message.chat.id,'Вы выбрали город: Стамбул')
elif city == 'moscow':
bot.send_message(call.message.chat.id,'Вы выбрали город: Москва')
else:
bot.send_message(call.message.chat.id,'Я не знаю такого города')
keyboard = types.InlineKeyboardMarkup()
# обрати внимание, callback_data всегда начинается с 'city.'
keyboard.add(types.InlineKeyboardButton('Стамбул', callback_data='city.istanbul'))
keyboard.add(types.InlineKeyboardButton('Москва', callback_data='city.moscow'))
Cookies in Firefox are stored in an SQLite format database found in the file cookies.sqlite in the currently-active user profile directory (exact path is system-dependent).
%APPDATA%\Mozilla\Firefox\Profiles
, в ней каждый подкаталог - профиль браузера, часто один, но может быть несколько. Внутри подкаталога лежит файл cookies.sqlite
.os.path.expandvars()
(и модуля os.path
в целом), файл открыть стандартным модулем sqlite3
, а дальше смотри что внутри таблицы moz_cookies
.with open(filename, 'rb') as file:
media = MediaFileUpload(
filename, chunksize=1024 * 1024,
mimetype=message.document.mime_type, resumable=True)
request = service.files().create(
body=metadata, media_body=media)
file.close()
open_text = 'текст' # открытый текст
# letters - именно строка, одна позиция - один символ
letters = ''.join(['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф',
'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'])
key = 5 # ключ к шифру - величина сдвига. Может быть >0 или <0
# генерируем таблицы подстановки
encrypt_table = str.maketrans(letters, letters[key:]+letters[:key]) # для шифрования
decrypt_table = str.maketrans(letters, letters[-key:]+letters[:-key]) # для дешифрования
cypher_text = open_text.translate(encrypt_table)
restored_text = cypher_text.translate(decrypt_table)
print(open_text)
print(cypher_text)
print(restored_text)
import numpy
import matplotlib.pyplot as plt
with open('data.txt', 'rt') as src:
src.readline() # пропускаем заголовок
points = numpy.array([
[int(v) for v in row.split(';')]
for row in src
])
width = points[:, 0].max()
height = points[:, 1].max()
image = numpy.array((height, width), dtype=numpy.uint8)
for x, y, c in points:
image[y, x] = c
plt.imshow(image, cmap='gray')
plt.show()
import typing as tp
Func = tp.Callable[[], None] # функция без апарметров, возвращает None
class FuncMap:
def __init__(self):
self.map: tp.Dict[str, Func] = dict()
def register(self, key: str) -> tp.Callable[[Func], Func]:
def decorate(f: Func) -> Func:
self.map[key] = f
return f
return decorate
def get(self, key: str) -> Func:
return self.map[key]
def run(self, key: str):
return self.map[key]()
# а вот так этот класс используется
fmap = FuncMap()
@fmap.register('11')
def test():
print('This is test()')
fmap.run('11')
# handlers.py
def setup(dp, pool):
# внутри setup уже объявляешь обработчики
@dp.message_handler(content_types=['text'])
def some_handler(message: types.message):
...
# main.py
connection_pool = await create_asyncpg_connection_pool()
dp = ...
import handlers
handlers.setup(dp, connection_pool) # вызывать строго один раз!