Advertisement
Guest User

Untitled

a guest
Jun 27th, 2013
856
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.03 KB | None | 0 0
  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")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement