👻
GoogleDriveからresource_keyつきでファイル情報を取得する
前提
Ruby on Railsを利用
google-api-client gemを利用
ユースケース
Googleドライブの共有用URLをユーザーが入力する
システムは共有用URLをparseし、GoogleAPI経由でファイルの情報を取得する
サンプルコード
service = Google::Apis::DriveV3::DriveService.new
service.authorization = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: StringIO.new(SAMPLE_CREDENTIALS), scope: [SAMPLE_SCOPE])
resource keyなしの場合
file = service.get_file(GoogleドライブのファイルID)
resource keyありの場合
file = service.get_file(GoogleドライブのファイルID, options: { header: { 'X-Goog-Drive-Resource-Keys' => リソースキー } })
X-Goog-Drive-Resource-Keys
というtypoくさい文字列を使っている点が、私は非常に気に食わない
GoogleドライブのファイルIDについて
以下の3条件を満たす
- 0ないし1始まりである
- 28桁ないし33桁である
- 使われる文字は正規表現で表現すると
%r{[~\-=\w]} # RFC-3986に基づく
今回はユーザーから入力されたURLを入力とすることから、ユーザーの入力文面からString#scanを用いて正規表現で抽出することを前提としている。
URIの形で渡される場合と、URLパラメータとして id=...
の形で渡される場合がある
resource_keyについて
以下の2条件を満たす
- 0-始まりの24桁である(あまり確信がない)
- URLパラメータとして
resourcekey=...
の形で渡される。
- スネークケースでもキャメルケースでもないのが非常に気持ち悪い
Googleドライブの共有URLについて
知る限り4パターンくらいある。
ファイルの配置場所がマイドライブかそれ以外かで異なる。
フォルダの場合パターンが変わる場合もある。
Google DriveのフォルダID命名規則(勝手に見つけた法則) がいうよりおそらくURLのパターンは多いように感じられる・・・。
なので正規表現で頑張って抜き出すしかない。
Discussion