SHARE
TWEET

Untitled

a guest Jun 27th, 2013 719 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # -*- coding: cp1251 -*-
  2. from grab import Grab, UploadFile
  3. import os, re, random, time
  4.  
  5. with open('accounts.txt') as f: accounts = f.read().splitlines() # Аккаунты для работы
  6. # with open('texts.txt') as f: texts = f.read().splitlines() # Тексты для тизеров
  7.  
  8. teasers_count = [0] # Количество тизеров на аккаунте
  9. all_bl, texts_bl, pics_bl = [], [], [] # Блек листы использованных текстов и картинок
  10.  
  11. def timer(func):
  12.     def wrapper():
  13.         t1 = time.clock()
  14.         print u"Бот DirectAdvert.ru начинает работу ..."
  15.         func()
  16.         print u"\nСкрипт завершил работу за - %.2f секунд" % (time.clock() - t1)
  17.     return wrapper
  18.        
  19. class DA(object): # Класс запуска бота
  20.  
  21.     def __init__(self, url, login, pwd):
  22.         self.url = url
  23.         self.login = login
  24.         self.pwd = pwd
  25.                
  26.     def DA_Run(self):
  27.         teasers_num = 0; path = os.getcwd()
  28.         dirs = filter(lambda dir: os.path.isdir(dir), os.listdir('.')) # Папки с тизерами
  29.         g = self.Login() # Сначала авторизуемся в системе
  30.                
  31.                 # -------------------------------- Добавляем 5 тизеров
  32.         while teasers_num < 7: # Загружаем по 5 тизеров
  33.             g.go('http://www.directadvert.ru/ad_add/'); time.sleep(1) # Нажимаем кнопку "Добавить объявление"
  34.             dir, full_text, pic, image_filename = False, False, False, False
  35.                        
  36.             while not dir: # До тех пор пока не выбрали директорию
  37.                 dir = random.choice(dirs)
  38.                 if dir in all_bl: dir = False; continue # Не берем директорию из блека
  39.                 os.chdir(path + '\\' + dir); print u"Создаем тизер из директории - %s" % dir
  40.                 pics = filter(lambda pic: pic.split('.')[-1] == 'jpg' or pic.split('.')[-1] == 'png', os.listdir('.')) # Картинки для тизеров
  41.                        
  42.             while not full_text: # До тех пор пока не выбрали текст
  43.                 with open('text.txt') as f: texts = f.read().splitlines() # Тексты для тизеров
  44.                 full_text = random.choice(texts) # Берем рандомный текст
  45.                 # if full_text in texts_bl: full_text = False; continue # Не берем тексты из блек листа
  46.                 title = full_text.split(':')[0].decode('cp1251').encode('utf-8')
  47.                 text = ':'.join(full_text.split(':')[1:]).decode('cp1251').encode('utf-8')
  48.                                                                
  49.             while not pic and not image_filename: # До тех пор пока не выбрали и не загрузили картинку
  50.                 try:
  51.                     pic = random.choice(pics)
  52.                     # if pic in pics_bl: pic = False; continue # Не берем картинки из блек листа
  53.                     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)) # Загружаем картинку
  54.                     image_filename = re.findall(r'\.value = \'(.+?)\'', g.response.body, re.S)[0] # Получаем номер картинки
  55.                 except Exception as err:
  56.                     if re.search(r'слишком маленького размера'.decode('cp1251').encode('utf-8'), g.response.body): print u"Возникла ошибка при загрузке картинки - картинка слишком маленькая, пробуем заного ...\n"; time.sleep(5)
  57.                     else: print u"Возникла ошибка при загрузке картинки - %s, пробуем заного ...\n" % str(err); time.sleep(5)
  58.                        
  59.             try:
  60.                 print u"Создаем объявление: Тайтл - %s\nТекст - %s\nID картинки - %s" % (title.decode('utf-8'), text.decode('utf-8'), image_filename)
  61.                 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)) # Создаем объявление
  62.                 teaser_id = re.findall(r'colTeaser"><a name="(.+?)"', g.response.body, re.S)[0].replace('ad', '') # ID Созданного объявления
  63.                 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
  64.                 with open('teaser_ids.txt', 'a') as f: f.write('%s\n' % teaser_id); time.sleep(5) # Записываем ID тизера в файл и спим 5 секунд
  65.             except Exception as err: print u"Возникла ошибка при создании тизера - %s, спим 15 секунд ..." % str(err); time.sleep(15)
  66.                 # --------------------------------
  67.                        
  68.     def Login(self): # Метод авторизации в системе
  69.         g = Grab()
  70.         g.go(self.url); time.sleep(1)
  71.                
  72.         while not re.search(r'У вас на счёте'.decode('cp1251').encode('utf-8'), g.response.body, re.I): # До тех пор пока не вошли в систему
  73.             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) # Входим в систему
  74.             except Exception as err: print u"Возникла ошибка - %s, спим немного и продолжаем ..." % str(err); time.sleep(10)
  75.                
  76.         try:           
  77.             teasers_count[0] = len(re.findall(r'colTeaser"><a name="(.+?)"', g.response.body, re.S)) # Количество текущих тизеров на аккаунте
  78.             print u"Успешно авторизовались в системе, сейчас на аккаунте - %i тизеров, начинаем добавлять тизеры ...\n" % teasers_count[0]; return g.clone()
  79.         except: print u"Успешно авторизовались в системе, тизеров на аккануте нет, начинаем добавлять тизеры ...\n"; return g.clone()
  80.                                                        
  81. @timer
  82. def main():
  83.     url = 'http://www.directadvert.ru/login/'
  84.    
  85.     for account in accounts:
  86.         BOT = DA(url, account.split(':')[0], account.split(':')[1]) # Создаем экземпляр класса
  87.         BOT.DA_Run() # Запускаем бота
  88.      
  89. main(); raw_input("\nPress enter to exit")
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top