特定のフォルダ配下にあるファイル一覧を表示する
こちらは GET アクセスなので簡単だろう〜・・・とナメてかかって、割と引っかかりました。
url でパラメータを組み立てる時に 2 回 URL エンコードしてしまったというもの。
Google Drive API v3 で特定のフォルダ配下にあるファイルを引っ掛けるってのやってて、フォルダの中に一つしかファイルがないのに複数引っかかって???ってなってた。$uri->query_param( 'q' => "'$folder_id' in parents" );
— sironekotoro (@sironekotoro) 2020年11月11日ほんで、ググって見つけた C# のコード参考にしてみたら検索結果が1つだけと望んだ結果になった。$uri->query_param( 'q' => "'$folder_id' in parents and trashed = false" );
— sironekotoro (@sironekotoro) 2020年11月11日
ゴミ箱の中にあるファイルも、元どこのフォルダにあったかを記録しており、検索結果で明示的に除外する必要があると
つまり、「特定のフォルダの中にある」って条件だけじゃなくて「ゴミ箱の中にはない」とかちゃんと指定しようねというお話。まぁ、確かにね。
$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'" );
他の検索条件を使いたい人はこちら