Skip to content

Instantly share code, notes, and snippets.

@fumikito
Created August 25, 2017 15:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fumikito/c0840cbdf1450699a3cd6a280305b24c to your computer and use it in GitHub Desktop.
Save fumikito/c0840cbdf1450699a3cd6a280305b24c to your computer and use it in GitHub Desktop.
Parse facebook message from archived data
<?php
# composer require sunra/php-simple-html-dom-parser
require __DIR__ . '/vendor/autoload.php';
// Change file size because fb message archive is very big data.
define( 'MAX_FILE_SIZE', 1000000000 );
$dom = Sunra\PhpSimple\HtmlDomParser::file_get_html( 'messages.htm' );
$messages = [];
foreach( $dom->find('div.message') as $message ) {
$date = $message->find('.meta', 0)->innertext;
// You can filter message here.
if ( preg_match( '#2017年8月25日 1[34]#', $date ) ) {
$messages[] = [
'user' => $message->find( '.user', 0 )->innertext,
'message' => $message->nextsibling()->innertext, // Message content is p tag ;(
];
}
}
// Do stuff.
ob_start();
$former = '';
for ( $i = count( $messages ); $i > 0; $i-- ) {
$message = $messages[$i-1];
$first_letter = ucfirst( substr( $message['user'], 0, 1 ) );
$class_name = '';
$prefix = "<strong>{$first_letter}:</strong> ";
if ( 'F' == $first_letter ) {
$prefix = '——';
$class_name = ' class="interviewer"';
}
if ( $former == $first_letter ) {
$prefix = '';
}
$former = $first_letter;
printf( '<p%s>%s%s</p>', $class_name, $prefix, $message['message'] );
echo PHP_EOL;
}
file_put_contents( './message-log.html', ob_get_contents() );
ob_end_clean();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment