App-ggdrv
view release on metacpan or search on metacpan
lib/App/ggdrv/upload.pm view on Meta::CPAN
package App::ggdrv::upload ;
use strict;
use warnings;
use feature 'say' ;
use HTTP::Request::Common;
use JSON qw/encode_json decode_json/;
use LWP::UserAgent;
use Getopt::Std ;
use Carp;
my ($gfile , $atoken, $GOOGLE_DRIVE_UPLOAD_API , %o);
return 1 ;
sub upload {
getopts 'f:m:' , \%o ;
$o{f} //= '' ; # ãã©ã«ãå
$o{m} //= 'text/plain' ; # MIMEã¿ã¤ã
$gfile = $ENV{ GGDRV_API } // "~/.ggdrv2303v1" ;
$atoken = qx [ sed -ne's/^ACCESS_TOKEN[ =:\t]*//p' $gfile ] =~ s/\n$//r ;
$GOOGLE_DRIVE_UPLOAD_API = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart" ;
& f_each ( $_ ) for @ARGV ;
}
sub f_each ( $ ) {
binmode STDOUT, ":utf8";
my $mimeType = $o{m} ;
my $ej1 = encode_json { name => $_[0] , mimeType => $mimeType , $o{f} ne q[] ? ( parents => [ $o{f} ] ): () } ;
my $res = LWP::UserAgent -> new -> request (
POST $GOOGLE_DRIVE_UPLOAD_API ,
'Content-Type' => 'multipart/form-data' ,
Authorization => "Bearer $atoken" ,
Content => [
metadata => [ undef, undef , 'Content-Type' => 'application/json;charset=UTF-8' , 'Content' => $ej1 ] ,
file => [ $_[0] ] ,
] ,
) ;
my $j = decode_json ( $res->content ) ;
say join "\t" , map { $_ // 'undef' } $res->code , $j->{id}, $j->{name}, $j->{mimeType} , $j->{kind} ;
}
=encoding utf8
=head1
$0 -f ç®çã®ãã©ã«ãID ãã¡ã¤ã«å [ãã¡ã¤ã«å] [ãã¡ã¤ã«å] ..
æå®ãããã¡ã¤ã«ãæå®ããGoogleãã©ã¤ãã®ãã©ã«ãã«ã¢ãããã¼ãããã
(åãååã®ãã¡ã¤ã«ãè¤æ°åããã®ããã°ã©ã ãå®è¡ããã¨ãæ°è¦ã«æ¬¡ã
ã¨Googleãã©ã¤ãã«ã¢ãããã¼ãããããå°ãè¦æ³¨æã)
ãã®ããã°ã©ã 㯠HTTP::Request::Common ãç¨ãã¦ãã¦ãNet::Google::OAuthã使ããªãã
ãªãã·ã§ã³:
-f STR : æå®ããªããã空æåã ã¨ãã°ã¼ã°ã«ç´ä¸ã®ãã£ã¬ã¯ããªã«ãªãã
-m TYPE : text/csvããªã©ãæå®ã æªæå®ãªã text/plain ;
åºåä¾:
# 200
# {
# "kind": "drive#file",
# "id": "1...(å
¨é¨ã§33æå-_è±æ°å¤§æåå°æå)bag",
# "name": "test.txt",
# "mimeType": "text/plain"
# }
=cut
( run in 0.594 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )