package EPrints::Plugin::Export::TweetStream::CSV;
use EPrints::Plugin::Export;
use EPrints::Plugin::Export::Grid;
@ISA = ( "EPrints::Plugin::Export::Grid" );
use strict;
sub new
{
my( $class, %opts ) = @_;
my $self = $class->SUPER::new( %opts );
$self->{name} = "CSV";
$self->{accept} = [ 'dataobj/tweetstream' ];
$self->{visible} = "all";
$self->{suffix} = ".csv";
$self->{mimetype} = "text/csv";
return $self;
}
sub output_dataobj
{
my( $plugin, $dataobj, %opts ) = @_;
my $repository = $dataobj->repository;
my $cols = $dataobj->csv_cols;
my $r = [];
my @headings;
foreach my $col (@{$cols})
{
if ($col->{ncols} == 1)
{
push @headings, $repository->phrase('tweet_fieldname_' . $col->{fieldname});
}
else
{
my $n = $col->{ncols};
foreach my $i (1..$n)
{
push @headings, $repository->phrase('tweet_fieldname_' . $col->{fieldname}) . ' ' . $i;
}
}
}
push @{$r}, csv(@headings);
#and now the data
$dataobj->tweets->map(sub
{
my ($repository, $dataset, $tweet) = @_;
my @data;
foreach my $col (@{$cols})
{
my $val = $tweet->value($col->{fieldname});
$val = [ $val ] if (not ref $val);
my $n = $col->{ncols};
foreach my $i (1..$n)
{
push @data, (defined $val->[$i-1] ? $val->[$i-1] : undef);
}
}
push @{$r}, csv(@data);
});
if( defined $opts{fh} )
{
print {$opts{fh}} join( "", @{$r} );
return;
}
return join( "", @{$r} );
}
sub csv
{
my( @row ) = @_;
my @r = ();
foreach my $item ( @row )
{
if( !defined $item )
{
push @r, '""';
next;
}
$item =~ s/"/""/g;
$item =~ s/\r?\n//g;
push @r, '"'.$item.'"';
}
return join( ",", @r )."\n";
}
1;
=head1 COPYRIGHT
=for COPYRIGHT BEGIN
Copyright 2000-2011 University of Southampton.
=for COPYRIGHT END
=for LICENSE BEGIN
This file is part of EPrints L.
EPrints is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
EPrints is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with EPrints. If not, see L.
=for LICENSE END