Google 드라이브 API를 사용하여 Google 드라이브에서 직접 다운로드

자바로 작성된 내 데스크톱 애플리케이션이 Google 드라이브에서 공개 파일을 다운로드하려고합니다. 제가 알아낸 바에 따르면, 파일의 '웹 콘텐츠 링크'를 사용하여 구현할 수 있습니다(사용자 승인 없이 공개 파일을 다운로드할 수 있는 기능).

따라서 아래 코드는 작은 파일에서 작동합니다:

String webContentLink = aFile.getWebContentLink();
InputStream in = new URL(webContentLink).openStream();

하지만 대용량 파일에서는 작동하지 않는데, 이 경우 구글 바이러스 검사 경고와 함께 사용자 확인 없이 '웹콘텐츠링크'를 통해 파일을 직접 다운로드할 수 없기 때문입니다. 예시를 참조하세요: 웹 콘텐츠 링크.

그래서 제 질문은 사용자 승인없이 Google 드라이브에서 공개 파일의 콘텐츠를 가져 오는 방법입니까?

해결책
  • 업데이트 8일 12월 2015년 * [구글 지원] [10] 따르면 사용하여
googledrive.com/host/ID

31일 8월 2016년 비활성화해야 메소드는 대한.

그냥 실행했음 salesforce. 이 문제를 해결할 수 있습니다.

    • 는 이 같은 전략은 즐거워집니다 구글 드라이브 폴더에서는 웹 호스트입니다.
    • 1일 4월 2015년 업데이트

구글 드라이브 변경되었습니까 # 39 에 직접 연결할 수 있는 간편한 방법 및 there& 데이터베이스에구성원을 길이잖아요 내가 아니라 내 왼쪽 아래 참조입니다 이전 대답 # 39 의 here& 업데이트된 대답.

  1. 공용 폴더 만들기, 구글 Drive.&lt br&gt &lt br>;;
  2. 이 정보 공유 드라이브를 공개적으로. &lt br&gt &lt br>;;; ! 입력하십시오. 이미지 여기에 설명을 &lt br&gt &lt br>;;;
  3. 39 에서 해당 폴더를 전달하십시오 UUID you& 때, 주소, re in folder&lt &lt br&gt 표시줄에는 br>;;

    enter 이미지 여기에 설명을!

  4. 그거 UUID 이 URL&lt br&gt &lt br>;;; 'https://googledrive.com/host/&lt', 폴더 UUID> /
  5. 이 파일 이름을 추가 어디에 파일이 located.&lt br&gt &lt br>;;; 'https://googledrive.com/host/&lt', 파일, 폴더 UUID&gt /&lt name>;

네가 해야 할 일은 간단하다 내려받습니다 호스트입니다 URL 공개되지 드라이브 폴더에서는. 그러기 위해 일반 HTML 파일 업로드 할 수 있는 구글 드라이브 및 it 미리봅니다 uirl 호스트입니다 찾을 수 있습니다.

다음은 단계만으로

  1. 폴더 만들기, 구글 Drive.&lt br&gt &lt br>;;
  2. 이 정보 공유 드라이브를 공개적으로. &lt br&gt &lt br>;;; ! 입력하십시오. 이미지 여기에 설명을 &lt br&gt &lt br>;;;
  3. 간단한 HTML 파일을 업로드할 수 있습니다. 추가로 파일 (서브폴더에 확인), br&gt &lt &lt br>;; 5, [enter 이미지 여기에 설명을] &lt br&gt &lt! br>;;
  4. Preview&quot 열고 "; 구글 드라이브, HTML 파일을 &lt br&gt &lt br>;; 6, [enter 이미지 여기에 설명을] &lt br&gt &lt! br>;;
  5. Url 주소를 이 폴더에서는 &lt br&gt &lt br&gt 내려받습니다,, 7, [enter 이미지 여기에 설명을] &lt br&gt &lt! br>;;
  6. 링크 URL 에서 url 을 직접 작성, 폴더, 기본 &lt br&gt &lt br>; ! 입력하십시오. 이미지 여기에 설명을 &lt br&gt &lt br>;;;
  7. 이 경우, 대규모 files.&lt br&gt &lt br&gt, 직접 다운로드 URL 수 있도록 해야 한다고;;

