Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: cp1251 -*-
- from grab import Grab, UploadFile
- import os, re, random, time
- with open('accounts.txt') as f: accounts = f.read().splitlines() # Аккаунты для работы
- # with open('texts.txt') as f: texts = f.read().splitlines() # Тексты для тизеров
- teasers_count = [0] # Количество тизеров на аккаунте
- all_bl, texts_bl, pics_bl = [], [], [] # Блек листы использованных текстов и картинок
- def timer(func):
- def wrapper():
- t1 = time.clock()
- print u"Бот DirectAdvert.ru начинает работу ..."
- func()
- print u"\nСкрипт завершил работу за - %.2f секунд" % (time.clock() - t1)
- return wrapper
- class DA(object): # Класс запуска бота
- def __init__(self, url, login, pwd):
- self.url = url
- self.login = login
- self.pwd = pwd
- def DA_Run(self):
- teasers_num = 0; path = os.getcwd()
- dirs = filter(lambda dir: os.path.isdir(dir), os.listdir('.')) # Папки с тизерами
- g = self.Login() # Сначала авторизуемся в системе
- # -------------------------------- Добавляем 5 тизеров
- while teasers_num < 7: # Загружаем по 5 тизеров
- g.go('http://www.directadvert.ru/ad_add/'); time.sleep(1) # Нажимаем кнопку "Добавить объявление"
- dir, full_text, pic, image_filename = False, False, False, False
- while not dir: # До тех пор пока не выбрали директорию
- dir = random.choice(dirs)
- if dir in all_bl: dir = False; continue # Не берем директорию из блека
- os.chdir(path + '\\' + dir); print u"Создаем тизер из директории - %s" % dir
- pics = filter(lambda pic: pic.split('.')[-1] == 'jpg' or pic.split('.')[-1] == 'png', os.listdir('.')) # Картинки для тизеров
- while not full_text: # До тех пор пока не выбрали текст
- with open('text.txt') as f: texts = f.read().splitlines() # Тексты для тизеров
- full_text = random.choice(texts) # Берем рандомный текст
- # if full_text in texts_bl: full_text = False; continue # Не берем тексты из блек листа
- title = full_text.split(':')[0].decode('cp1251').encode('utf-8')
- text = ':'.join(full_text.split(':')[1:]).decode('cp1251').encode('utf-8')
- while not pic and not image_filename: # До тех пор пока не выбрали и не загрузили картинку
- try:
- pic = random.choice(pics)
- # if pic in pics_bl: pic = False; continue # Не берем картинки из блек листа
- g.go('http://www.directadvert.ru/load_img/', multipart_post={'MAX_FILE_SIZE' : '500000', 'is_banner' : '0', 'imgfile' : UploadFile(pic)}); time.sleep(random.uniform(3, 10)) # Загружаем картинку
- image_filename = re.findall(r'\.value = \'(.+?)\'', g.response.body, re.S)[0] # Получаем номер картинки
- except Exception as err:
- if re.search(r'слишком маленького размера'.decode('cp1251').encode('utf-8'), g.response.body): print u"Возникла ошибка при загрузке картинки - картинка слишком маленькая, пробуем заного ...\n"; time.sleep(5)
- else: print u"Возникла ошибка при загрузке картинки - %s, пробуем заного ...\n" % str(err); time.sleep(5)
- try:
- print u"Создаем объявление: Тайтл - %s\nТекст - %s\nID картинки - %s" % (title.decode('utf-8'), text.decode('utf-8'), image_filename)
- g.go('http://www.directadvert.ru/ad_add/', multipart_post={'action' : 'add', 'id' : '', 'is_banner' : '0', 'image_filename' : image_filename, 'title' : title, 'announce' : text, 'url' : 'http://site.ru/?sub=DirectAdvert_%s' % (teasers_count[0] + 1), 'price_buy' : '2', 'group_id' : '0', 'group_name' : '', 'action_url' : '', 'x' : str(random.randint(10, 150)), 'y' : str(random.randint(10, 150))}); time.sleep(random.uniform(3, 10)) # Создаем объявление
- teaser_id = re.findall(r'colTeaser"><a name="(.+?)"', g.response.body, re.S)[0].replace('ad', '') # ID Созданного объявления
- print u"Создали объявление, его ID - %s\n" % teaser_id; teasers_count[0] += 1; texts_bl.append(full_text); pics_bl.append(pic); all_bl.append(dir); os.chdir(path); teasers_num += 1
- with open('teaser_ids.txt', 'a') as f: f.write('%s\n' % teaser_id); time.sleep(5) # Записываем ID тизера в файл и спим 5 секунд
- except Exception as err: print u"Возникла ошибка при создании тизера - %s, спим 15 секунд ..." % str(err); time.sleep(15)
- # --------------------------------
- def Login(self): # Метод авторизации в системе
- g = Grab()
- g.go(self.url); time.sleep(1)
- while not re.search(r'У вас на счёте'.decode('cp1251').encode('utf-8'), g.response.body, re.I): # До тех пор пока не вошли в систему
- try: g.go('http://www.directadvert.ru/login', post={'action' : 'login', 'login' : self.login, 'password' : self.pwd, 'x' : str(random.randint(10, 150)), 'y' : str(random.randint(10, 150))}); time.sleep(1) # Входим в систему
- except Exception as err: print u"Возникла ошибка - %s, спим немного и продолжаем ..." % str(err); time.sleep(10)
- try:
- teasers_count[0] = len(re.findall(r'colTeaser"><a name="(.+?)"', g.response.body, re.S)) # Количество текущих тизеров на аккаунте
- print u"Успешно авторизовались в системе, сейчас на аккаунте - %i тизеров, начинаем добавлять тизеры ...\n" % teasers_count[0]; return g.clone()
- except: print u"Успешно авторизовались в системе, тизеров на аккануте нет, начинаем добавлять тизеры ...\n"; return g.clone()
- @timer
- def main():
- url = 'http://www.directadvert.ru/login/'
- for account in accounts:
- BOT = DA(url, account.split(':')[0], account.split(':')[1]) # Создаем экземпляр класса
- BOT.DA_Run() # Запускаем бота
- main(); raw_input("\nPress enter to exit")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement