From c2707ed0058f71ba0af297ba6279dfb3d50402c3 Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Tue, 12 Mar 2024 20:23:52 +0100 Subject: [PATCH] add method to get ip information --- src/pojo/contact_pojo.py | 7 ++ .../contacts/generate_ip_with_contact.py | 74 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/utils/contacts/generate_ip_with_contact.py diff --git a/src/pojo/contact_pojo.py b/src/pojo/contact_pojo.py index 755d464..48b89b5 100644 --- a/src/pojo/contact_pojo.py +++ b/src/pojo/contact_pojo.py @@ -12,6 +12,13 @@ class ContactPojo: mail: str store: str ip_country: str + ip_address: str + isp: str = None + + def __repr__(self): + return "phone:{}, passport:{}, last_name:{}, first_name:{}, mail:{}, store:{}, ip_country:{}, ip_address:{},isp:{}".format( + self.phone, self.passport, self.last_name, self.first_name, self.mail, self.store, self.ip_country, + self.ip_address, self.isp) def __init__(self, phone_number: str, passport_number: str, last_name: str, first_name: str, mail: str, store: str, ip_country="FR"): diff --git a/src/utils/contacts/generate_ip_with_contact.py b/src/utils/contacts/generate_ip_with_contact.py new file mode 100644 index 0000000..80f72bf --- /dev/null +++ b/src/utils/contacts/generate_ip_with_contact.py @@ -0,0 +1,74 @@ +import json +from time import sleep +from typing import Union + +import requests +import xlsxwriter + +from src.db.mongo_manager import MONGO_STORE_MANAGER +from src.pojo.contact_pojo import ContactPojo +from src.pojo.ip.ip_location import IPLocationInfo + + +def get_contact_list() -> list: + _successful_items = MONGO_STORE_MANAGER.get_all_successful_items_for_yesterday() + _contact_list = [] + for item in _successful_items: + if item.url_validated: + _contact = ContactPojo(first_name=item.first_name, last_name=item.last_name, mail=item.mail, + phone_number=item.phone, passport_number=item.passport, store=item.store) + _contact.ip_address = item.ip_address + _contact_list.append(_contact) + return _contact_list + + +def get_info_from_ip(ip_address) -> Union[None, IPLocationInfo]: + _ip_info = None + try: + response = requests.get("http://ip-api.com/json/" + ip_address) + response.raise_for_status() + ip_in_dict = json.loads(response.text) + _ip_info = IPLocationInfo(ip_address, ip_in_dict['country'], ip_in_dict['city'], ip_in_dict['isp']) + except Exception as err: + print(err) + return _ip_info + + +def write_contact_with_ip_info_to_file(contact_list): + row = 0 + col = 0 + # Create a workbook and add a worksheet. + workbook = xlsxwriter.Workbook('ip_info_{}.xlsx'.format(len(contact_list))) + header_data = ['name', 'email', 'isp', 'ip_address'] + worksheet = workbook.add_worksheet() + header_format = workbook.add_format({'bold': True}) + + for col_num, data in enumerate(header_data): + worksheet.write(row, col_num, data, header_format) + row = row + 1 + for info in contact_list: + # Iterate over the data and write it out row by row. + worksheet.write(row, col, "{} {}".format(info.last_name, info.first_name)) + worksheet.write(row, col + 1, info.mail) + worksheet.write(row, col + 2, info.isp) + worksheet.write(row, col + 3, info.ip_address) + row += 1 + workbook.close() + + +if __name__ == '__main__': + # ip_in_dict = get_info_from_ip("83.137.1.206") + # print(ip_in_dict) + items_to_save = [] + # print(len(get_contact_list())) + for item in get_contact_list(): + # print(item) + _ip_info = get_info_from_ip(item.ip_address) + if _ip_info is None: + continue + item.isp = _ip_info.isp + item.ip_country = _ip_info.country + print(item) + items_to_save.append(item) + sleep(3) + write_contact_with_ip_info_to_file(items_to_save)