Skip to main content

A Whatsapp database parser that will give you the history of your Whatsapp conversations in HTML and JSON.

Project description

Whatsapp-Chat-Exporter

Latest in Pypi License MIT Python

A customizable Android and iPhone Whatsapp database parser that will give you the history of your Whatsapp conversations in HTML and JSON. Inspired by Telegram Chat Export Tool.
If you plan to uninstall WhatsApp or delete your WhatsApp account, please make a backup of your WhatsApp database. You may want to use this exporter again on the same database in the future as the exporter develops

Usage

Usage in README may be removed in the future. Check the usage in Wiki.

If you want to use the old release (< 0.5) of the exporter, please follow the old usage guide.

First, install the exporter by:

pip install whatsapp-chat-exporter
pip install whatsapp-chat-exporter[android_backup]  :; # Optional, if you want it to support decrypting Android WhatsApp backup.

Then, create a working directory in somewhere you want

mkdir working_wts
cd working_wts

Working with Android

Unencrypted WhatsApp database

Extract the WhatsApp database with whatever means, one possible means is to use the WhatsApp-Key-DB-Extractor

After you obtain your WhatsApp database, copy the WhatsApp database and media folder to the working directory. The database is called msgstore.db. If you also want the name of your contacts, get the contact database, which is called wa.db. And copy the WhatsApp (Media) directory from your phone directly.

And now, you should have something like this in the working directory.

Android folder structure

Extracting

Simply invoke the following command from shell.

wtsexporter -a

Encrypted Android WhatsApp Backup

In order to support the decryption, install pycryptodome if it is not installed

pip install pycryptodome # Or 
pip install whatsapp-chat-exporter["android_backup"] # install along with this software

Crypt15 is now the easiest way to decrypt a backup. If you have the 32 bytes hex key generated when you enable End-to-End encrypted backup, you can use it to decrypt the backup. If you do not have the 32 bytes hex key, you can still use the key file extracted just like extacting key file for Crypt12 and Crypt14 to decrypt the backup.

Crypt12 or Crypt14

Place the decryption key file (key) and the encrypted WhatsApp Backup (msgstore.db.crypt14) in the working directory. If you also want the name of your contacts, get the contact database, which is called wa.db. And copy the WhatsApp (Media) directory from your phone directly.

And now, you should have something like this in the working directory.

Android folder structure with WhatsApp Backup

Extracting

Simply invoke the following command from shell.

wtsexporter -a -k key -b msgstore.db.crypt14

Crypt15 (End-to-End Encrypted Backup)

To support Crypt15 backup, install javaobj-py3 if it is not installed

pip install javaobj-py3 # Or 
pip install whatsapp-chat-exporter["crypt15"] # install along with this software

Place the encrypted WhatsApp Backup (msgstore.db.crypt15) in the working directory. If you also want the name of your contacts, get the contact database, which is called wa.db. And copy the WhatsApp (Media) directory from your phone directly.
If you do not have the 32 bytes hex key (64 hexdigits), place the decryption key file (encrypted_backup.key) extracted from Android. If you gave the 32 bytes hex key, simply put the key in the shell.

Now, you should have something like this in the working directory (if you do not have 32 bytes hex key).

Android folder structure with WhatsApp Crypt15 Backup

Extracting

If you do not have 32 bytes hex key but have the key file available, simply invoke the following command from shell.

wtsexporter -a -k encrypted_backup.key -b msgstore.db.crypt15

If you have the 32 bytes hex key, simply put the hex key in the -k option and invoke the command from shell like this:

wtsexporter -a -k 432435053b5204b08e5c3823423399aa30ff061435ab89bc4e6713969cdaa5a8 -b msgstore.db.crypt15

Working with iPhone

Do an iPhone Backup with iTunes first.

Encrypted iPhone Backup

If you are working on unencrypted iPhone backup, skip this

If you want to work on an encrypted iPhone Backup, you should install iphone_backup_decrypt from KnugiHK/iphone_backup_decrypt before you run the extract_iphone_media.py.

pip install git+https://github.com/KnugiHK/iphone_backup_decrypt

Extracting

Simply invoke the following command from shell, remember to replace the username and device id correspondingly in the command.

wtsexporter -i -b "C:\Users\[Username]\AppData\Roaming\Apple Computer\MobileSync\Backup\[device id]"

Results

After extracting, you will get these:

Private Message

Private Message

Group Message

Group Message

More options

Invoke the wtsexporter with --help option will show you all options available.

> wtsexporter --help
usage: wtsexporter [options]

options:
  -h, --help            show this help message and exit
  -a, --android         Define the target as Android
  -i, --iphone, --ios   Define the target as iPhone
  -w WA, --wa WA        Path to contact database (default: wa.db/ContactsV2.sqlite)
  -m MEDIA, --media MEDIA
                        Path to WhatsApp media folder (default: WhatsApp)
  -b BACKUP, --backup BACKUP
                        Path to Android (must be used together with -k)/iPhone WhatsApp backup
  -o OUTPUT, --output OUTPUT
                        Output to specific directory (default: result)
  -j [JSON], --json [JSON]
                        Save the result to a single JSON file (default if present: result.json)
  -d DB, --db DB        Path to database file (default: msgstore.db/7c7fba66680ef796b916b067077cc246adacf01d)
  -k KEY, --key KEY     Path to key file
  -t TEMPLATE, --template TEMPLATE
                        Path to custom HTML template
  -e, --embedded        Embed media into HTML file (not yet implemented)
  -s, --showkey         Show the HEX key used to decrypt the database
  -c, --move-media      Move the media directory to output directory if the flag is set, otherwise copy it
  --offline OFFLINE     Relative path to offline static files
  --size SIZE, --output-size SIZE
                        Maximum size of a single output file in bytes, 0 for auto (not yet implemented)
  --no-html             Do not output html files
  --check-update        Check for updates

To do

See issues.

Copyright

This is a MIT licensed project.

The Telegram Desktop's export is the reference for whatsapp.html in this repo

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whatsapp-chat-exporter-0.9.1.tar.gz (22.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

whatsapp_chat_exporter-0.9.1-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file whatsapp-chat-exporter-0.9.1.tar.gz.

File metadata

  • Download URL: whatsapp-chat-exporter-0.9.1.tar.gz
  • Upload date:
  • Size: 22.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for whatsapp-chat-exporter-0.9.1.tar.gz
Algorithm Hash digest
SHA256 e65ac127416e9a47baee82dc0a313d1257303e03cac4f603c6c9291f39daa75f
MD5 da8e8bb36af643f806493ee38b287836
BLAKE2b-256 353a5b8917d33e084dc7561e4ed1effd1ff199d4ca3319d99db1b0fc2afbbe50

See more details on using hashes here.

File details

Details for the file whatsapp_chat_exporter-0.9.1-py3-none-any.whl.

File metadata

File hashes

Hashes for whatsapp_chat_exporter-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 396ac9ce411031e183726ea0b52a1066f6c314cb9e5599ffcfcb23752fc5ce68
MD5 45663ed473f4d819374651d95b789e99
BLAKE2b-256 9a9a252d687450913850c89c904a550ea58d15cdef1dc2a1064bca721029a341

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page