[편집]

I forgot 구성하기 위해 사용하는 경우 추가 서브폴더에 폴더 이름을 사용하여 파일의 경우, 단순 URL 에 작성되지는 때처럼 계층.

'https://googledrive.com/host/&lt' string&gt /images/my-image.png 그러하매 너희의 공용 폴더 id;

    • 내가 할 수 있는 것은

내가 만든 맞춤형 데비안 이미지와 함께 가상 확인란 유랑하는. 이 정보 공유, .box&quot &quot 싶었다. 그들은 자신들의 동료와 파일을 직접 https://partner. 바그랜트피레 있다고 한다.

결국 내가 직접 필요한 https://partner. microsoft. 실제 파일.

    • 구글 드라이브 문제

파일을 만들어 낼 수 있는 권한을 설정할 경우 일반 공개 / gdocs2direct 도구를 사용하여 같은 일을 직접 액세스 링크 링크 교도관님도요 가공할지 마련중이다.

'https://docs.google.com/uc? id =, = download&amp 익스포트합니다 &lt 그러하매 너희의 파일 id&gt.'

쿠키, 구글 검색 기반 코드 및 프롬프트합니다 &quot 모든검증 얻을 수 있습니다 이 file&quot 수 없습니다. , t 셨으며 일하고 있는 프롬프트합니다 won& # 39 와 같은 wget 또는 바그랜트피레.

It 는 간단한 코드를 생성할 수 있는 코드와 첨부됩니다 ',' 을 구체화하십시오 있지만 it& 확인입니다 .&amp 쿼리하지 변수 = # # 39, 사용자 지정 도왔으매 it& 프로세서당 # 39 의 미끼처럼이 아니라 다른 변수를 쿼리하지 있는 복사 / 붙여넣기 수 있습니다.

하지만 위의 &quot 사용하는 경우, 웹 페이지 hosting&quot. 주위에 있는 방법을 프롬프트합니다 얻을 수 있습니다.

도움이 되기를 바란다!

[10]: https://support.google.com/drive/answer/2881970 = en hl?

해설 (17)

이 파일을 검사할 수 없는 경우, 얼굴에 &quot viruses&quot 간주곡, 는 페이지, 다운로드하십시오 그리 쉽지는 않았다.

그러나 일반 다운로드 링크를 할 수 있는 첫 번째 너회가 본질적으로 다운로드하십시오 리디렉션합니다 anyway&quot 다운로드하십시오 이 "; 호출이네요 이 첫 번째 요청에 저장하는 데 필요한 쿠키 에서 찾을 수 있는 링크가 abc. 아웃해야 의해 anyway&quot 다운로드하십시오 "; 버튼을 누른 다음 이 링크를 사용하여 파일을 다운로드할 수 있지만, 쿠키 재사용합니다 잡을라는데 자금세탁방지법) 에서 있습니다.

39 을 사용하여 프로세스를 다운로드하십시오 here&, 배시 (curl) 의 변형.

curl -c /tmp/cookies "https://drive.google.com/uc?export=download&id=DOCUMENT_ID" > /tmp/intermezzo.html
curl -L -b /tmp/cookies "https://drive.google.com$(cat /tmp/intermezzo.html | grep -Po 'uc-download-link" [^>]* href="\K[^"]*' | sed 's/\&/\&/g')" > FINAL_DOWNLOADED_FILENAME

유라유라테이코쿠:

  • 이 절차를 정지점을 apc® 일부 변경 후 구글 것입니다
  • 이 명령에 사용되는 구문을 그렙 펄 (perl) ',' ('p') 과 \k &quot operator&quot. 기본적으로 포함되어 있지 않다 ',' 을 앞에 있는 것은 아무것도 &quot \K 정합된 결과. # 39 는 이러한 옵션이 있지만, 내가 모르는 어떤 버전의 don& 그렙 아마 고대 또는 비사양 unbuntu don& 버전 할꺼이나 t # 39.
  • Java 솔루션을 늘리거나 줄일 수 있는 시간이 될 것 같고, 그냥 HTTPS 라이브러리란 처리하십니까 쿠키, 일부 좋은 텍스트 구문 분석 라이브러리
