NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET 매크로 프로그램 만들기. (구글 드라이브에서 파일을 다운로드 하는 벙법)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 간단한 내용이지만, 업무 자동화 RPA 매크로에서 유용하게 사용할 수 있는 구글 드라이브의 파일 다운로드 방법에 대해 알아보도록 하겠습니다. 구글 드라이브의 API는 간단하지만, 몇가지 테크닉이 필요합니다. 그리고, 엔지엠 매크로 6에서 사용하던 방식을 버리고 새롭게 만들게 되었습니다. 왜 엔지엠 6에서 사용하던 방식을 재사용하지 않았냐면, 마이크로소프트에서 WebClient는 더이상 사용하지 않기 때문입니다. 따라서 HttpClient를 사용해야 하는데요. 이 방식으로 처리하기 보다는 구글에서 제공해주는 코드를 사용하는게 더 깔끔하기 때문입니다.

     

    이전에는 구글 API를 사용하지 않고, 전통적인 방식을 사용해서 처리했는데요. 이 방식에는 몇가지 문제점들이 존재했습니다. 그래서, 구글에서 제공해주는 공식적인 방법을 사용하는게 좋겠다는 판단이었습니다. 자~ 그럼 코딩에 앞서 모델을 하나 추가해볼께요. 아래와 같이 FileDownloadModel.cs 클래스를 추가 해줍니다.

    a660vA8.png

     

     

    코드는 구글에 자세하게 나와 있습니다. 구글 드라이브 API를 확인해보고 코드를 추가 해볼께요.

    [ 구글 개발자 커뮤니티 ]

     

    구글 개발자 커뮤니티에 접속하면 아래와 같이 언어별로 코드 샘플을 제공 해줍니다.

    RU02LCs.png

     

     

    구글 드라이브에서 파일을 다운로드 하는 기능은 간단합니다. 아래와 같이 3개의 속성만 있으면 될거 같네요.

    [LocalizedCategory("Action")]
    [LocalizedDisplayName("GoogleDriveURL")]
    [LocalizedDescription("GoogleDriveURL")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? GoogleDriveURL { get; set; }
    
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("SelectDirectory")]
    [LocalizedDescription("SelectDirectory")]
    [Browsable(true)]
    [DefaultValue(null)]
    [Editor(typeof(TypeEditor.FolderSelectorEditor), typeof(UITypeEditor))]
    public string? DownloadPath { get; set; }
    
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("FileName")]
    [LocalizedDescription("FileName")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? DownloadFileName { get; set; }

     

    우선, 구글 드라이브에서 공유 받은 파일 주소(Link Address)를 입력 받고, 내 컴퓨터에 저장할 위치와 파일명을 입력합니다. 아래 구글 드라이브는 제가 사용하고 있는 계정입니다. 여기에 보면 파일도 있고, PDF 파일로 된 구글 독스도 있습니다. 파일을 다운로드 하려면 링크를 복사해야 합니다. 물론, 보안토큰에 대한 내용은 코딩하지 않았기 때문에 링크가 있는 모든 사용자가 다운로드 할 수 있도록 공유 정보를 변경해줘야 합니다.

    nl3kHGn.png

     

     

    실행 메소드의 내용은 아래와 같은데요. 구글에서 제공해주는 코드에서 10프로 정도만 변경하면 기능 개발이 끝납니다. 요즘은 프로그램 개발하기가 정말 좋아졌죠?

    public override string? Execute(IPlayer player)
    {
        var id = base.Execute(player);
    
        var regex = new Regex("/d/([a-zA-Z0-9_-]+)");
        var fileId = regex.Match(GoogleDriveURL).Value.Replace("/d/", string.Empty);
    
        if (GoogleDriveURL.Contains("/file/"))
            Ai.Api.GoogleService.Download.File(player, fileId, Path.Combine(DownloadPath, DownloadFileName)); // Google Drive
        else
            Ai.Api.GoogleService.Download.Pdf(player, fileId, Path.Combine(DownloadPath, DownloadFileName)); // Google Docs
    
        return id;
    }

     

    코드를 보면 정규식이 포함되어 있습니다. 실제로 우리가 알 수 있는 정보는 공유 파일 링크입니다. 그런데, 구글 개발자 커뮤니티의 구글 드라이브 파일 다운로드 코드를 보면 File ID를 인자(Arguments)로 받고 있습니다. 그렇다면 공유 파일 링크에서 File ID를 추출해야 합니다. 파일 아이디는 공유 링크 전체에서 /d/ 다음에 오는 파일 아이디를 정규식으로 처리 해줍니다. 매치하기 위한 패턴식에서 앞 구분자를 치환하여 삭제 해주면 파일 아이디만 추출할 수 있습니다.

     

    참고로, 독스는 document/d/를 사용하고, 파일은 file/d/를 사용합니다. 이제 완성된 코드를 테스트 해볼까요?

     

     

    이 글이 도움이 되셨다면~ 커피 한잔이라도 후원 부탁드립니다^^

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.