can export accepted infos
This commit is contained in:
@@ -8,6 +8,7 @@ from models.LinkPojo import LinkPojo
|
|||||||
from models.ReserveResultPojo import ReserveResultPojo
|
from models.ReserveResultPojo import ReserveResultPojo
|
||||||
from models.contact_pojo import ContactPojo
|
from models.contact_pojo import ContactPojo
|
||||||
from models.mail_pojo import MailAddress
|
from models.mail_pojo import MailAddress
|
||||||
|
from models.regisered_user_pojo import RegisteredUserPojo
|
||||||
|
|
||||||
MONGO_DB_URL = "mongo.lpaconsulting.fr"
|
MONGO_DB_URL = "mongo.lpaconsulting.fr"
|
||||||
CAPTCHA_ERROR_COLLECTION_PREFIX = "CAPTCHA_ERROR_"
|
CAPTCHA_ERROR_COLLECTION_PREFIX = "CAPTCHA_ERROR_"
|
||||||
@@ -98,6 +99,27 @@ class MongoDbManager:
|
|||||||
},
|
},
|
||||||
upsert=True)
|
upsert=True)
|
||||||
|
|
||||||
|
def get_code_for_email(self, email: str):
|
||||||
|
collection_name = DESTINATION_EMAIL_LIST
|
||||||
|
try:
|
||||||
|
collection_to_use = self.db[collection_name]
|
||||||
|
mailDocument = collection_to_use.find_one(filter={'_id': email})
|
||||||
|
if mailDocument is not None:
|
||||||
|
return MailAddress.from_firestore_dict(mailDocument).password
|
||||||
|
else:
|
||||||
|
return ""
|
||||||
|
except Exception as error:
|
||||||
|
self.logger.info(error)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def get_all_registered_users(self) -> list:
|
||||||
|
_collection_name = "Registered_users"
|
||||||
|
_cursor = self.db[_collection_name]
|
||||||
|
registered_user_list = []
|
||||||
|
for document in _cursor.find():
|
||||||
|
registered_user_list.append(RegisteredUserPojo.from_firestore_dict(document))
|
||||||
|
return registered_user_list
|
||||||
|
|
||||||
def get_destination_emails(self) -> list:
|
def get_destination_emails(self) -> list:
|
||||||
collection_name = DESTINATION_EMAIL_LIST
|
collection_name = DESTINATION_EMAIL_LIST
|
||||||
email_list = []
|
email_list = []
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
from dataclasses_json import dataclass_json
|
||||||
|
|
||||||
|
from db.mongo_manager import MongoDbManager
|
||||||
|
from models import ReserveResultPojo
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass_json
|
||||||
|
@dataclass
|
||||||
|
class AcceptedResultPojo:
|
||||||
|
|
||||||
|
def __init__(self, msg: str, slot_position, sim_position, passport, email, name, phone, ccid: str, url,
|
||||||
|
created_at: str, validated_at: str):
|
||||||
|
self.message = msg
|
||||||
|
self.slot_position = slot_position
|
||||||
|
self.sim_position = sim_position
|
||||||
|
self.passport = "{}".format(passport)
|
||||||
|
self.email = email
|
||||||
|
self.name = name
|
||||||
|
self.phone = phone
|
||||||
|
self.ccid = ccid
|
||||||
|
self.url = url
|
||||||
|
self.created_at = created_at
|
||||||
|
self.validated_at = validated_at
|
||||||
|
self.mail_password = ""
|
||||||
|
self.account_password = ""
|
||||||
|
self.store = ""
|
||||||
|
self.time = ""
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return str(self.__dict__)
|
||||||
|
|
||||||
|
|
||||||
|
def get_accepted_result_from(reserve_pojo: ReserveResultPojo, mongo_db_manager: MongoDbManager,
|
||||||
|
all_contact_list) -> AcceptedResultPojo:
|
||||||
|
if reserve_pojo.lastName is None or len(reserve_pojo.lastName) == 0:
|
||||||
|
for _contact in all_contact_list:
|
||||||
|
if _contact.mail == reserve_pojo.mail:
|
||||||
|
reserve_pojo.lastName = _contact.last_name
|
||||||
|
reserve_pojo.firstName = _contact.first_name
|
||||||
|
reserve_pojo.phone = _contact.phone
|
||||||
|
reserve_pojo.passport = _contact.passport
|
||||||
|
|
||||||
|
if reserve_pojo is None:
|
||||||
|
# send email even there are no reserve info
|
||||||
|
return AcceptedResultPojo("", slot_position=0, sim_position=0,
|
||||||
|
passport="", email="", phone="",
|
||||||
|
name="", ccid="",
|
||||||
|
url="", created_at="", validated_at="")
|
||||||
|
else:
|
||||||
|
toReturn = AcceptedResultPojo(reserve_pojo.message, slot_position=reserve_pojo.slot_position,
|
||||||
|
sim_position=reserve_pojo.sim_position,
|
||||||
|
passport=reserve_pojo.passport, email=reserve_pojo.email,
|
||||||
|
phone=reserve_pojo.phone,
|
||||||
|
name="{} {}".format(reserve_pojo.lastName, reserve_pojo.firstName),
|
||||||
|
ccid=reserve_pojo.ccid,
|
||||||
|
url=reserve_pojo.url, created_at=reserve_pojo.created_at,
|
||||||
|
validated_at=reserve_pojo.validated_at)
|
||||||
|
toReturn.mail_password = mongo_db_manager.get_code_for_email(reserve_pojo.email)
|
||||||
|
return toReturn
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
class RegisteredUserPojo:
|
||||||
|
phone: str
|
||||||
|
city: str
|
||||||
|
last_name: str
|
||||||
|
first_name: str
|
||||||
|
mail: str
|
||||||
|
address: str
|
||||||
|
zip_code: str
|
||||||
|
password: str = None
|
||||||
|
|
||||||
|
def __init__(self, phone_number: str, last_name: str, first_name: str, mail: str,
|
||||||
|
address: str = "",
|
||||||
|
zip_code: str = None, city: str = None):
|
||||||
|
self.phone = "0" + str(int(phone_number))
|
||||||
|
self.city = city
|
||||||
|
self.last_name = last_name
|
||||||
|
self.first_name = first_name
|
||||||
|
self.address = address
|
||||||
|
self.mail = mail
|
||||||
|
self.zip_code = zip_code
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "last_name:{}, first_name:{}, email:{}, password:{}".format(self.last_name, self.first_name, self.mail,
|
||||||
|
self.password)
|
||||||
|
|
||||||
|
def to_firestore_dict(self):
|
||||||
|
dest = {
|
||||||
|
u'phone': self.phone,
|
||||||
|
u'city': self.city,
|
||||||
|
u'last_name': self.last_name,
|
||||||
|
u'first_name': self.first_name,
|
||||||
|
u'mail': self.mail,
|
||||||
|
u'address': self.address,
|
||||||
|
u'zip_code': self.zip_code,
|
||||||
|
u'password': self.password
|
||||||
|
}
|
||||||
|
|
||||||
|
return dest
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_firestore_dict(source):
|
||||||
|
address = source['address']
|
||||||
|
phone = source['phone']
|
||||||
|
zip_code = source['zip_code']
|
||||||
|
city = source['city']
|
||||||
|
email = source['mail']
|
||||||
|
last_name = source['last_name']
|
||||||
|
first_name = source['first_name']
|
||||||
|
result = RegisteredUserPojo(address=address, phone_number=phone, city=city, zip_code=zip_code,
|
||||||
|
mail=email,
|
||||||
|
last_name=last_name, first_name=first_name)
|
||||||
|
if 'password' in source:
|
||||||
|
result.password = source['password']
|
||||||
|
return result
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
import glob
|
||||||
|
import re
|
||||||
|
|
||||||
|
from db.mongo_manager import MONGO_STORE_MANAGER
|
||||||
|
from models import AcceptedResultPojo
|
||||||
|
|
||||||
|
CONFIRMATION_SENTENCE = "Nous avons le plaisir de vous confirmer votre rendez-vous"
|
||||||
|
TIME_REGEX = "([0-1]?[0-9]|2[0-3]):[0-5][0-9]"
|
||||||
|
|
||||||
|
|
||||||
|
def get_store_info_from_html_content(_content):
|
||||||
|
store = ""
|
||||||
|
if "Faubourg" in _content:
|
||||||
|
print("found")
|
||||||
|
store = "Faubourg"
|
||||||
|
elif "George V" in _content:
|
||||||
|
store = "George V"
|
||||||
|
elif "Sèvres" in _content:
|
||||||
|
store = "BM"
|
||||||
|
time_results = re.search(TIME_REGEX, _content)
|
||||||
|
time = time_results[0]
|
||||||
|
return store, time
|
||||||
|
|
||||||
|
|
||||||
|
def find_ids_from_results():
|
||||||
|
_html_files = glob.glob("results/*.html")
|
||||||
|
info_list = []
|
||||||
|
for _file in _html_files:
|
||||||
|
f = open(_file, "r")
|
||||||
|
_content = f.read()
|
||||||
|
if CONFIRMATION_SENTENCE in _content:
|
||||||
|
appointment_info = get_store_info_from_html_content(_content)
|
||||||
|
_id = _file.split("_")[-1].split(".")[0]
|
||||||
|
info_list.append((_id, appointment_info))
|
||||||
|
return info_list
|
||||||
|
|
||||||
|
|
||||||
|
# info_list (id, (store, time))
|
||||||
|
def get_appointment_info_from_id(info_list: list):
|
||||||
|
_all_items = MONGO_STORE_MANAGER.get_all_successful_items_for_yesterday()
|
||||||
|
_all_contact_list = MONGO_STORE_MANAGER.get_all_contact_to_book_list()
|
||||||
|
_all_register_account = MONGO_STORE_MANAGER.get_all_registered_users()
|
||||||
|
accepted_appointments = []
|
||||||
|
for _item in _all_items:
|
||||||
|
for _info in info_list:
|
||||||
|
if _item.id == _info[0]:
|
||||||
|
_accepted = AcceptedResultPojo.get_accepted_result_from(_item, MONGO_STORE_MANAGER, _all_contact_list)
|
||||||
|
_accepted.store = _info[1][0]
|
||||||
|
_accepted.time = _info[1][1]
|
||||||
|
accepted_appointments.append(_accepted)
|
||||||
|
for _accepted in accepted_appointments:
|
||||||
|
for user in _all_register_account:
|
||||||
|
if user.mail == _accepted.email:
|
||||||
|
_accepted.account_password = user.password
|
||||||
|
return accepted_appointments
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
accepted_appointments = get_appointment_info_from_id(find_ids_from_results())
|
||||||
|
for _accepted in accepted_appointments:
|
||||||
|
print("""
|
||||||
|
姓名:{} ({} {})
|
||||||
|
电话:{} ,邮箱:{},
|
||||||
|
邮箱密码:{}
|
||||||
|
护照: {},
|
||||||
|
约会url:{},
|
||||||
|
账户密码:{}""".format(_accepted.name, _accepted.store,
|
||||||
|
_accepted.time,
|
||||||
|
_accepted.phone, _accepted.email,
|
||||||
|
_accepted.mail_password,
|
||||||
|
_accepted.passport, _accepted.url
|
||||||
|
, _accepted.account_password))
|
||||||
@@ -156,7 +156,7 @@ class ResultLinkChecker(threading.Thread):
|
|||||||
|
|
||||||
|
|
||||||
def start_check_links(_queue_name, link_list, logger):
|
def start_check_links(_queue_name, link_list, logger):
|
||||||
_proxy_manager = ProxyManager()
|
_proxy_manager = ProxyManager(logger)
|
||||||
cookiesPublisher = CookiesPublisher(queue_name=REQUEST_DATA_QUEUE_TEST)
|
cookiesPublisher = CookiesPublisher(queue_name=REQUEST_DATA_QUEUE_TEST)
|
||||||
cookiesPublisher.set_up_connection()
|
cookiesPublisher.set_up_connection()
|
||||||
receiver = ResultLinkChecker(cookiesPublisher=cookiesPublisher, proxy_manager=_proxy_manager, all_links=link_list,
|
receiver = ResultLinkChecker(cookiesPublisher=cookiesPublisher, proxy_manager=_proxy_manager, all_links=link_list,
|
||||||
@@ -176,7 +176,7 @@ def check_all_links(_segment_number=2):
|
|||||||
_link_list.append(_item.url)
|
_link_list.append(_item.url)
|
||||||
print(_link_list)
|
print(_link_list)
|
||||||
# _link_list_filted = _link_list[4000:-1]
|
# _link_list_filted = _link_list[4000:-1]
|
||||||
_link_list_filted = _link_list
|
_link_list_filted = _link_list[-4:-1]
|
||||||
thread_list = []
|
thread_list = []
|
||||||
for i in range(0, _segment_number):
|
for i in range(0, _segment_number):
|
||||||
logger.info("segment is {}".format(i))
|
logger.info("segment is {}".format(i))
|
||||||
@@ -192,4 +192,4 @@ def check_all_links(_segment_number=2):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
check_all_links()
|
check_all_links(_segment_number=2)
|
||||||
|
|||||||
Reference in New Issue
Block a user