해설 (4)
  • 그러니까말이야 이것은 오래된 질문 몇 가지 연구를 통해 이 문제에 대한 해결 방안을 찾을 수 없습니다, 하지만 난 후, 그래서 저는 공유를 위한 어떤 방법이 주효했는가 me.*

나는 내 프로젝트 중 하나로 기록된 이 C # 코드가. 이 프로그램을 통해 바이러스 검사를 거치지 경고. 아마도 Java 코드를 변환할 수 있다.

using System;
using System.IO;
using System.Net;

public static class FileDownloader
{
    private const string GOOGLE_DRIVE_DOMAIN = "drive.google.com";
    private const string GOOGLE_DRIVE_DOMAIN2 = "https://drive.google.com";

    // Normal example: FileDownloader.DownloadFileFromURLToPath( "http://example.com/file/download/link", @"C:\file.txt" );
    // Drive example: FileDownloader.DownloadFileFromURLToPath( "http://drive.google.com/file/d/FILEID/view?usp=sharing", @"C:\file.txt" );
    public static FileInfo DownloadFileFromURLToPath( string url, string path )
    {
        if( url.StartsWith( GOOGLE_DRIVE_DOMAIN ) || url.StartsWith( GOOGLE_DRIVE_DOMAIN2 ) )
            return DownloadGoogleDriveFileFromURLToPath( url, path );
        else
            return DownloadFileFromURLToPath( url, path, null );
    }

    private static FileInfo DownloadFileFromURLToPath( string url, string path, WebClient webClient )
    {
        try
        {
            if( webClient == null )
            {
                using( webClient = new WebClient() )
                {
                    webClient.DownloadFile( url, path );
                    return new FileInfo( path );
                }
            }
            else
            {
                webClient.DownloadFile( url, path );
                return new FileInfo( path );
            }
        }
        catch( WebException )
        {
            return null;
        }
    }

    // Downloading large files from Google Drive prompts a warning screen and
    // requires manual confirmation. Consider that case and try to confirm the download automatically
    // if warning prompt occurs
    private static FileInfo DownloadGoogleDriveFileFromURLToPath( string url, string path )
    {
        // You can comment the statement below if the provided url is guaranteed to be in the following format:
        // https://drive.google.com/uc?id=FILEID&export=download
        url = GetGoogleDriveDownloadLinkFromUrl( url );

        using( CookieAwareWebClient webClient = new CookieAwareWebClient() )
        {
            FileInfo downloadedFile;

            // Sometimes Drive returns an NID cookie instead of a download_warning cookie at first attempt,
            // but works in the second attempt
            for( int i = 0; i < 2; i++ )
            {
                downloadedFile = DownloadFileFromURLToPath( url, path, webClient );
                if( downloadedFile == null )
                    return null;

                // Confirmation page is around 50KB, shouldn't be larger than 60KB
                if( downloadedFile.Length > 60000 )
                    return downloadedFile;

                // Downloaded file might be the confirmation page, check it
                string content;
                using( var reader = downloadedFile.OpenText() )
                {
                    // Confirmation page starts with , which can be preceeded by a newline
                    char[] header = new char[20];
                    int readCount = reader.ReadBlock( header, 0, 20 );
                    if( readCount < 20 || !( new string( header ).Contains( "" ) ) )
                        return downloadedFile;

                    content = reader.ReadToEnd();
                }

                int linkIndex = content.LastIndexOf( "href=\"/uc?" );
                if( linkIndex < 0 )
                    return downloadedFile;

                linkIndex += 6;
                int linkEnd = content.IndexOf( '"', linkIndex );
                if( linkEnd < 0 )
                    return downloadedFile;

                url = "https://drive.google.com" + content.Substring( linkIndex, linkEnd - linkIndex ).Replace( "&", "&" );
            }

            downloadedFile = DownloadFileFromURLToPath( url, path, webClient );

            return downloadedFile;
        }
    }

