JavaScriptを有効にしてください

【巨大データ】gdownの「Access denied」問題は諦めよう

 ·  ☕ 2 min read

TL;DR

  • クソデカファイルをGoogle Driveからダウンロードするときは, gdownではなくcurl直打ちでダウンロードしよう

はじめに

  • Google Drive内の50GBほどあるデータをgdownでダウンロードしようとすると以下のエラーが出た
Access denied with the following error:

 	Too many users have viewed or downloaded this file recently. Please
	try accessing the file again later. If the file you are trying to
	access is particularly large or is shared with many people, it may
	take up to 24 hours to be able to view or download the file. If you
	still can't access a file after 24 hours, contact your domain
	administrator. 
  • issue①にて作者曰く, “At the moment, I’m not sure how to avoid this error.“ということで, どうやらgdown上での解決策は無いらしい
    • 上のissueに関連して, つい2週間前issue②が建てられていたが, 当issueによると"If the file or folder is massive and surpasses the daily download limit of 750 GB.“と書いてある
      • ただしこれについては私はやや眉唾で, どこにも信頼できるソースが見つからなかった
      • むしろ, ダウンロードは10TBがlimitだと書いてあるモノもある(here)
  • ということでまずはgdownを諦めます👊

解決策

  • 結論から言うと, “Access denied"とあるのだから, アクセス権限を渡してcurlすれば良い

    • OAuth 2.0 Playgroundというシロモノを使えば, 時間制限付きだが自分専用のAccess-Tokenが発行できるので, OAuth認証(というかBearer認証)が手軽にできる
  • 解決策

    1. 当該URLからファイルIDを抜き出す (URLのどこがidなのかは適当にググってください)
    2. OAuth 2.0 Playgroundにアクセス
    3. “Drive API v3”を探してクリック→ 「 https://www.googleapis.com/auth/drive.readonly 」と書いてある所をクリック
    4. “exchange authorization code for tokens"をクリックして"Access Token"を取得
    5. curl -H "Authorization: Bearer <access-token>" https://www.googleapis.com/drive/v3/files/<file-id>?alt=media -o <output-path> を実行
      • <access-token>, <file-id>, <output-path>はご自身に適切なものを入れてください
共有

YuWd (Yuiga Wada)
著者
YuWd (Yuiga Wada)
機械学習・競プロ・iOS・Web