Форум сайта python.su
Здравствуйте форумчане, вот решил выложить свой небольшой проект, сразу попрошу не бросаться тапками, хотелось бы конструктивной критики. Python начал осваивать буквально неделю назад и наваял небольшой парсер сообщений вк:
Суть программы заключается в следующем, после запуска вы видите диалог с просьбой вести acces_token вк от страницы сообщения которой будем парсить, затем запрашиваетcя ID пользователя диалог с которым будем парсить, далее происходит парсинг диалога с сохранением из него фотографий.
Чем мотивирован пост :
По большей части данный код был написан для изучения “на практике” и ускоренного впитывания Python'a , по-этому хотел бы узнать ваше мнение о коде: что нравиться, что не нравиться, что можно изменить и как, заранее огромное спасибо
Конкретно хочу получить:
#Подключаем необходимые модули import os import vk import urllib import time import requests #--------- END ---------# #Создание папки для фотографии def mkDirForPh(dirName, co = 0, iF = 1): while iF: if (dirName in os.listdir()): #если такая папка есть, пробуем добавить - (1) если и такая есть добавляем - (2) и т.д. co = co + 1 dirName = str(withUID) + "(" + str(co) + ")" else:# если папки с названием dirName в этой директории нет, создаем ее и переходим в нее os.mkdir(dirName) os.chdir(dirName) iF = 0 #--------- END ---------# #Поиск ссылки на оригинал изображения def urlTOP(messAr,url=""): #urlToOriginalPhoto if "photo_2560" in messAr: url = "photo_2560" elif "photo_1280" in messAr: url = "photo_1280" elif "photo_807" in messAr: url = "photo_807" elif "photo_604" in messAr: url = "photo_604" elif "photo_130" in messAr: url = "photo_130" elif "photo_75" in messAr: url = "photo_75" else: print('error of sizeing') url = messAr[url] return url #--------- END ---------# #Скачивание изображения def DownloadFile(url): local_filename = url.split('/')[-1] r = requests.get(url) f = open(local_filename, 'wb') for chunk in r.iter_content(chunk_size=512 * 1024): if chunk: # filter out keep-alive new chunks f.write(chunk) f.close() return #--------- END ---------# #Диалог def IDC(F = 1): #input dialog check while F: if 'token' in globals():#если переменная токена определена F = 0 print('token - Y') else: temp = input('Введите ваш токен: ') if len(temp) > 10 and str(type(temp)) == "<class 'str'>": global token token = temp continue else: print('Токен введен не правильно!') F = 1 continue if 'withUID' in globals():#если переменная withUID определена F = 0 print('ID - Y') else: temp = input('Введите ID человека, из диалога с которым, вы хотите скачать все фото(пример:947530459) без пробелов и букв ID!: ') if len(temp) > 0 and str(type(temp)) == "<class 'str'>": global withUID withUID = temp continue else: print('ID введен не правильно!' + str(type(temp))) F = 1 continue #--------- END ---------# IDC() #подключаемся к vkAPI vkAPI = vk.API(access_token=token) #Достаем сообщения lm = vkAPI.messages.getHistory(count = 200, user_id=withUID) # Получаем Имя и Фамилию собеседника withUsr = vkAPI.users.get(users_ids=withUID) #Количество сообщений с собеседником print ("Всего сообщений: "+str(lm['count'])) # Инициализация счетчиков MPC = 0 #MessParseCounter счетчик для масива lm SPC = 0 #SavedPhotosCounter счетчик сохраненных сообщений #создаем папку с именем withUID mkDirForPh(str(withUID)) #парсим массив сообщений for i in range(lm['count']): # co - кол-во итераций, lm['count'] - кол-во сообщений всего if(MPC > 199):#По скольку сообщения мы вытягиваем по 200 шт, проверяем, какое по счету сообщение мы будем парсить, если MPC > 199 : MPC = 0 и получаем новые 200 сообщений lm = vkAPI.messages.getHistory(count = 200, user_id=withUID, offset=i) MPC = 0 time.sleep(0.5)#делаем небольшую паузу if 'attachments' in lm['items'][MPC]: #если в сообщении есть прикрепление for j in range(len(lm['items'][MPC]['attachments'])): #парсим прикрепления на предмет фотографий if 'photo' in lm['items'][MPC]['attachments'][j]: #если приложение являеться фотографией #сохраняем фотографию url = urlTOP(lm['items'][MPC]['attachments'][j]['photo'])# получаем URL на картинку print("i = " + str(i) + "| j = " + str(j) + "| MPC = " + str(MPC) + "| SPC = \r" + str(SPC)) # дебаг DownloadFile(url)#скачиваем файл #print (url) SPC+=1#инкрементируем счетчик сохраненных фотографий #конец for MPC+=1 #Инкрементируем счетчик обработанных сообщений print('Сообщений сканировано:'+ str(i+1) +'\nЗагружено всего фотографий:' + str(SPC)) print('Все скачанные фотографии будут лежать в папке:'+ os.getcwd())
Прикреплённый файлы:
sc2.png (167,9 KБ)
Офлайн
1.Прочитать и применять на практике https://www.python.org/dev/peps/pep-0008/
2.Очень много комментариев. Такое большое кол-во только мешает читать код
3.Ни о чем не говорящие имена переменных и функций.
А вообще, скачайте PyCharm и посмотрите свой файл там.
Офлайн
#Поиск ссылки на оригинал изображения def urlTOP(messAr,url=""): #urlToOriginalPhoto if "photo_2560" in messAr: url = "photo_2560" elif "photo_1280" in messAr: url = "photo_1280" elif "photo_807" in messAr: url = "photo_807" elif "photo_604" in messAr: url = "photo_604" elif "photo_130" in messAr: url = "photo_130" elif "photo_75" in messAr: url = "photo_75" else: print('error of sizeing') url = messAr[url] return url
Офлайн
import re messAr = 'wegphoto_78regwrgrehrjt_photo_807_trhrthphoto_1080hbhj' def urlTOP(messAr): #urlToOriginalPhoto url = '' if re.findall(r'photo_+[0-9]+', messAr): url = re.findall(r'photo_+[0-9]*', messAr)[-1] if not url: print('error of sizeing') return url print(urlTOP(messAr))
Отредактировано Jumas_Cola (Янв. 15, 2018 12:21:04)
Офлайн