From d9f38fc714c8a797ec4c00d9f9d8aed997c8dba4 Mon Sep 17 00:00:00 2001 From: KnugiHK <24708955+KnugiHK@users.noreply.github.com> Date: Mon, 10 May 2021 15:51:43 +0800 Subject: [PATCH] Create console script --- Whatsapp_Chat_Exporter/__main__.py | 136 +++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 Whatsapp_Chat_Exporter/__main__.py diff --git a/Whatsapp_Chat_Exporter/__main__.py b/Whatsapp_Chat_Exporter/__main__.py new file mode 100644 index 0000000..24e903c --- /dev/null +++ b/Whatsapp_Chat_Exporter/__main__.py @@ -0,0 +1,136 @@ +from .__init__ import __version__ +from Whatsapp_Chat_Exporter import extract, extract_iphone, extract_iphone_media +from optparse import OptionParser +import os +import sqlite3 +import shutil +import json + + +def main(): + parser = OptionParser(version=__version__) + parser.add_option( + '-a', + '--android', + dest='android', + default=False, + action='store_true', + help="Define the target as Android") + parser.add_option( + '-i', + '--iphone', + dest='iphone', + default=False, + action='store_true', + help="Define the target as iPhone") + parser.add_option( + "-w", + "--wa", + dest="wa", + default=None, + help="Path to contact database") + parser.add_option( + "-m", + "--media", + dest="media", + default=None, + help="Path to WhatsApp media folder") + parser.add_option( + "-b", + "--backup", + dest="backup", + default=None, + help="Path to iPhone backup") + parser.add_option( + "-o", + "--output", + dest="output", + default="result", + help="Output to specific directory") + parser.add_option( + '-j', + '--json', + dest='json', + default=False, + action='store_true', + help="Save the result to a single JSON file") + parser.add_option( + '-d', + '--db', + dest='db', + default=None, + help="Path to database file") + (options, args) = parser.parse_args() + + if options.android and options.iphone: + print("You must define only one device type.") + exit() + if not options.android and not options.iphone: + print("You must define the device type.") + exit() + data = {} + + if options.android: + contacts = extract.contacts + messages = extract.messages + media = extract.media + vcard = extract.vcard + create_html = extract.create_html + if options.db is None: + msg_db = "msgstore.db" + else: + msg_db = options.db + if options.wa is None: + contact_db = "wa.db" + else: + contact_db = options.wa + if options.media is None: + options.media = "WhatsApp" + + if len(args) == 1: + msg_db = args[0] + + if os.path.isfile(contact_db): + with sqlite3.connect(contact_db) as db: + contacts(db, data) + + elif options.iphone: + messages = extract_iphone.messages + media = extract_iphone.media + vcard = extract_iphone.vcard + create_html = extract_iphone.create_html + if options.backup is not None: + extract_iphone_media.extract_media(options.backup) + if options.db is None: + msg_db = "7c7fba66680ef796b916b067077cc246adacf01d" + else: + msg_db = options.db + if options.wa is None: + contact_db = "ContactsV2.sqlite" + else: + contact_db = options.wa + if options.media is None: + options.media = "Message" + + if len(args) == 1: + msg_db = args[0] + + if os.path.isfile(msg_db): + with sqlite3.connect(msg_db) as db: + messages(db, data) + media(db, data, options.media) + vcard(db, data) + create_html(data, options.output) + + if not os.path.isdir(f"{options.output}/{options.media}"): + shutil.move(options.media, f"{options.output}/") + + if options.json: + with open("result.json", "w") as f: + data = json.dumps(data) + print(f"\nWriting JSON file...({int(len(data)/1024/1024)}MB)") + f.write(data) + else: + print() + + print("Everything is done!")