can export accepted infos

This commit is contained in:
2024-06-02 11:36:48 +02:00
parent a0024702ed
commit ad733aa9b3
5 changed files with 212 additions and 3 deletions
+22
View File
@@ -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 = []
+61
View File
@@ -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
+54
View File
@@ -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
+72
View File
@@ -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))
+3 -3
View File
@@ -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)