<?php
$options = getopt("l::d:n:");
$l = isset($options['l']) ? (int)$options['l'] : null;
$d = isset($options['d']) ? $options['d'] : null;
$n = $options['n'] ?? null;
if (!$n) {
die("The -n argument is required.\n");
}
require 'vendor/autoload.php';
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\WebDriverBy;
function chrome_options() {
$options = new ChromeOptions();
$options->addArguments(["--user-data-dir=C:/Temp/ChromeProfile"]);
return $options;
}
// start webdriver
$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, chrome_options());
$browser = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
$browser->get('https://web.whatsapp.com');
$browser->manage()->window()->maximize();
echo "Please Wait...\n";
sleep(25);
$user_name = $n;
try {
$user = $browser->findElement(WebDriverBy::xpath("//span[@title='{$user_name}']"));
$user->click();
echo "User Found\n";
sleep(15);
$messages = $browser->findElements(WebDriverBy::className('copyable-text'));
$myname_messages = [];
if (count($messages) > 0) {
foreach ($messages as $message) {
$message_text = $message->getText();
$time_stamp = $message->getAttribute('data-pre-plain-text');
if ($message_text !== null && $time_stamp !== null) {
$combined_message = "{$time_stamp} - {$message_text}";
if (!in_array($combined_message, $myname_messages)) {
$myname_messages[] = $combined_message;
}
}
}
$filter_date = null;
$filtered_records = [];
$current_format = (strpos(date('d.m.Y'), '.') !== false) ? 'd.m.Y' : 'd/m/Y';
if ($d) {
$filter_date = DateTime::createFromFormat($current_format, $d);
if (!$filter_date) {
echo "Date format is not correct.\n";
exit;
}
}
// Get all messages
if ($l === null && $filter_date === null) {
foreach ($myname_messages as $record) {
echo $record . "\n";
$filtered_records[] = $record;
write_messages($filtered_records);
}
} else {
if ($l) {
$last_n = max($l, 1);
echo "Last {$last_n} messages:\n";
foreach (array_slice($myname_messages, -$last_n) as $record) {
echo $record . "\n";
$filtered_records[] = $record;
write_messages($filtered_records);
}
}
if ($filter_date) {
echo "Messages after the date: " . $filter_date->format('d.m.Y') . "\n";
foreach ($myname_messages as $record) {
$time_str = explode(' - ', $record)[0];
try {
$time_str = substr($time_str, strpos($time_str, '[') + 1, strpos($time_str, ']') - strpos($time_str, '[') - 1);
$message_date = DateTime::createFromFormat('H:i, d.m.Y', $time_str);
if ($message_date > $filter_date) {
echo $record . "\n";
$filtered_records[] = $record;
write_messages($filtered_records);
}
} catch (Exception $e) {
echo "Date format error: {$e->getMessage()}\n";
}
}
}
}
} else {
echo "Messages not found.\n";
}
} catch (Exception $e) {
echo "Error: {$e->getMessage()}\n";
}
$browser->quit();
// wait for qr code
sleep(35);
function write_messages($messages) {
$file = fopen("wp_messages.txt", "w");
if ($file) {
foreach ($messages as $message) {
fwrite($file, $message . PHP_EOL);
}
fclose($file);
}
}
?>
|