    // Handles 3 kinds of links (they can be preceeded by https://):
    // - drive.google.com/open?id=FILEID
    // - drive.google.com/file/d/FILEID/view?usp=sharing
    // - drive.google.com/uc?id=FILEID&export=download
    public static string GetGoogleDriveDownloadLinkFromUrl( string url )
    {
        int index = url.IndexOf( "id=" );
        int closingIndex;
        if( index > 0 )
        {
            index += 3;
            closingIndex = url.IndexOf( '&', index );
            if( closingIndex < 0 )
                closingIndex = url.Length;
        }
        else
        {
            index = url.IndexOf( "file/d/" );
            if( index < 0 ) // url is not in any of the supported forms
                return string.Empty;

            index += 7;

            closingIndex = url.IndexOf( '/', index );
            if( closingIndex < 0 )
            {
                closingIndex = url.IndexOf( '?', index );
                if( closingIndex < 0 )
                    closingIndex = url.Length;
            }
        }

        return string.Format( "https://drive.google.com/uc?id={0}&export=download", url.Substring( index, closingIndex - index ) );
    }
}

// Web client used for Google Drive
public class CookieAwareWebClient : WebClient
{
    private class CookieContainer
    {
        Dictionary _cookies;

        public string this[Uri url]
        {
            get
            {
                string cookie;
                if( _cookies.TryGetValue( url.Host, out cookie ) )
                    return cookie;

                return null;
            }
            set
            {
                _cookies[url.Host] = value;
            }
        }

        public CookieContainer()
        {
            _cookies = new Dictionary();
        }
    }

    private CookieContainer cookies;

    public CookieAwareWebClient() : base()
    {
        cookies = new CookieContainer();
    }

    protected override WebRequest GetWebRequest( Uri address )
    {
        WebRequest request = base.GetWebRequest( address );

        if( request is HttpWebRequest )
        {
            string cookie = cookies[address];
            if( cookie != null )
                ( (HttpWebRequest) request ).Headers.Set( "cookie", cookie );
        }

        return request;
    }

    protected override WebResponse GetWebResponse( WebRequest request, IAsyncResult result )
    {
        WebResponse response = base.GetWebResponse( request, result );

        string[] cookies = response.Headers.GetValues( "Set-Cookie" );
        if( cookies != null && cookies.Length > 0 )
        {
            string cookie = "";
            foreach( string c in cookies )
                cookie += c;

            this.cookies[response.ResponseUri] = cookie;
        }

        return response;
    }

    protected override WebResponse GetWebResponse( WebRequest request )
    {
        WebResponse response = base.GetWebResponse( request );

        string[] cookies = response.Headers.GetValues( "Set-Cookie" );
        if( cookies != null && cookies.Length > 0 )
        {
            string cookie = "";
            foreach( string c in cookies )
                cookie += c;

            this.cookies[response.ResponseUri] = cookie;
        }

        return response;
    }
}
해설 (1)
  • 19일 5월 2015년 :* 재업데이트 vmware. 것 같다고

나는 attaboy 어떻게 사용할 수 있습니다.

39 의 폴더를 만들고 오토메이티드 jmbertucci& 같이 최근 업데이트된 여론의 모두에게말이지. 이는 이전보다 조금 더 복잡한, 할 수 있는 공용 폴더 &quot web.&quot 있는 고급 변경하십시오 -;;

찾기 및 주소 창에 폴더 UUID 등 검색하기를 방금 전에 폴더에 uuid 찾습니다.

https://drive.google.com/drive/folders/

그럼 머리에서

https://googledrive.com/host/

