#!/usr/bin/perl -w
use strict;
use Time::Local;

# get twitter archive and generate kml this way
# then impoprt kml using classic google map
# perl ~/src/weba2kml/web2kml.pl ~/etc/twitter/tweets/data/js/tweets/2014_02.js | nkf -w --numchar-input > ~/etc/twitter/tedakowalk2014.kml


my $time =  timelocal(0,0,0,1,0,70);

my @monthname = ( 'Jan','Feb', 'Mar', 'Apr', 'May', 'Jun',
     'Jul','Aug','Sep','Oct','Nov', 'Dec');
my %monthname;
my $i;
foreach my $name (@monthname) { $monthname{$name} = $i++; }

my $header = << "EOFEOF";
<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
        <Document>
                <Folder>
EOFEOF

my $footer = << "EOFEOF";
                </Folder>
        </Document>
</kml>
EOFEOF

print $header;
my %items ;
my $item = {};
while(<>) {
    if (m!maps.google.com/maps\?q=([.\d]+)\%2C([.\d]+)\&amp;!) {
       $item->{x} = $1;
       $item->{y} = $2;
    }
    if (m!<p class="js-tweet-text">(.*?)<a href="(.*?)"!) {
       $item->{text} = $1;
       $item->{url} = $2;
    } elsif (m!<p class="js-tweet-text">(.*?)</p>!) {
       $item->{text} = $1;
    }
    if (m!data\-expanded\-url\="(http://p\.twipple\.jp/.*?)"!) {
       $item->{image} = $1;
    }
    if (m! href\=\"\/(.*?/status/\d+)\"!) {
       $item->{tweet} = $1;
    }
    if (m!"tweet-timestamp js-permalink js-nav" title="(.*?)"!) {
       $item->{date} = $1;
    }
    if (m!data\-time="(\d+)"!) {
       $item->{time} = $1;
    }
    if (m!<ul class="dropdown-menu">!) {
       &add_item;
    }
# for twitter json
    if (m!"coordinates"\s*:\s*\[\s*([.\d]+),\s*([.\d]+)\s*\]!) {
       $item->{x} = $1;
       $item->{y} = $2;
    }
    if (m!"text" : "(.*?)"!) {
       $item->{text} = $1;
    }
    if (m!expanded_url" : "(http://p\.twipple\.jp/.*?)"!) {
       $item->{image} = $1;
    }
    if (m!"screen\_name" : "(.*?)",!) {
       $item->{screen_name} = $1;
    }
    if (m!"id" : (\d+),!) {
       next if ($item->{id}); # skip user id
       $item->{id} = $1;
    }
    if (m!"created_at" : "(.*?)",!) {
       $item->{time} = &to_unix($1);
       $item->{date} = localtime($item->{time});
    }
    if (m!^\}, \{!) {
       $item->{tweet} = "$item->{screen_name}/status/$item->{id}";
       &add_item;
       $item->{id} = '';
    }
}

sub to_unix {
    my($d) = @_;
    #  $time = timegm($sec,$min,$hour,$mday,$mon,$year);
    #               1    2      3    4     5        6      7
    if ($d =~ /\w+ (\w+) (\d+) (\d+):(\d+):(\d+) \+(\d+) (\d+)/) {
       return timegm($5,$4,$3,$2,$monthname{$1},$7);
    # 2014-02-02 08:12:46 +0000
    #                1     2      3    4     5    6       7
    } elsif ($d =~ /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+) \+(\d+)/) {
       return timegm($4,$5,$4,$3,$2-1,$1);
    } else {
       return $time++;
    }
}

sub add_item {
   if (defined $item->{time} && $item->{time}) {
   $items{$item->{time}} = $item;
# print $item->{time}, " ", join(":",keys %$item),"\n";
   }
   $item = {};
}

$items{$item->{time}} = $item if (defined $item->{time});

foreach my $k (sort {$a<=>$b} keys %items) {
       my $item = $items{$k};  
       if (defined $item->{text} && defined $item->{x}) {
           print_item($item);
       }
}

print $footer;
 

#                        <Placemark>
#                                <name>2011-02-05 12:59:22 +0900</name>
#                                <description>
#                                        <![CDATA[
#                                        そして川沿いの桜 http://twitpic.com/3wlsjt
#                                        <a href="http://twitter.com/shinji_kono/status/33736411991511040">twitter</a>
#                                        ]]>
#                                </description>
#                                <Point>
#                                        <coordinates>127.71889705,26.242138,-1</coordinates>
#                                </Point>
#                        </Placemark>

# <a href=""><img src="http://p.twpl.jp/show/thumb/Gqv0i"></a>

sub print_item {
    my ($item) = @_;
    print "<Placemark>\n";
    if (defined $item->{text}) { 
        my $text = $item->{text};
        $text =~ s/\\u([0-9A-F][0-9A-F][0-9A-F][0-9A-F])/\&\#x$1;/g;
        print "<name>$text</name>\n"; 
    }
    if (defined $item->{x}) { print "<Point>\n<coordinates>$item->{y},$item->{x},-1</coordinates> </Point>\n"; }
    $item->{image} = '' if (! defined $item->{image}) ;
    $item->{date} = '' if (! defined $item->{date}) ;
#    if (! defined $item->{tweet}) { print $item->{text},"\n"; }
    # $item->{tweet} = '' if (! defined $item->{tweet}) ;
    if (defined $item->{text}) { print <<"EOFEOF";
                                <description>
                                        <![CDATA[
                                        $item->{date} $item->{image}
                                        <a href="http://twitter.com/$item->{tweet}">twitter</a>
                                        ]]>
                                </description>
EOFEOF
    }
    print "</Placemark>\n";
}

# end
