#!/usr/bin/perl use lib "../lib"; use Rest::Topsy; use Data::Dumper; my $topsy = new Rest::Topsy; #my $tasks = initialize_names($topsy); #save_task_history($topsy, $tasks); #exit; my $tasks = load_task_history($topsy); #print Dumper($tasks); #exit; my $i = 0; # foreach my $task (sort {$a->{'date'} <=> $b->{'date'}} @$tasks) foreach my $task (sort task_sort @$tasks) { my $tracking_data = $topsy->topsy_search($task->{'name'}); foreach my $k (keys %$tracking_data) { $task->{$k} = $tracking_data->{$k}; } $task->{'date'} = time; if ($i++ == 20) { save_task_history($topsy, $tasks); $i = 0; } sleep 35 + (int rand 20); } save_task_history($topsy, $tasks); exit; sub task_sort { $b->{'hour'} <=> $a->{'hour'} || $b->{'day'} <=> $a->{'day'} || $b->{'week'} <=> $a->{'week'} || $b->{'month'} <=> $a->{'month'} || $b->{'all'} <=> $a->{'all'} || $a->{'date'} <=> $b->{'date'} } sub initialize_names { my ($self) = @_; my $data = $self->read_data('../tmp/nndb/all-names-living.txt'); my @lines = split "\n", $data; my $names = {}; foreach my $line (@lines) { next unless $line; my ($id, $name) = split "\t", $line; if (exists ($names->{$name})) { $names->{$name} = -1 * $id; } else { $names->{$name} = $id; } } my $tasks = []; foreach my $name (keys %$names) { my $hash = {}; $hash->{'id'} = abs $names->{$name}; $hash->{'name'} = $name; $hash->{'date'} = -1; if ($names->{$name} < 1) { $hash->{'doppelganger'} = 1; } push @$tasks, $hash; } return $tasks; } sub save_task_history { my ($self, $tasks) = @_; my @keys = qw[id name date doppelganger all month week day hour]; my @lines; foreach my $task (@$tasks) { my @input; for (my $i = 0; $i < @keys; $i++) { push @input, $task->{$keys[$i]}; } my $line = join "\t", @input; push @lines, $line; } my $data = join "\n", @lines; $self->write_data("../tmp/nndb/tasks.txt", $data); } sub load_task_history { my ($self) = @_; my $data = $self->read_data('../tmp/nndb/tasks.txt'); my @lines = split "\n", $data; my @keys = qw[id name date doppelganger all month week day hour]; my $tasks = []; foreach my $line (@lines) { next unless $line; my (@input) = split "\t", $line; my $hash = {}; for (my $i = 0; $i < @input; $i++) { $hash->{$keys[$i]} = $input[$i]; } push @$tasks, $hash; } return $tasks; }