이를 통해 사용자를 리디렉션할 충족되었으며 인덱스화할 유형 페이지가 있지만, 거대 하위 도메인 폴더에 파일을 볼 수 있어야 합니다. 그런 다음 원하는 파일을 저장할 수 있는 링크를 마우스 오른쪽 단추로 클릭합니다. (내가 직접 링크 역시 이 점에 대해 '이 큰 하위 도메인 (googledrive.com)'). 협력했습니다 멋지구리해요 가져다줄래요 wget 을 (를) ''.

또한 others& 작동합니까 # 39 것으로 보인다. 공유 폴더.

예:

https://drive.google.com/folderview? id = usp = 공유함을 0B7l10Bj_LprhQnpSRkpGMGV2eE0&amp.

매핑됨

https://googledrive.com/host/0B7l10Bj_LprhQnpSRkpGMGV2eE0

그리고 오른쪽 클릭하면 해당 파일을 직접 링크되어 저장할 수 있습니다.

해설 (2)
  • 사례 1: 파일 다운로드 적은 size.*

  • Https://drive.google.com/uc? id =, = download&amp uirl 사용할 수 있습니다 다음 파일 형식으로 익스포트합니다 FILE_ID 린퍼타슬림 직접 확인할 수 있습니다.
  • 사례 2: 큰 파일을 다운로드하십시오 size.*

  • 당신은 벽에 걸린 바이러스 검사를 경고 페이지 반환되었습니다. 구문 분석 html dom element 를 통해 확인할 수 있는 코드 연동, anyway&quot 다운로드하십시오 &quot 버튼를 찾았다. 하지만 didn& # 39, 빗나갔다. 세션 쿠키 또는 필요한 정보를 수 있다. 입력하십시오. 이미지 여기에 설명을

해결책:

  • 마지막으로 I found 솔루션이므로 그들위에 2 건이다. 그냥 하테프코네크션.세도우스푸스 동일팔레트에 ' (true)' 가 연결 할 수 있는 단계를 Json.

')]} & # 39. {&quot disposition&quot SCAN_CLEAN&quot :";;; &quot downloadUrl&quot :&quot http:www.";;; ";;;;;;; OK&quot fileName&quot :&quot exam_list_json.txt&quot &quot scanResult&quot :&quot &quot 2392} 'sizebytes";

그런 다음 읽을 수 있고, 파일_이름 스이제비츠 다운로더르 Json 파서를 사용할 수 있습니다.

  • It 도움말에서는 따라와야지 스니핏 희망 참조할 수 있습니다.

