App-ggdrv
view release on metacpan or search on metacpan
INSTALL
lib/App/ggdrv/crecord.pm
lib/App/ggdrv/download.pm
lib/App/ggdrv/download5.pm
lib/App/ggdrv/fsearch.pm
lib/App/ggdrv/fsearchall.pm
lib/App/ggdrv/start.pm
lib/App/ggdrv/sync5.pm
lib/App/ggdrv/tokens.pm
lib/App/ggdrv/update.pm
lib/App/ggdrv/upload.pm
lib/App/ggdrv/upload5.pm
Makefile.PL
MANIFEST This list of files
README
META.yml Module YAML meta-data (added by MakeMaker)
META.json Module JSON meta-data (added by MakeMaker)
use Getopt::Long qw [ GetOptions :config bundling no_ignore_case pass_through ] ; # GetOptionsFromArray ] ;
use Time::HiRes qw[ gettimeofday tv_interval sleep ] ; # Perl 5.7.3ããã³ã¢ã¢ã¸ã¥ã¼ã«
use Term::ANSIColor qw[ color :constants ] ; $Term::ANSIColor::AUTORESET = 1 ;
use FindBin qw[ $Script $Bin ] ;
use lib "$FindBin::Bin/lib" ;
use App::ggdrv::start ; # GCPã§APIãè¨å®ããæ¹æ³ããèªã人ã«èª¬æããææ¸ã表示ããã
use App::ggdrv::crecord ; # è¨å®ãã¡ã¤ã«ã®æ¸ãè¾¼ã¿æ¹ã説æãããèªåå®è¡ã®æ©è½ãæä¾ã
use App::ggdrv::tokens ; # ãã¼ã¯ã³2åãè¨å®ããã表示ãå¯è½ã
use App::ggdrv::fsearch ;
use App::ggdrv::fsearchall ;
use App::ggdrv::upload ;
use App::ggdrv::update ;
use App::ggdrv::download ;
use App::ggdrv::upload5 ; # uploadã«ä¾å
use App::ggdrv::download5 ;
use App::ggdrv::sync5 ; # update ã«ä¾å
## è¨ç®ç§æ°ãªã©ã«ã¤ãã¦ã®å¦ç
#my %o ;
our $prt2 ; # æå¾ã«2次æ
å ±ãåºããªããªã 0 ã¨ããå¤ãè¨å®ãããã
my $time_start = [ gettimeofday ] ;
END{ ## çµäºããæ®µéã§ãäºæ¬¡æ
å ±ã表示ãã
exit if 0 eq ($prt2//'') ;# 0 eq ( $o{2} // '' ) ;
use POSIX qw [ strftime ] ;
my $dt1000 = sub { my $t = [ gettimeofday ] ; strftime( "%Y-%m-%d %H:%M:%S." . sprintf("%03d", $t->[1] / 1e3 ) , localtime( $t->[0] ) ) } ;
my $a1 = shift @ARGV or do { $prt2 = 0 ; & App::ggdrv::start::start() ; exit } ;
GetOptions ( '2=s' => \$prt2 ) ;
GetOptions ( run => \my$run ) ;
GetOptions ( tokens => \my$tokens , get => \my$get , try => \my$try , atoken => \my$atoken ) ;
for ( $a1 ) {
/^crecord$/ and & App::ggdrv::crecord::crecord( $run ) and $prt2 = 0 ;
/^(tokens|token)$/ and & App::ggdrv::tokens::tokens( $get , $try , $atoken ) ;
/^fsearch$/ and & App::ggdrv::fsearch::fsearch () ;
/^fsearchall$/ and & App::ggdrv::fsearchall::fsearchall () ;
/^upload$/ and & App::ggdrv::upload::upload () ;
/^update$/ and & App::ggdrv::update::update () ;
/^download$/ and & App::ggdrv::download::download () ;
/^upload5$/ and & App::ggdrv::upload5::upload5 () ; ## ãããã5åTSVãã¡ã¤ã«ã使ã£ãæä½3種é¡
/^download5$/ and & App::ggdrv::download5::download5 () ;
/^sync5$/ and & App::ggdrv::sync5::sync5 () ;
/^--help$/ and do { $prt2=0 ; & HELP_MESSAGE } ;
}
exit ;
## ãã«ãã®æ±ã
sub VERSION_MESSAGE {}
sub HELP_MESSAGE{
use FindBin qw[ $Script ] ;
ggdrv tokens # ãã¼ã¯ã³ã®æ
å ±2åãåã«è¡¨ç¤ºããã(ãªãã¬ãã·ã¥ãã¼ã¯ã³(使ããªãã¨åå¹´ã§ç¡å¹å)ã¨ã¢ã¯ã»ã¹ãã¼ã¯ã³ãããã)
ggdrv tokens --get # ãã¼ã¯ã³ãåå¾ãã(è¨å®ãã¡ã¤ã«ã«æ¸ãè¾¼ã)ãæ¸ãè¾¼ãåã®ãã¡ã¤ã«ã¯ããã¯ã¢ããã¯1åã®ã¿ä¿ç®¡ã
ggdrv tokens --get --try # ãã¼ã¯ã³ãåå¾ããããè¨å®ãã¡ã¤ã«ã«ã¯æ¸ãè¾¼ã¾ãªãã
ggdrv tokens --atoken # ã¢ã¯ã»ã¹ãã¼ã¯ã³ã®ã¿æ´æ°ããã60åæªä½¿ç¨ã§ããã°ãæ´æ°ã¯å¿
è¦ã-try ãæå®ããã¨è¨å®ãã¡ã¤ã«ã«æ¸ãè¾¼ã¾ãªãã
[ãã¡ã¤ã«æ¤ç´¢]
ggdrv fsearch FILENAME # ãã¡ã¤ã«ãæå¤§100åã¾ã§æ¢ã(ãã©ã«ãã¯æå®ä¸è½)ãã¯ã¤ã«ãã«ã¼ããæå®å¯è½ãã¿ãåºåã5åã§åºåã
ggdrv fsearchall -g10 # ãã¡ã¤ã«ã100åã㤠-g ã§æå®ããåæ°åºå(ãã©ã«ãã¯æå®ä¸è½)ã1åã®ãã¡ã¤ã«ã«ã¤ãã縦ã«4è¡ãåºåã## <-- æã
ãªãã¬ãã·ã¥ãã¼ã¯ã³ãæ´æ°ããå¿
è¦ããã
[(åç´ãª)ã¢ãããã¼ã/æ´æ°/ãã¦ã³ãã¼ã]
ggdrv upload -f ãã©ã«ãID(28æå) FILE [FILE] .. # ã¢ãããã¼ãããã ååãã¡ã¤ã«ã«å¯¾ãè¤æ°åå®è¡ãããããã®åã°ã¼ã°ã«ãã©ã¤ãä¸ã«ç¾ããã®ã§æ³¨æã
ggdrv update ID1 FILE1 [ID2 FILE2] [ID3 FILE3] .. # æ´æ°ããã33æåã®IDã«å¯¾ãã¦ããã¼ã«ã«ã®ãã¡ã¤ã«ã®ååããã¢ã«ãã¦æå®ã
ggdrv download ãã¡ã¤ã«ID(33æå) ãã¼ã«ã«ã§äºå®ãããã¡ã¤ã«å # ãã¦ã³ãã¼ãããã
[使¥å¯¾è±¡ã®ãã¡ã¤ã«ã管çãã¤ã¤ã¢ãããã¼ã/æ´æ°/ãã¦ã³ãã¼ã] â» ãµãã³ãã³ãã«ã5ããå¾ç½®ããã®ãç¹å¾´ã
ggdrv upload5 FOLDER_ID LOCAL_DIR > VAR_FILE # ã¢ãããã¼ããããæ¨æºåºåããã¡ã¤ã«ã«ä¿ç®¡ãã¦ãç¶ããµãã³ãã³ãã§ã使ãã
ggdrv download5 LOCAL_DIR < VAR_FILE # ãã¦ã³ãã¼ãããã
ggdrv sync5 OLD_DIR NEW_DIR < VAR_FILE # åæã«ä½¿ããOLD_DIRã¯Googleãã©ã¤ãã¨äºãåæãããNEW_DIRã¨éãã°ããããã¢ãããã¼ãã
ãªãã·ã§ã³:
-2 0 : æå¾ã«2次æ
å ±ãæ¨æºã¨ã©ã¼åºåã«åºããªãããµãã³ãã³ãã®å¾ãã«ç½®ããã¨ã
ç°å¢å¤æ° : export VAR=VALUE ã§æå®ãunset VAR ã§è§£é¤ãå¯è½ã
GGDRV_API : ã¯ã©ã¤ã¢ã³ãIDãã¯ã©ã¤ã¢ã³ãã·ã¼ã¯ã¬ãããä¿ç®¡ãããã¡ã¤ã«ã®ååãæªæå®ãªã ~/ggdrv2303v1 ã§ããã
ggdrv tokens # ãã¼ã¯ã³ã®æ
å ±2åãåã«è¡¨ç¤ºããã(ãªãã¬ãã·ã¥ãã¼ã¯ã³(使ããªãã¨åå¹´ã§ç¡å¹å)ã¨ã¢ã¯ã»ã¹ãã¼ã¯ã³ãããã)
ggdrv tokens --get # ãã¼ã¯ã³ãåå¾ãã(è¨å®ãã¡ã¤ã«ã«æ¸ãè¾¼ã)ãæ¸ãè¾¼ãåã®ãã¡ã¤ã«ã¯ããã¯ã¢ããã¯1åã®ã¿ä¿ç®¡ã
ggdrv tokens --get --try # ãã¼ã¯ã³ãåå¾ããããè¨å®ãã¡ã¤ã«ã«ã¯æ¸ãè¾¼ã¾ãªãã
ggdrv tokens --atoken # ã¢ã¯ã»ã¹ãã¼ã¯ã³ã®ã¿æ´æ°ããã60åæªä½¿ç¨ã§ããã°ãæ´æ°ã¯å¿
è¦ã-try ãæå®ããã¨è¨å®ãã¡ã¤ã«ã«æ¸ãè¾¼ã¾ãªãã
[ãã¡ã¤ã«æ¤ç´¢]
ggdrv fsearch FILENAME # ãã¡ã¤ã«ãæå¤§100åã¾ã§æ¢ã(ãã©ã«ãã¯æå®ä¸è½)ãã¯ã¤ã«ãã«ã¼ããæå®å¯è½ãã¿ãåºåã5åã§åºåã
ggdrv fsearchall -g10 # ãã¡ã¤ã«ã100åã㤠-g ã§æå®ããåæ°åºå(ãã©ã«ãã¯æå®ä¸è½)ã1åã®ãã¡ã¤ã«ã«ã¤ãã縦ã«4è¡ãåºåã## <-- æã
ãªãã¬ãã·ã¥ãã¼ã¯ã³ãæ´æ°ããå¿
è¦ããã
[(åç´ãª)ã¢ãããã¼ã/æ´æ°/ãã¦ã³ãã¼ã]
ggdrv upload -f ãã©ã«ãID(28æå) FILE [FILE] .. # ã¢ãããã¼ãããã ååãã¡ã¤ã«ã«å¯¾ãè¤æ°åå®è¡ãããããã®åã°ã¼ã°ã«ãã©ã¤ãä¸ã«ç¾ããã®ã§æ³¨æã
ggdrv update ID1 FILE1 [ID2 FILE2] [ID3 FILE3] .. # æ´æ°ããã33æåã®IDã«å¯¾ãã¦ããã¼ã«ã«ã®ãã¡ã¤ã«ã®ååããã¢ã«ãã¦æå®ã
ggdrv download ãã¡ã¤ã«ID(33æå) ãã¼ã«ã«ã§äºå®ãããã¡ã¤ã«å # ãã¦ã³ãã¼ãããã
[使¥å¯¾è±¡ã®ãã¡ã¤ã«ã管çãã¤ã¤ã¢ãããã¼ã/æ´æ°/ãã¦ã³ãã¼ã] â» ãµãã³ãã³ãã«ã5ããå¾ç½®ããã®ãç¹å¾´ã
ggdrv upload5 FOLDER_ID LOCAL_DIR > VAR_FILE # ã¢ãããã¼ããããæ¨æºåºåããã¡ã¤ã«ã«ä¿ç®¡ãã¦ãç¶ããµãã³ãã³ãã§ã使ãã
ggdrv download5 LOCAL_DIR < VAR_FILE # ãã¦ã³ãã¼ãããã
ggdrv sync5 OLD_DIR NEW_DIR < VAR_FILE # åæã«ä½¿ããOLD_DIRã¯Googleãã©ã¤ãã¨äºãåæãããNEW_DIRã¨éãã°ããããã¢ãããã¼ãã
ãªãã·ã§ã³:
-2 0 : æå¾ã«2次æ
å ±ãæ¨æºã¨ã©ã¼åºåã«åºããªãããµãã³ãã³ãã®å¾ãã«ç½®ããã¨ã
ç°å¢å¤æ° : export VAR=VALUE ã§æå®ãunset VAR ã§è§£é¤ãå¯è½ã
GGDRV_API : ã¯ã©ã¤ã¢ã³ãIDãã¯ã©ã¤ã¢ã³ãã·ã¼ã¯ã¬ãããä¿ç®¡ãããã¡ã¤ã«ã®ååãæªæå®ãªã ~/ggdrv2303v1 ã§ããã
lib/App/ggdrv/download.pm view on Meta::CPAN
sub download {
getopts '~',\my%o ;
my $gfile = $ENV{ GGDRV_API } // "~/.ggdrv2303v1" ;
my $cid = qx [ sed -ne's/^CLIENT_ID[ =:\t]*//p' $gfile ] =~ s/\n$//r ; #"54525797.....34dseo.apps.googleusercontent.com" ;
my $csec = qx [ sed -ne's/^CLIENT_SECRET[ =:\t]*//p' $gfile ] =~ s/\n$//r ; # "GOCSP...YUbpe1" ;
my $rtoken = qx [ sed -ne's/^REFRESH_TOKEN[ =:\t]*//p' $gfile ] =~ s/\n$//r ;
my $atoken = qx [ sed -ne's/^ACCESS_TOKEN[ =:\t]*//p' $gfile ] =~ s/\n$//r ;
my $disk = Net::Google::Drive->new( -client_id => $cid, -client_secret => $csec, -access_token => $atoken, -refresh_token => $rtoken );
do { my @f = $ARGV[0] ? ($ARGV[0] ) : () ; my $r = $disk->uploadFile( -source_file => $ARGV[1], -parents => [ @f ] ) ; exit } if $o{'~'} ;
$disk->downloadFile( -file_id => $ARGV[0], -dest_file => $ARGV[1] ) or do { use Carp ; croak "Failure to download." } ;
}
=encoding utf8
=head1
ggdrv --download file_id local_file_name # ãã¦ã³ãã¼ã
ggdrv --download -~ folder_id local_file_name # ã¢ãããã¼ã
lib/App/ggdrv/update.pm view on Meta::CPAN
use HTTP::Request::Common ;
use JSON qw[ encode_json ] ;
use LWP::UserAgent ;
use URI::QueryParam ;
use URI ;
my ($GOOGLE_DRIVE_UPLOAD_API , $gfile , $atoken ) ;
return 1 ;
sub update {
$GOOGLE_DRIVE_UPLOAD_API = "https://www.googleapis.com/upload/drive/v3/files/";
$gfile = $ENV{ GGDRV_API } // "~/.ggdrv2303v1" ;
$atoken = qx [ sed -ne's/^ACCESS_TOKEN[ =:\t]*//p' $gfile ] =~ s/\n$//r ;
while ( my ($file,$id) = splice @ARGV , 0 , 2 ) { f_each ($file,$id) }
# & f_each ( split /:/, $_ , 2 ) for @ARGV ;
}
sub f_each ( $$ ) {
my $URI = URI->new( $GOOGLE_DRIVE_UPLOAD_API . $_[1] );
$URI->query_param( uploadType => 'multipart' );
my $ua = LWP::UserAgent->new;
my $res = $ua->request(
PATCH $URI,
'Content-Type' => 'multipart/form-data',
Authorization => "Bearer $atoken" ,
Content => [
metadata => [
undef, undef, # undef => undef ã¨æ¸ããã¨ã¯åºæ¥ãã ããã?
'Content-Type' => 'application/json;charset=UTF-8',
'Content' => encode_json( {} ) #name=>'temp.txt', mimeType=>'text/plain', parents => ['10_33chars_in_total'], id => $target_fileid},
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' ,
lib/App/ggdrv/upload5.pm view on Meta::CPAN
package App::ggdrv::upload5 ;
use strict ;
use warnings ;
use feature qw [ say ] ;
use FindBin qw [ $Bin ] ;
use Getopt::Std ;
use Cwd ;
use Carp ;
return 1 ;
sub upload5 {
getopts 'm:n', \my %o ;
$o{m} //= 'text/plain' ;
$ARGV[1] //= '.' ; # ãã¼ã«ã«ã®ãã£ã¬ã¯ããªåã
my $cwd = getcwd ;
chdir $ARGV[1] or die ;
my @files = grep { -f } <*> ; # ãã£ã¬ã¯ããªã¯å¯¾è±¡å¤ã¨ãªãã
my $out = '' ; #
#print qx[ $FindBin::Bin/upload11.pl -m $o{m} -f $ARGV[0] $_ ] for @files ;
do { print qx [ $0 upload -20 -m $o{m} -f $ARGV[0] $_ ] for @files } if ! $o{n} ;
do { say qq [ $0 upload -20 -m $o{m} -f $ARGV[0] $_ ] for @files } if $o{n} ;
chdir $cwd ;
}
=encoding utf8
=head1
ggdrive updoad5 FOLDER_ID LOCAL_DIR > VAR_FILE
( run in 2.888 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )