Google Drive APIを使用したGoogle Driveからの直接ダウンロード
私のJavaで書かれたデスクトップアプリケーションは、Google Driveから公開ファイルをダウンロードしようとします。私が調べたところ、これはファイルの webContentLink
を使って実装することができます(ユーザーの承認なしに公開ファイルをダウンロードする機能です)。
そのため、以下のコードは小さなファイルであれば動作します。
String webContentLink = aFile.getWebContentLink();
InputStream in = new URL(webContentLink).openStream();
なぜなら、この場合、グーグルウィルススキャンによる警告を伴うユーザー確認なしに、webContentLink
を介して直接ファイルをダウンロードすることができないからです。例を見てみましょう。ウェブコンテンツリンクを参照してください。
そこで質問なのですが、Google Driveから公開ファイルの内容をユーザーの承認なしに取得する方法はありますか?
35
11
2015年12月8日更新。 [Googleサポート][10]によると、
メソッドは2016年8月31日にオフになります。
---。
私はこの問題に遭遇しました。
トリックは、GoogleドライブフォルダーをWebホストのように扱うことです。
2015年4月1日更新。
Googleドライブが変更され、ドライブへのリンクを誘導する簡単な方法があります。 私は以前の回答を参考にして以下に残しましたが、ここに更新された回答があります。
1。 Googleドライブにパブリックフォルダを作成します。
。 2。 このドライブを公に共有してください。
。 ここに画像の説明を入力してください
! 2。 そのフォルダーにいるときにアドレスバーからフォルダーUUIDを取得します
。 ここに画像の説明を入力してください。! 3。 このUUIDをこのURL
に入れます。
https://googledrive.com/host//
。 4。 ファイルの場所に住所名を追加します。。
https://googledrive.com/host//
。----------。
< del> [Googleが意図する機能][2]< / del>。 [新しいGoogleドライブリンク][3]。
公開されているドライブフォルダーの host URLを簡単に取得するだけです。 これを行うには、プレーンなHTMLファイルをアップロードしてプレビュー Googleドライブにアップロードし、ホストのURLを検索します。
手順は次のとおりです。
1。 Googleドライブにフォルダを作成します。
。 2。 このドライブを公に共有してください。
。 ここに画像の説明を入力してください
! 3。 単純なHTMLファイルをアップロードします。 追加のファイルを追加します(サブフォルダーはok)
。 ここに画像の説明を入力してください
! 4。 GoogleドライブでHTMLファイルを開いて「プレビュー」します
。 ここに画像の説明を入力してください
! 5。 このフォルダのURLアドレスを取得
。 ここに画像の説明を入力してください
! 6。 URLフォルダベースから直接リンクURLを作成します
。 ここに画像の説明を入力してください
! 7。 このURLを使用すると、大きなファイルを直接ダウンロードできます。
。
[編集]。
追加するのを忘れました。 サブフォルダーを使用してファイルを整理する場合は、URL階層で期待するようにフォルダー名を使用するだけです。
https://googledrive.com/host//images/my-image.png
。----------。
私がやろうとしていたこと。
Vagrantの仮想ボックスを使用してカスタムDebianイメージを作成しました。 この「.box」ファイルを同僚と共有して、直接リンクをVagrantfileに配置できるようにしたかったのです。
結局、実際のファイルへの直接リンクが必要でした。
Googleドライブの問題。
gdocs2directツールのようなものを使用するか、自分でリンクを作成して、ファイル権限を公開して直接アクセスリンクを作成/生成する場合:
https://docs.google.com/uc?export = download& id =< your file id>
。Cookieベースの検証コードとプロンプト「Googleはこのファイルをスキャンできませんでした」プロンプトが表示されます。これは、 wget やVagrantfile構成などでは機能しません。
生成するコードは、GETクエリ変数
を追加する単純なコードです。..& confirm =###
を文字列に追加しますが、ユーザー固有であるため、他のクエリ変数をコピー/貼り付けすることはできません。ただし、上記の「Webページホスティング」メソッドを使用すると、そのプロンプトを回避できます。
それが役に立てば幸いです。!
[10]:https://support.google.com/drive/answer/2881970?hl = en。
「このファイルでウイルスをチェックできない」インターメッツォページに直面した場合、ダウンロードはそれほど簡単ではありません。
基本的に、最初に通常のダウンロードリンクをダウンロードする必要がありますが、[とにかくダウンロード]ページにリダイレクトされます。 この最初のリクエストからCookieを保存し、「とにかくダウンロード」ボタンで指されたリンクを見つけてから、このリンクを使用してファイルをダウンロードする必要がありますが、最初のリクエストから取得したCookieを再利用します。
CURLを使用したダウンロードプロセスのbashバリアントは次のとおりです。
注意:
*この手順は、Googleが変更された後、おそらく機能しなくなります。
-P
)と\ K
"operator"を使用します。これは、基本的に "一致した結果の\ K
の前に何も含めないことを意味します。 grepのどのバージョンがこれらのオプションを導入したかはわかりませんが、古代バージョンまたは非Ubuntuバージョンにはおそらくありません。これは古い質問であることは知っていますが、調査の結果、この問題の解決策を見つけることができなかったため、何が効果的だったかを共有しています。。
私のプロジェクトの1つにこのC#コードを書きました。 プログラムでスキャンウイルス警告をバイパスできます。 コードはおそらくJavaに変換できます。
これは2015年5月19日をもって再度更新されるようです:。
どのように機能させたか:
jmbertucciの最近更新された回答と同様に、フォルダをすべての人に公開します。 これは以前よりも少し複雑です。[詳細]をクリックして、フォルダを[オン]-[Web上のパブリック]に変更する必要があります。"。
以前と同じようにフォルダUUIDを見つけます。フォルダーに移動して、アドレスバーでUUIDを見つけます。
次に向かいます。
巨大なサブドメインを持つインデックスタイプのページにリダイレクトされますが、フォルダ内のファイルを表示できるはずです。 次に、右クリックして、必要なファイルへのリンクを保存できます(この直接リンクにも「googledrive.com」の大きなサブドメインがあることに気づきました)。 「ウィート」で私のために素晴らしい働きをしました。
これは、他の共有フォルダでも動作するようです。
例えば.、。
https://drive.google.com/folderview?id = 0B7l10Bj_LprhQnpSRkpGMGV2eE0& usp =共有。
にマップします。
https://googledrive.com/host/0B7l10Bj_LprhQnpSRkpGMGV2eE0。
また、右クリックすると、これらのファイルへの直接リンクを保存できます。
#ケース1:小さいサイズのファイルをダウンロードします。。
-URLはhttps://drive.google.com/uc形式で使用できます?export = download& id = FILE_ID、そしてファイルのinputstreamを直接取得できます。
#ケース2:大きなサイズのファイルをダウンロードします。。
-ウイルススキャンアラートページの壁が貼り付けられました。 html dom要素を解析することで、[とにかくダウンロード]ボタンの下に確認コードを含むリンクを取得しようとしましたが、機能しませんでした。 Cookieまたはセッション情報が必要になる場合があります。 ここに画像の説明を入力してください。
ソリューション:
-最後に、上記の2つのケースの解決策を見つけました。 Jsonを取得するには、接続ステップに「httpConnection.setDoOutput(true)」を配置するだけです。
次に、任意のJsonパーサーを使用して、ダウンロードUrl、fileName、sizeBytesを読み取ることができます。
-フォロースニペットを参照できます。
そして。
https://github.com/google/skicka。
このコマンドラインツールを使用して、Googleドライブからファイルをダウンロードしました。 [スタートの取得]セクションの手順に従ってください。Googleドライブから数分でファイルをダウンロードする必要があります。
サービスアカウントを利用するとよいかもしれません。
プログラム的に(ユーザーがブラウザーで開くためのリンクを提供するのとは対照的に)GoogleドライブAPIからファイルをダウンロードする場合は、文書化されているように、「webContentLink」の代わりにファイルの「downloadUrl」を使用することをお勧めしますここ:https://developers.google.com/drive/web/manage-downloads。
リンクからダウンロードし、確認リンクを取得するページをスクレイピングし、それをダウンロードすることを検討します。
もしあなたが "download anyway" URL を見ると、そこには余分な
confirm
クエリーパラメーターがあり、一見ランダムに生成されたトークンが付いているように見えます。それはランダムなので...そしておそらくあなたはそれを自分で生成する方法を見つけたいとは思わないので、サイトの仕組みについて何も知らなくても、スクレイピングが最も簡単な方法かもしれません。いろいろなシナリオを考える必要がありそうです。
https://drive.google.com/uc?export=download&id=FILE_ID FILE_IDをファイルIDに置き換えてください。
ファイルIDがわからない場合は、こちらの記事Article LINKを参照してください。
javascriptを作成するだけで、リンクを自動的にキャプチャし、[tampermonkey][2]を使用してタブをダウンロードして閉じます。
同様に、URLのHTMLソースを取得して、javaでダウンロードできます。
[2]:https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkebhmkfjojejmpbldmpobfkfo?utm_source = chrome-app-launcher-info-dialog。