개인 린퍼타슬림 중 ioexception 이 던지는 그코너스 (구체화하십시오 레모트피레) { Uirl uirl = 새로운 URL (레모트피레); 우를코네크션 연결 = 우를리오펜코네크션 (); if (연결 instanceof 스테퍼리코네크션) { 스테퍼리코네크션 하테프코네크션 = (스테퍼리코네크션) 연결. 코너스션.스탈로우세린트랙션 (false). 하테프코네크션.스틴스턴스폴로러디렉츠 (true). 하테프코네크션.스트리퀘스트프로페티 (&quot User-Agent&quot &quot Mozilla/4.0 (호환적;;;; 마시 6.0. Windows 2000년) "). 하테프코네크션.세도우스푸스 (true). 하테프코네크션.스트리퀘스트메서드 (GET&quot ";). 하테프코너스티언스코너스 ();

int = 하테프코네크션.제레스폰지코드 레크고데 ();

if (= HttpURLConnection.HTTP_OK 레크고데) { 이 = 하테프코네크션.게티노푸트스트림 린퍼타슬림 (); Map&lt, 문자열, List&lt String&gt >;; 매핑해야 = 하테프코네크션.게테드필드스 (); List&lt String>; 값 = 마피제 (content-type&quot ";). if (null 값을! = &amp &; 발 주자이왕티! () { 문자열 유형 = 발 주스제 (0);

if (메리 페이콘테인스 (text/html&quot ";)) { 구체화하십시오 쿠키 = 하테프코네크션.게테드필드 (Set-Cookie&quot ";). 구체화하십시오 temp = 콩스탕스드제바스 (마콘테스트, Constants.PATH_TEMP) + &quot /temp.html";; if (자베트믈필레 () 는, temp) { 구체화하십시오 href = 제릴로우 (임시); if (href! = null) { 페르세우를 반품하십시오 (href, cookie). } }

{} else if (메리 페이콘테인스 (application/json&quot ";)) 구체화하십시오 temp = 콩스탕스드제바스 (마콘테스트, Constants.PATH_TEMP) + &quot /temp.txt";; if (사브기슨필레 () 는, temp) { 필드라이스트 데이터 = 제슨레이더헬퍼드프리드필드라이스트 (새로운 파일 (임시)); if (다다드제바스 ()! = null) { 페르세우를 반품하십시오 (다다드제바스 ()); } } } } 돌아갈 수 있다. } } 반품하십시오 nulll. }

   public static FileDataSet readFileDataset(File file) throws IOException{
        FileInputStream is = new FileInputStream(file);
        JsonReader reader = new JsonReader(new InputStreamReader(is, "UTF-8"));

        reader.beginObject();
        FileDataSet rs = new FileDataSet();
        while(reader.hasNext()){
            String name = reader.nextName();
            if(name.equals("downloadUrl")){
                rs.setPath(reader.nextString());
            } else if(name.equals("fileName")){
                rs.setName(reader.nextString());
            } else if(name.equals("sizeBytes")){
                rs.setSize(reader.nextLong());
            } else {
                reader.skipValue();
            }
        }
        reader.endObject();
        return rs;

    }
해설 (0)

https://github.com/google/skicka

내가 이 명령줄이 도구를 사용하여 파일을 다운로드하십시오 구글에서 길이잖아요 그냥 지침에 따라 섹션이고 구글 드라이브 (분) 에서 파일을 다운로드 시작 합니다.

해설 (0)

서비스 계정을 사용하는 것이 적합할 수 있습니다.

해설 (0)

그냥 경우 프로그래밍 방식으로 (로포스트 것처럼 이번에는 사용자가 https://partner. microsoft. 브라우저에서 열려) API 를 사용하여 파일 다운로드를 통해 꼭 이래야겠어요 제안하세요 구글 드라이브 '로', '대신' 웹콘텐트링크 문서화했습니다 다운로더르 파일의 위치: https://developers.google.com/drive/web/manage-downloads

해설 (0)

링크에서 다운로드하고, 확인 링크가 표시되는 페이지를 스크랩한 다음 해당 링크를 다운로드하는 것이 좋습니다.

'어쨌든 다운로드' URL을 보면 무작위로 생성된 토큰으로 보이는 추가 'confirm' 쿼리 매개 변수가 있습니다. 무작위로 생성된 토큰이므로 사이트 작동 방식에 대해 전혀 알지 못하더라도 스크래핑하는 것이 가장 쉬운 방법일 수 있습니다.

다양한 시나리오를 고려해야 할 수도 있습니다.

해설 (1)

https://drive.google.com/uc?export=download&id=FILE_ID에서 FILE_ID를 파일 ID로 바꿉니다.

파일 ID가 무엇인지 모르는 경우 이 문서 문서 링크를 확인하세요.

해설 (1)

내가 그냥 javascript 이 링크를 만들 수 있도록 자동으로 캡처하지 및 닫기의 다운로드하십시오 탭을 통해 [탬퍼먼키] [2].

// ==UserScript==
// @name         Bypass Google drive virus scan
// @namespace    SmartManoj
// @version      0.1
// @description  Quickly get the download link
// @author       SmartManoj
// @match        https://drive.google.com/uc?id=*&export=download*
// @grant        none
// ==/UserScript==

    function sleep(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
    }

    async function demo() {
        await sleep(5000);
        window.close();
    }

    (function() {
        location.replace(document.getElementById("uc-download-link").href);
        demo();
    })();

Html 소스 url 과 자바 가상 머신 (jvm) 에 다운로드하십시오 partnernet 얻을 수 있습니다.

[2]: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo = 크롬 앱을 실행 정보 대화 utm_source?

해설 (0)