pip install pytelegrambotapi
pip3 install pytelegrambotapi
=> pip3# example.py
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
if __name__ == '__main__':
my_func()
$ python -m memory_profiler example.py
# output:
Line # Mem usage Increment Line Contents
==============================================
3 @profile
4 5.97 MB 0.00 MB def my_func():
5 13.61 MB 7.64 MB a = [1] * (10 ** 6)
6 166.20 MB 152.59 MB b = [2] * (2 * 10 ** 7)
7 13.61 MB -152.59 MB del b
8 13.61 MB 0.00 MB return a
--uac-admin Using this option creates a Manifest which will request elevation upon application restart.
--uac-uiaccess Using this option allows an elevated application to work with Remote Desktop.
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='app',
debug=False,
strip=False,
upx=True,
console=False , uac_admin=True)
from win32api import *
from win32gui import *
import win32con
import sys, os
import struct
import time
class WindowsBalloonTip:
def __init__(self, title, msg):
message_map = {
win32con.WM_DESTROY: self.OnDestroy,
}
# Register the Window class.
wc = WNDCLASS()
hinst = wc.hInstance = GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbar"
wc.lpfnWndProc = message_map # could also specify a wndproc.
classAtom = RegisterClass(wc)
# Create the Window.
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = CreateWindow( classAtom, "Taskbar", style, \
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
0, 0, hinst, None)
UpdateWindow(self.hwnd)
iconPathName = os.path.abspath(os.path.join( sys.path[0], "balloontip.ico" ))
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
try:
hicon = LoadImage(hinst, iconPathName, \
win32con.IMAGE_ICON, 0, 0, icon_flags)
except:
hicon = LoadIcon(0, win32con.IDI_APPLICATION)
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip")
Shell_NotifyIcon(NIM_ADD, nid)
Shell_NotifyIcon(NIM_MODIFY, \
(self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,\
hicon, "Balloon tooltip",msg,200,title))
# self.show_balloon(title, msg)
time.sleep(10)
DestroyWindow(self.hwnd)
def OnDestroy(self, hwnd, msg, wparam, lparam):
nid = (self.hwnd, 0)
Shell_NotifyIcon(NIM_DELETE, nid)
PostQuitMessage(0) # Terminate the app.
def balloon_tip(title, msg):
w=WindowsBalloonTip(title, msg)
if __name__ == '__main__':
balloon_tip("Title for popup", "This is the popup's message")
возможно ли авторизоваться под несколькими аккаунтами в вк через api
если да, то как
import json
import vk
import vk_api
from captcha import captcha_handler
with open('accounts.json', 'r') as file:
data = json.loads(file.read())
accounts = data['accounts']
zero_id = int(data['zero_id'])
vk_apis = []
def init_apis():
current_id = 0
for account in accounts:
vk_session = vk_api.VkApi(account['phone'], account['password'], captcha_handler=captcha_handler)
vk_session.auth()
vk_apis.append(vk_session.get_api())
print('account', current_id, 'successfully inited')
current_id += 1
init_apis()
Сам пробовал реализовывать через несколько классов в Python, но сессия всё равно одна.
import typing
import requests
from yandex_geocoder.exceptions import (
YandexGeocoderAddressNotFound,
YandexGeocoderHttpException,
)
class Client:
"""Yandex geocoder API client.
:Example:
>>> from yandex_geocoder import Client
>>> Client.coordinates('Хабаровск 60 октября 150')
('135.114326', '48.47839')
"""
API_URL = "https://geocode-maps.yandex.ru/1.x/"
PARAMS = {"format": "json"}
@classmethod
def request(cls, address: str) -> dict:
"""Requests passed address and returns content of `response` key.
Raises `YandexGeocoderHttpException` if response's status code is
different from `200`.
"""
response = requests.get(
cls.API_URL, params=dict(geocode=address, **cls.PARAMS)
)
if response.status_code != 200:
raise YandexGeocoderHttpException(
"Non-200 response from yandex geocoder"
)
return response.json()["response"]
@classmethod
def coordinates(cls, address: str) -> typing.Tuple[str, str]:
"""Returns a tuple of ccordinates (longtitude, latitude) for
passed address.
Raises `YandexGeocoderAddressNotFound` if nothing found.
"""
data = cls.request(address)["GeoObjectCollection"]["featureMember"]
if not data:
raise YandexGeocoderAddressNotFound(
'"{}" not found'.format(address)
)
coordinates = data[0]["GeoObject"]["Point"]["pos"] # type: str
return tuple(coordinates.split(" "))
Python 3.6 использует Unicode API для ввода/вывода в консоль как упомянутый ниже win_unicode_console пакет (подробнее в PEP 528). По умолчанию поддерживаются произвольные Unicode символы. Простой print(unicode_string) теперь работает без установки дополнительного ПО (консольный шрифт, поддерживающий желаемые символы, по прежнему нужно настраивать).
На границе с Windows-консолью используется Unicode, внутри sys.stdin, sys.stdout, sys.stderr используют utf-8 кодировку. Это может сломать код, который использовал двоичный интерфейс для вывода в консоль и соответственно использовал OEM codepage, к примеру cp866 кодировку. cp866 не совместима с utf-8, можно получить кракозябры в таком случае. Необходимо либо исправить код, чтобы он текст, а не байты в консоль выводил, либо выставить %PYTHONLEGACYWINDOWSIOENCODING% переменную окружения, чтобы старое поведение восстановить.
Как можно написать текст в определённом месте на фотографии?
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
img = Image.open("sample_in.jpg")
draw = ImageDraw.Draw(img)
# font = ImageFont.truetype(<font-file>, <font-size>)
font = ImageFont.truetype("sans-serif.ttf", 16)
draw.text((0, 0),"Sample Text",(255,255,255),font=font)
img.save('sample-out.jpg')
bot.send_message(
chat_id,
"Example text with a phone [+79991234567](tel:+79991234567)",
parse_mode='Markdown'
)
from twilio.rest import Client
from . import app
from flask import session
import random
def send_confirmation_code(to_number):
verification_code = generate_code()
send_sms(to_number, verification_code)
session['verification_code'] = verification_code
return verification_code
def generate_code():
return str(random.randrange(100000, 999999))
def send_sms(to_number, body):
account_sid = app.config['TWILIO_ACCOUNT_SID']
auth_token = app.config['TWILIO_AUTH_TOKEN']
twilio_number = app.config['TWILIO_NUMBER']
client = Client(account_sid, auth_token)
client.api.messages.create(to_number,
from_=twilio_number,
body=body)
Как реализовать реферальную систему в Telegram боте?
Deep linking
Telegram bots have a deep linking mechanism, that allows for passing additional parameters to the bot on startup. It could be a command that launches the bot — or an auth token to connect the user's Telegram account to their account on some external service.
Each bot has a link that opens a conversation with it in Telegram — https://telegram.me/. You can add the parameters start or startgroup to this link, with values up to 64 characters long. For example:https://telegram.me/triviabot?startgroup=test