Код, который может выполнять две задачи: 0 - печатать последние сообщения и 1 - показать 200 сообщений из диалога. Код работает, но в плане читабельности и костыльности я провалился. Может лучше классы применять? Правильно ли я разделил задачи между функциями? Правильная ли у меня архитектура? Одним словом: как улучшить код?
Не ответили, поэтому пишу здесьimport vk
from datetime import datetime
import time
import json
import constants # здесь находятся токен и ид пользователя (спец. скрыл, чтоб не узнали)
def auth(): #аутентификация
access_token = constants.TOKEN
session = vk.Session(access_token=access_token)
api = vk.API(session)
return api
def check_id(api, peer_id): # Кто это? пользователь или группа, узнать имю и фамилию
if int(peer_id)<0:
return "Group"
else:
time.sleep(0.5)
name = api.users.get(user_id = peer_id, fields = "nickname", v="5.80")[0]
print(name)
first_name = name['first_name']
last_name = name['last_name']
return "{0} {1}".format(first_name, last_name)
def get_Attachments(message, date, dict_ids): #есть ли прикрепления(фото, аудио, документы)
string = """"""
if 'attachments' in message.keys(): #не нравится мне это
for attachment in message['attachments']: # и это. Может в одну строчку?
user_id = str(message['from_id'])
if attachment['type'] == "photo":
photo = attachment['photo']['sizes']
for i in photo:
if i['type'] == "x":url = i['url']
string += "{0} photo: {1} {2}\n".format(dict_ids[user_id], url, date)
elif attachment['type'] == "doc":
url = attachment['doc']['url']
string += "{0} photo: {1} {2}\n".format(dict_ids[user_id], url, date)
elif attachment['type'] == "audio":
url = attachment['audio']['url']
string += "{0} photo: {1} {2}\n".format(dict_ids[user_id], url, date)
return string
def see_msg(api, peer_id):
dict_ids = {}
string = """"""
main_id = constants.main_id
data = api.messages.getHistory(peer_id=peer_id, count=200, v="5.80")['items']
data.reverse()
for message in data:
date = datetime.fromtimestamp(message['date'])
date = date.strftime('%Y-%m-%d %H:%M:%S')
user_id = str(message['from_id'])
if user_id not in dict_ids.keys():
dict_ids[user_id] = check_id(api, user_id)
string += "{0}: {1} {2}\n".format(dict_ids[user_id],
message['text'], date)
attachments = get_Attachments(message, date, dict_ids)
string += attachments
return string
def get_msg(api):
data = api.messages.get(count=200, v="5.80")['items']
data.reverse()
print(json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False))
def main():
api = auth()
while 1: # основной цикл
s = input("0 - get latest msg,\
\n1 - See Dialog")
if s == "0":
data = get_msg(api)
elif s == "1":
peer_id = input("Enter peer_id : ")
data = see_msg(api, peer_id)
print(data)
if __name__ == '__main__':
main()