Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import re
- from captcha import CaptchaDialog
- import os
- from urllib.parse import urlencode
- class Client:
- def __init__(self, session=None):
- self.session = session or requests.session()
- self.session.headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"
- self.host = 'belg.ru'
- self.base_url = 'http://' + self.host
- def auth(self, login, password, ngeo):
- # Версии сайта для Старого Оскола и Белгорода имеют разные базы
- self.session.cookies.set('ngeo', ngeo, domain=self.host, path='/')
- url = self.base_url + '/altcms/extensions/login/o_login.php'
- payload = {
- 'login': login,
- 'pass': password
- }
- r = self.session.post(url, payload,
- headers={'X-Requested-With': 'XMLHttpRequest'})
- text = r.text
- if text == '0' or text == '':
- raise Exception("Ошибка авторизации")
- def post_ad(self,
- content,
- phone,
- second_pid,
- third_rubric,
- price=0,
- pk=1000,
- add_rooms='',
- add_model='',
- add_color='',
- add_year='',
- add_run='',
- map_lat=0,
- map_lng=0,
- full_content='',
- files=[],
- ad_id=None):
- """Добавляет либо редактирует объявление если передан ad_id."""
- url = self.base_url + '/cabinet.html?announce' + ('&id=' + str(ad_id)
- if ad_id else '')
- r = self.session.get(url)
- text = r.text
- hidden = re.findall('<input type="hidden" name="([^"]+)" value="([^"]+)', text)
- """
- [('retpath', 'http,//mail.yandex.ru/for/belg.ru'),
- ('price', '0'),
- ('map_noconfirm', '0'),
- ('map_lat', '0'),
- ('map_lng', '0'),
- ('p_uid', '***'),
- ('a_id', '***'),
- ('act', 'new'),
- ('q_id', '***')]
- """
- hiddendict = dict(hidden)
- """
- (function(selector) {
- var o = {};
- $.each($($(selector)[0]).serializeArray(), function(_, v) {
- o[v.name] = v.value;
- });
- var js = JSON.stringify(o, 0, 4);
- console.log(js);
- prompt('Copy,', js);
- })('#an_add_form');
- // http,//belg.ru/cabinet.html?announce
- """
- m = re.search(r'<img src="(/antibot/\?PHPSESSID=[^"]+)', text)
- captcha_url = self.base_url + m.group(1)
- d = CaptchaDialog(captcha_url, self.session)
- keystring = ''
- if d.exec_():
- keystring = d.ui.captchaEdit.text()
- payload = [
- ("content", content),
- ("phone[]", phone),
- ("second_pid", second_pid),
- ("third_rubric", third_rubric),
- ("price", price),
- ("pk", pk),
- ("add_rooms", add_rooms),
- ("add_model", add_model),
- ("add_color", add_color),
- ("add_year", add_year),
- ("add_run", add_run),
- ("map_noconfirm", 1 if int(map_lat) == 0 and int(map_lng) == 0 else 0),
- ("map_lat", map_lat),
- ("map_lng", map_lng),
- ("full_content", full_content),
- ("p_uid", hiddendict['p_uid']),
- ("a_id", hiddendict['a_id']),
- ("act", hiddendict['act']),
- ("keystring", keystring)
- ]
- if files:
- for filename in files:
- fp = open(filename, 'rb')
- data = fp.read()
- fp.close()
- payload1 = {
- 'uid': hiddendict['p_uid'],
- 'a_id': hiddendict['a_id'],
- 'act': 'new'
- }
- url = self.base_url + '/altcms/extensions/cabinet/inc/upload.php'
- r = self.session.post(url, payload1,
- files={'myfile': (os.path.basename(filename),
- data)})
- payload.append(('filearr[]', r.text))
- payload = urlencode(payload, encoding='1251')
- r = self.session.post(self.base_url + '/altcms/extensions/cabinet/save.php',
- payload,
- headers={'Content-Type': 'application/x-www-form-urlencoded'})
- # Объявление сохранено
- if r.url == self.base_url + '/cabinet.html?me_announce&save':
- return hiddendict['a_id']
- # Ищем первое объявление в списке
- r = self.session.get(r.url)
- regex = r'/cabinet\.html\?announce&id=([^"]+)'
- m = re.search(regex, r.text)
- ad_id = int(m.group(1))
- # Возвращаем id объявления
- return ad_id
- raise Exception("Ошибка при сохранении объявления")
- def del_ad(self, ad_id):
- url = self.base_url + '/altcms/extensions/cabinet/inc/a_del.php'
- r = self.session.post(url, {'id': ad_id},
- headers={'X-Requested-With': 'XMLHttpRequest'})
- if r.text != 'ok':
- raise Exception("Ошибка удаления объявления")
- if __name__ == '__main__':
- c = Client()
- c.auth('***', '***', 'st')
- kw = dict(content='Тестовое объявление',
- phone='***',
- second_pid='070100',
- third_rubric='070101',
- files=['D:\\Gallery\\Говно\\82Y6jtWYuKA.jpg',
- 'D:\\Gallery\\Говно\\270b6e0f875a67723f6891933f1569bd.jpg'])
- ad_id = c.post_ad(**kw)
- # А теперь отредактируем объявление
- kw = dict(kw)
- kw['content'] = 'Текст объявления изменен'
- assert ad_id == c.post_ad(ad_id=ad_id, **kw)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement