Extra Form
라이선스 MIT

안녕하세요?


얼마 전부터 드롭박스가 공유링크의 url 파라미터를 변경하더라도 이미지를 다이렉트 링크할 수 없도록 정책이 바뀌어서


다른 클라우드를 이미지 호스팅 용도로 사용할 수 없을까 고민해봤습니다.


예전에는 구글 드라이브에 다이렉트 링크를 바로 생성해주는 메뉴가 있었는데 


언제부터인지 그 기능이 사라진 것 같더군요. 


다만 공유 링크를 https://drive.google.com/uc?export=view&id=의 형태로 수정해주면 


여전히 다이렉트 링크로서 동작한다는 사실을 알게되었습니다.


그래서 다음과 같은 간단한 매크로 프로그램을 오토핫키로 작성했습니다 ^^




GUI는 위와 같이 허접합니다 ㅜㅜ


그리고 오토핫키의 SciTE4Autohotkey 에디터에서 한글이 깨지기 때문에 


부득이 GUI에 한글을 넣지 못하고 콩글리쉬로 작성된 점을 양해 부탁드립니다 ㅠㅠ


사용법은 구글 드라이브에서 공유링크를 만들고 ctrl+c 한 후 


위 프로그램을 실행시켜 빈 칸에 ctrl+v 하고 하단의 submit 버튼을 클릭하면 다이렉트 링크로 변경해줍니다. 


<img src = " "> 스크립트로 바로 만들기 위해서는 하단의 체크버튼에 체크를 해주시면 됩니다 ^^



제가 작성한 오토핫키 스크립트는 다음과 같습니다.


제 실력이 부족해서 간결한 아름다움 내지 효율성과는 거리가 멀게 작성되었네요 ㅠㅠ


정규식과 관련된 부분을 너무 허술하게 만들었는데 조금 더 보완해야 될 필요가 있는 것 같습니다.


일단 스크립트 자체는 제가 테스트해본 한도 내에서는 문제없이 잘 작동합니다. 


Gui, Font, S12 CBlue Bold, Verdana
Gui, Add, Text, x40 y18 w430 h20 , Paste Google Drive link URL in the box below.
Gui, Font, S8 CBlack Normal, Verdana
Gui, Add, Edit, x12 y70 w450 h40 va1,
Gui, Add, Edit, x12 y150 w450 h40 va2,
Gui, Add, Edit, x12 y230 w450 h40 va3,
Gui, Add, Edit, x12 y310 w450 h40 va4,
Gui, Add, Edit, x12 y390 w450 h40 va5,
Gui, Add, Edit, x12 y470 w450 h40 va6,
Gui, Add, Edit, x12 y550 w450 h40 va7,
 
Gui, Add, Text, x12 y50 w100 h20, URL #1
Gui, Add, Text, x12 y130 w100 h20, URL #2
Gui, Add, Text, x12 y210 w100 h20, URL #3
Gui, Add, Text, x12 y290 w100 h20, URL #4
Gui, Add, Text, x12 y370 w100 h20, URL #5
Gui, Add, Text, x12 y450 w100 h20, URL #6
Gui, Add, Text, x12 y530 w100 h20, URL #7
 
Gui, Add, Button, x92 y610 w110 h30 gmain, Submit
Gui, Add, Button, x353 y50 w110 h20 gb1, Copy
Gui, Add, Button, x353 y130 w110 h20 gb2, Copy
Gui, Add, Button, x353 y210 w110 h20 gb3, Copy
Gui, Add, Button, x353 y290 w110 h20 gb4, Copy
Gui, Add, Button, x353 y370 w110 h20 gb5, Copy
Gui, Add, Button, x353 y450 w110 h20 gb6, Copy
Gui, Add, Button, x353 y530 w110 h20 gb7, Copy
 
Gui, Add, CheckBox, x250 y610 w190 h30 vcheck, <img src = " "> script
Gui, Add, Text, x147 y660 w430 h20 , Made by Innisfree (2018. 09. 22.)
 
Gui, Show, w480 h700, Google Drive Image URL Modifier for image hosting
 
return
 
GuiClose:
ExitApp
 
 
 
