sironekotoroの日記

Perl で楽をしたい

Perl で Google Drive API をつかって特定フォルダ配下のファイル一覧を取得する

特定のフォルダ配下にあるファイル一覧を表示する

こちらは GET アクセスなので簡単だろう〜・・・とナメてかかって、割と引っかかりました。

  • url でパラメータを組み立てる時に 2 回 URL エンコードしてしまったというもの。

つまり、「特定のフォルダの中にある」って条件だけじゃなくて「ゴミ箱の中にはない」とかちゃんと指定しようねというお話。まぁ、確かにね。

$folder_id の中にあるファイル・フォルダの ID が表示されます。

#!/usr/bin/env perl
use strict;
use warnings;

use HTTP::Tiny;
use URI::QueryParam;
use URI;

my $ACCESS_TOKEN    = '';

my $folder_id = '10kCqEUmWsWlqMdP_vF9pDGrQXFVZ-Lvr';

my $uri = URI->new('https://www.googleapis.com/drive/v3/files');

$uri->query_param( 'q' => "'$folder_id' in parents and trashed = false" );

my $bearer = join ' ', ( 'Bearer', $ACCESS_TOKEN );

my $ht  = HTTP::Tiny->new( default_headers => { Authorization => $bearer } );
my $res = $ht->get($uri);

print $res->{content};

# {
#  "kind": "drive#fileList",
#  "incompleteSearch": false,
#  "files": [
#   {
#    "kind": "drive#file",
#    "id": "1dZU7-4d52U2pRWsmMLhMEuh8Cpa0m8sI",
#    "name": "hogefuga.txt",
#    "mimeType": "text/plain"
#   }
#  ]
# }

query_param で組み立てている検索条件を名前での検索にする時はこんな感じ。クォーテーションの位置とかでわりと試行錯誤しました。

$uri->query_param( 'q' => "name = 'hogefuga.txt'" );

他の検索条件を使いたい人はこちら

developers.google.com