2013-08-11 30 views
6

Googleドライブにzipファイルが保存されています(一般公開されています)。私はGolangでそれをダウンロードする方法を知りたいです。Googleドライブの公開ファイルをダウンロード - Golang

package main 

import (
    "fmt" 
    "io" 
    "net/http" 
    "os" 
) 

func main() { 
    url := "https://docs.google.com/uc?export=download&id=0B2Q7X-dUtUBebElySVh1ZS1iaTQ" 
    fileName := "file.zip" 
    fmt.Println("Downloading file...") 

    output, err := os.Create(fileName) 
    defer output.Close() 

    response, err := http.Get(url) 
    if err != nil { 
     fmt.Println("Error while downloading", url, "-", eerrror) 
     return 
    } 
    defer response.Body.Close() 

    n, err := io.Copy(output, response.Body) 

    fmt.Println(n, "bytes downloaded") 
} 
+1

エラー変数には何がありますか? –

+0

エラー値はnilです。 – DanielTA

+0

あなたのコードをローカルで実行しようとしました。応答ステータスは403禁止です。私はそれが何を引き起こしているのか分かりません。また、変数として "error"を使用しないでください。あなたは宇宙の "エラー"タイプをシャドーイングしています。 –

答えて

5

私は解決策を見つけました。 用途:https://googledrive.com/host/ID

の代わりに:https://docs.google.com/uc?export=download&id=ID

+0

ありがとうございました!私はこの問題を解決するために2時間インターネットを検索してきました。あなたはこれを行う唯一の人でした。 回答元を教えてください。 –

+0

申し訳ありませんが、それはしばらく前です。私は何か他のものに関連するGoogleのヘルプページだったと思うし、それがうまくいくかどうかわかりました。 – DanielTA

+1

これはもう動作していません。 –

7

これはGoogleがドライブまたはgolangで、私はどのわからないのいずれかで、バグに表示されます。この現在のコードでは、単に「file.zip」という名前の空のファイルを作成します!

問題は、あなたが与えた最初のURLは、この

https://doc-00-c8-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/8i67l6m6cdojptjuh883mu0qqmtptds1/1376330400000/06448503420061938118/*/0B2Q7X-dUtUBebElySVh1ZS1iaTQ?h=16653014193614665626&e=download

this stack overflow questionに応じて合法であるURLで*ようになります2番目のURLにリダイレクトするということです。しかし、それはdelimeterとして特別な意味を持っています。

ゴーは、Googleがに "禁断の403を" 返信この

https://doc-00-c8-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/8i67l6m6cdojptjuh883mu0qqmtptds1/1376330400000/06448503420061938118/%2A/0B2Q7X-dUtUBebElySVh1ZS1iaTQ?h=16653014193614665626&e=download

よう%2Aとしてエンコード*とURLをフェッチします。

Googleは%2A*に解決していないようです。

URIスキームで使用されるthis article on wikipediaの予約済み文字(*)は、その文字を他の目的で使用する必要がある場合は、パーセント符号化する必要があります。

誰が正しいと言うのか、私は専門家では不十分ですが、Googleが問題の両方の部分を書いているので、間違いなく間違いです!

Here is the program I was using for testing

+0

説明をありがとう。私は解決策を見つけました。私はすぐにそれを掲示するでしょう。 – DanielTA

+0

2015年で、まだGoogleは '%2A'を受け入れていません。トラフィックはHTTPSで保護されているので、問題を追跡するのは面倒な経験でした。この答えをありがとう、本当に役立った! – GreenScape

3

私はまだあなたがこの回避策を使用することができる一方で、なぜこれが起こっているに調査しています:

http://play.golang.org/p/SzGBAiZdGJ

リダイレクトが発生したときにCheckRedirectが呼び出され、URLがエンコードされないようにするために不透明パスを追加できます。

Francesc

+0

これはCheckRedirectで機能しました。参考までに、今ドライブURLを使用してください:https://drive.google.com/uc?export=download&id=ID –

+0

また、実際のファイルIDではなく、共有URLにIDを使用してください。 –

関連する問題