さて、Google Cloud Platform で利用する ACCESS TOKEN と REFRESH TOKEN を手にしたからには、次の段階へ向かわねばなりません。
そもそも、なんか OAuth いじるの楽しくなって色々やってしまいましたが、これは目的と手段が逆転するいつものパターンです。
楽しいんですよねー
Google Drive に上がっているファイル一覧を取得する
GET でパラメータを並べていくだけなので、簡単にできました。
注意するところとしては、一回の応答で取得できるのは100件のみ。100件以上ファイルがある場合には応答に nextPageToken
が含まれるので、次の API 組み立ての際に pageToken
を加えてアクセスって感じです。
これで連続取得ができます。
大量にファイルがあると返ってこないので、5 回取得したら(つまり 500件)ループを抜けるようにしてます。
#!/usr/bin/env perl use strict; use warnings; binmode STDOUT, ":utf8"; use HTTP::Tiny; use JSON; use URI::Escape; use URI; my $GOOGLE_DRIVE_API = "https://www.googleapis.com/drive/v3/files"; my $ACCESS_TOKEN = ""; my $count_limit = 5; # 全てのファイルを取得する my $uri = URI->new($GOOGLE_DRIVE_API); $uri->query_form( access_token => $ACCESS_TOKEN ); files($uri); sub files { my $uri = shift; my $count = 0; my $ht = HTTP::Tiny->new(); while ( $count < $count_limit ) { my $contents = decode_json( $ht->get($uri)->{content} ); $uri->query_form( access_token => $ACCESS_TOKEN, pageToken => $contents->{nextPageToken}, ); for my $content ( @{ $contents->{files} } ) { print "=" x 20 . "\n"; printf( "%-8s: %s\n", "id", $content->{id} ); printf( "%-8s: %s\n", "name", $content->{name} ); printf( "%-8s: %s\n", "mimeType", $content->{mimeType} ); printf( "%-8s: %s\n", "kind", $content->{kind} ); print "=" x 20 . "\n"; } $count++; last if !$contents->{nextPageToken}; # 最終ページには nextPageToken キーが無い } }
==================== id : 13uf_8fJph3J3raPee0Sg5rsgb-w5MIUBLVdhDhD8xSE name : チェックリスト mimeType: application/vnd.google-apps.document kind : drive#file ==================== ==================== id : 1f9ZuDCOSGUujhSSXvv_kruzI7qbkKq9FQXf2YuNn_Io name : メモ mimeType: application/vnd.google-apps.document kind : drive#file ==================== ...