; 이하 Submit 버튼을 클릭하면 URL을 조작해주는 부분입니다.
main:
Gui, Submit, nohide
 
 
n = 1
loop, 7
{
    length%n% := strlen(a%n%)
    if (length%n% != 0) ; 올바른 URL을 입력하였는지 정규식으로 확인합니다.
    {
        filter1 := RegExMatch(a%n%, "^https\:\/\/drive\.google\.com\/file\/.\/")
        filter2 := RegExMatch(a%n%, "^https\:\/\/drive\.google\.com\/open\?id\=")
        errorcheck%n% := filter1 + filter2
    }
 
    if (errorcheck%n% == 0 and length%n% != 0) ;잘못된 URL을 입력하면 이를 알려줍니다.
    {
        GuiControl, , a%n%, Wrong URL!
    }
 
    if (errorcheck%n% == 1) ; 입력된 URL에서 파라미터(id)를 잘라내어 result1~7 변수에 넣어줍니다.
    {
         if (filter1 == 1)
        {
            result%n% := RegExReplace(a%n%, "https\:\/\/drive\.google\.com\/file\/.\/(.*)\/.*", "https://drive.google.com/uc?export=view&id=$1")
        }
        if (filter2 == 1)
        {
            result%n% := RegExReplace(a%n%, "https\:\/\/drive\.google\.com\/open\?id\=(.*)", "https://drive.google.com/uc?export=view&id=$1")
        }
    }
 
    n := n + 1
}
 
 
n = 1
loop, 7
{
    if (check == 0 and errorcheck%n% == 1) ; 이미지 파일의 외부링크 주소를 보여줍니다.
    {
        GuiControl, , a%n%, % result%n%
    }
 
 
    if (check == 1 and errorcheck%n% == 1) ; img 태그를 보여줍니다.
    {
        prefix := "<img src = """
        suffix := """>"
        fullscript := % prefix . result%n% . suffix
        length%n% := strlen(a%n%)
        if (length%n% == 0)
        {
            fullscript := ""
        }
        GuiControl, , a%n%, %fullscript%
    }
 
    n := n + 1
}
 
return
 
 
; 이하 copy 버튼을 클릭하면 클립보드에 붙여넣는 것에 대한 부분입니다.
b1:
Gui, Submit, nohide
 
if (check == 0 and errorcheck1 == 1)
{
    clipboard = % result1
}
 
if (check == 1 and errorcheck1 == 1)
{
    clipboard = % fullscript
}
 
return
 
 
b2:
Gui, Submit, nohide
 
if (check == 0 and errorcheck2 == 1)
{
    clipboard = % result2
}
 
if (check == 1 and errorcheck2 == 1)
{
    clipboard = % fullscript
}
 
return
 
b3:
Gui, Submit, nohide
 
if (check == 0 and errorcheck3 == 1)
{
    clipboard = % result3
}
 
if (check == 1 and errorcheck3 == 1)
{
    clipboard = % fullscript
}
 
return
 
 
b4:
Gui, Submit, nohide
 
if (check == 0 and errorcheck4 == 1)
{
    clipboard = % result4
}
 
if (check == 1 and errorcheck4 == 1)
{
    clipboard = % fullscript
}
 
return
 
 
b5:
Gui, Submit, nohide
 
if (check == 0 and errorcheck5 == 1)
{
    clipboard = % result5
}
 
if (check == 1 and errorcheck5 == 1)
{
clipboard = % fullscript
}
 
return
 
 
b6:
Gui, Submit, nohide
 
if (check == 0 and errorcheck6 == 1)
{
    clipboard = % result6
}
 
if (check == 1 and errorcheck6 == 1)
{
    clipboard = % fullscript
}
 
return
 
 
b7:
Gui, Submit, nohide
 
if (check == 0 and errorcheck7 == 1)
{
    clipboard = % result7
}
 
if (check == 1 and errorcheck7 == 1)
{
    clipboard = % fullscript
}
 
return



다른 회원님들께서도 다 알고 계시겠지만 


구글 클라우드에서 공유링크는 다음과 같은 두 가지 형태가 있습니다.


두 개의 URL 형태가 조금 다르지만 위 스크립트는 둘 다 처리할 수 있도록 작성하였습니다.




그리고 오토핫키를 설치하신 분이 그다지 많이 계시지는 않을 것 같아서 컴파일한 EXE 파일을 첨부하였습니다.


gcloudimglink.exe 


오토핫키 스크립트 자체에는 문제가 없지만 컴파일한 파일을 보안프로그램에서 멀웨어로 잡아내는 경우가 흔히 있는데요.


바이러스 토탈에서 EXE 파일을 검사해보니 역시나 Cylance, Jiangmin, 맥아피-GW-에디션에서 오진을 하는군요.

(그냥 맥아피에서는 클린하다고 나왔습니다)


안랩, 어배스트, 아비라, 이셋, 카스퍼스키, 비트디펜더, 시만텍 등 메이저 보안업체의 엔진에서는 클린하다고 나왔으니 


이 부분에 대해서는 걱정 안 하셔도 될 것 같습니다.


적어도 제 컴퓨터 환경에서는 이상없이 작동하며 보안 프로그램에서도 특별히 문제가 없었습니다.



장황한 글을 읽어주셔서 감사합니다!


그럼 스포어 회원님들께서도 남은 연휴 즐겁고 뜻깊게 보내시고 감기 조심하세요 ^^



추신:

컴파일한 파일의 아이콘은 무료 아이콘 사이트인 https://www.iconfinder.com/ 에 올라와 있는 중에서 

구글 아이콘과 비교적 유사한 것으로 사용했습니다.

Iconfinder is the leading search engine and market place for vector icons in SVG, PNG, CSH and AI for...





TAG •
  • profile
    네모 2018.09.25 17:01
    Ctrl+C 가 눌렸을때 복사된 텍스트가 구글 드라이브 링크라면 자동으로 항목에 입력시키는 기능도 추가되면 금상첨화겠네요..!
    저는 오토핫키 문법을 모르므로..!
  • profile
    이니스프리 2018.09.25 17:12
    앗 네모 님 말씀은 브라우저에서 생성된 링크를 ctrl+c 해서 클립보드에 붙여넣으면
    이 매크로 프로그램 창을 활성화한 후에 빈 칸에 ctrl+v 할 필요 없이
    자동으로 빈 칸에 들어가게 하는 기능을 말씀하시는 것이죠?

    제가 그 부분은 미처 생각하지 못했는데 그 기능이 있으면 확실히 편리하겠네요 ㅠㅠ
    그럼 클립보드에 있는 내용을 정규식으로 구글 드라이브의 공유링크임을 확인하면
    자동으로 빈 칸에 순서대로 하나씩 들어가게 하면 될까요?
    그렇게 하려면 클립보드를 실시간으로 확인해야 될텐데 제가 관련된 부분을 더 공부해야겠네요 ^^
    말씀해주셔서 감사합니다!
  • profile
    네모 2018.09.25 17:54
    클립보드가 변경될 때 함수를 실행하는 기능이 있는듯 합니다. 링크 참고하시면 될 것 같구요.
    https://autohotkey.com/docs/commands/OnClipboardChange.htm

    구글 드라이브 링크 여부를 확인하기 위해 굳이 정규식까지 사용할 필요는 없어보이네요.
    substr 같은 함수가 있는것 같으니, 클립보드 텍스트의 0~31번 문자열이 https://drive.google.com/file/d/ 인지 아닌지 체크만 하면 될것 같습니당!
  • profile
    이니스프리 2018.09.25 18:21
    오토핫키에 OnCipboardChange()라는 함수가 있었군요!
    말씀해주신 방향으로 수정해볼게요 ^^
    제가 기초가 부족해서 그런 것이겠지만 하나를 공부하면 그 다음에 공부할 것이 열 개 있는 것 같아요 ㅎㅎ
    그럼 네모 님께서도 저녁식사 맛있게 드세요~
    항상 감사드립니다!! :)
  • profile
    title: 투명 아이콘슬기 2018.09.25 20:50
    첨엔 구글드라이브로 이미지나 파일 링크 해서 사용했다가 티스토리로 이전하고서
    용량 걱정엔 부담을 덜했네요....블로그통해 외부링크로 이미지나 파일 사용하고있어서...
  • profile
    이니스프리 2018.09.25 20:58

    슬기 님께서는 티스토리로 블로그도 하시는군요!

    저는 글을 잘 쓰지 못해서 블로그를 조금 하다가 번번이 포기하게 되더군요 ㅜㅜ

    서비스형 블로그를 이용하면 확실히 트래픽 걱정은 안 해도 되어서 편한 것 같습니다.

    티스토리나 이글루스도 예전에는 이미지 외부링크를 허용했던 것으로 기억하는데요.

    제가 사용해본 블로그 서비스 중에서는 이젠 구글 블로거만 외부링크를 허용하는 것 같네요 ㅠㅠ

    그럼 슬기 님께서도 남은 연휴 즐겁게 보내세요 ^^

  • profile
    title: 황금 서버 (30일)humit 2018.09.29 16:14
    생각보다 좋은 아이디어네요 ㅋㅋㅋㅋㅋ
    한 번 나중에 시간 나면 크롬 확장프로그램으로도 만들어봐야겠네요 ㅋㅋㅋ
  • profile
    이니스프리 2018.09.29 16:26
    생활코딩 강의에서 처음에는 자신이 필요로 하는 간단한 코드부터 작성해보라고 권유하길래 만들어 봤는데요 :)
    humit 님 같은 전공자 분께서 좋은 아이디어라고 말씀해주시니 정말 감사합니다!!
    크롬 확장프로그램은 javascript + HTML + CSS 조합으로 만드는 것인가요?
    humit 님의 크롬 익스텐션을 기대하고 있겠습니다!
    그럼 좋은 주말 되세요~ ^-^
  • profile
    title: 황금 서버 (30일)humit 2018.09.29 16:31

    참고로 직접 만들어보고 싶으시다면 아래 생활코딩 강좌를 보는 것도 괜찮습니다. :)



  • profile
    이니스프리 2018.09.29 16:46
    생활코딩에서 크롬 익스텐션 만들기 강의도 하는군요~ 감사합니다!
    아쉽지만 제가 javascript에 관해서는 간신히 alert('hello world'); 하는 수준이어서
    당장은 어렵고 아마도 몇 년 후에나 가능할 것 같네요 ㅎㅎ
    humit 님께서 군 복무 중이라 바쁘시겠지만 짬짬히 개발하시는 것을 기대하고 있겠습니다 ^^
    그럼 humit 님께서도 저녁식사 맛있게 드세요~

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
78 자료 AdBlock 접근 방지 애드온 v0.1 3 file 네모 2017.10.05 765
77 자료 AdminLTE용 에디터 스타일 4 file title: 은메달도다 2017.07.07 896
76 코드 AWSCLI, in a single file (portable, linux) 1 file Seia 2021.04.10 325
75 코드 c 이진트리 전,중,후위 알고리즘 2 title: 대한민국 국기gimmepoint 2018.04.24 737
74 코드 Cmd 에서 서비스 시작 / 종료하기 1 ProjectSE 2018.02.18 710
73 코드 CMD로 로컬 연결 고정 IP 설정하기 1 title: 황금 서버 (30일)humit 2018.02.06 1098
72 코드 C언어 삼중자를 이용한 코드 title: 황금 서버 (30일)humit 2018.07.22 504
71 자료 even_move - 감성적인 에러 페이지 7 file title: 열려라 맛스타의 자물쇠TVJ 2017.08.08 924
70 자료 Gentelella 3 file NoYeah 2017.06.29 1070
69 자료 Gentelella 레이아웃에 사용가능한 가격 테이블 위젯입니다. 3 file NoYeah 2017.07.03 715
68 코드 Git 저장소에서 자동으로 받아 업데이트하는 쉘 스크립트 5 NoYeah 2017.09.16 859
67 코드 Hello, World!를 출력해보자 18 네모 2018.04.21 723
66 코드 HEX를 RGB로, RGB를 HEX로 바꾸는 PHP 코드 1 네모 2018.05.05 758
65 코드 html 초보가 만든 자소서 4 title: 대한민국 국기gimmepoint 2018.04.21 752
64 코드 JavaScript에서 파이썬 문자열 처리 함수 중 하나 (바인딩)를 구현 7 Seia 2020.01.20 578
63 코드 Koa에서 자동으로 라우팅 채워주기 Seia 2020.01.22 739
62 자료 RBGE - 이쁘고 깔끔한 에러페이지 4 file title: 열려라 맛스타의 자물쇠TVJ 2017.08.08 789
61 자료 [1.8a] Bootstrap 'Panel' 위젯 스타일 1 file title: 은메달도다 2017.08.09 706
60 자료 [Autohotkey] 매분 정각에 전체화면을 캡쳐하는 스크립트 4 file 이니스프리 2020.05.22 1260
59 자료 [Bootstrap] xeACE 레이아웃 3 title: 은메달도다 2017.09.17 761
Board Pagination Prev 1 2 3 4 Next
/ 4