#!/usr/bin/perl
# compare Facebook group member details day to day for changes
# Copyright       : http://www.fsf.org/copyleft/gpl.html
# Author          : Dan Jacobson -- http://jidanni.org/
# Created On      : 2013/9
# Last Modified On: Fri Sep 13 09:21:48 2013
# Update Count    : 68
use strict;
use warnings FATAL => 'all';
binmode STDERR, ":unix";
binmode STDERR, ":utf8";
binmode STDOUT, ":unix";
binmode STDOUT, ":utf8";
use utf8;
use open qw/:std :encoding(utf8)/;
use JSON;
##my @groups=(320448571355058,204016772972765);
my @fields =
  ( 'first_name', 'name', 'name_format', 'location', 'last_name', 'picture' );
my %h;
local $/;

for my $version ( 'old', 'new' ) {
    die unless open( my $fh, '<', $version );
    my $json_text = <$fh>;
    die unless close $fh;
    my $p = decode_json($json_text);
    for my $g(keys $p) {
        for my $m ( 0.. $#{$$p{$g}{members}{data}} } ) {
            my $uid = $$p{$g}{members}{data}[$m]{id};
            my $known =
              exists $h{$version}{ $uid
              }; #they are a member of two groups. we already got them in group 1
            push @{ $h{$version}{$uid}{groups} }, $g;
            next if $known;
            for my $f (@fields) {
                $h{$version}{$uid}{$f} = defined $$p{$g}{members}{data}[$m]{$f} ? $$p{$g}{members}{data}[$m]{$f} : "";
            }
        }
    }
}

for my $u ( keys $h{new} ) {
    if ( exists $h{old}{$u} ) {
        for my $i ( 'is_silhouette', 'url' ) {
            if ( $h{new}{$u}{picture}{data}{$i} eq
                $h{old}{$u}{picture}{data}{$i} )
            {
                delete $h{new}{$u}{picture}{data}{$i};
            }
        }
        for my $i (@fields) {

            if ( $h{new}{$u}{$i} eq $h{old}{$u}{$i} ) {
                delete $h{new}{$u}{$i};
            }
        }
        delete $h{new}{$u}
          if keys $h{new}{$u} eq "groups";    #and nothing else left.
    }
    else { delete $h{new}{$u} }
}
use Data::Dumper;
if ( $h{new} ) { print Dumper( $h{new} ) }
