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
번호 분류 제목 글쓴이 날짜 조회 수
58 코드 [Python] Selenium을 이용하여 특정 element를 캡처하는 스크립트 2 file 이니스프리 2019.07.03 6177
57 코드 [Python] 선택한 파일을 Dropbox API를 이용하여 업로드하고 공유링크를 받아서 이미지 호스팅 용도로 URL을 변환하기 1 file 이니스프리 2019.07.02 1213
56 코드 [JS]클라이언트에서 Ip를 얻어보자 2 Hanam09 2019.01.21 808
55 코드 [JS] http를 https로 리디렉션! 3 Hanam09 2018.12.30 886
54 코드 [PHP] 이미지를 원하는 크기(원본비율 유지)로 리사이즈 하여 출력 (원본 이미지는 수정하지 않습니다) 6 이니스프리 2018.12.20 8016
53 코드 [아미나] 네이트 실시간 검색어 순위 위젯 (아미나 캐시 적용) 3 file 이니스프리 2018.12.18 1134
52 코드 [아미나] 출석 여부를 나타내는 메인화면 위젯 4 file 이니스프리 2018.12.15 812
51 코드 [PHP] 간단한 캐싱 클래스 3 title: 황금 서버 (30일)humit 2018.12.06 885
50 코드 [Python] 텔레그램을 이용한 게시판 새 글 알림봇 7 이니스프리 2018.12.02 4036
49 코드 [아미나] 게시글을 작성하면 ID와 IP로 필터링하여 자동으로 랜덤 댓글을 남기기 (+랜덤 포인트) 7 file 이니스프리 2018.11.18 819
48 코드 [PHP] 그누보드 자동 게시글 작성 - 일본기상협회의 우리나라 날씨를 크롤링한 후 파파고로 번역하여 글 작성 4 file 이니스프리 2018.11.15 846
47 코드 [PHP] 기상청 RSS 시간별 예보 위젯 - cache 적용(?) 9 file 이니스프리 2018.10.28 1005
46 코드 [오토핫키] 브라우저를 열어 지난번과 동일한 폴더에 MZK를 다운받고 압축을 네이티브로 해제하는 스크립트 file 이니스프리 2018.10.20 928
45 코드 [PHP] 기상청 중기예보를 캐러셀로 보여주는 위젯 (매우 허접합니다 ㅠㅠ) 10 file 이니스프리 2018.09.28 757
» 코드 [오토핫키] 구글 드라이브의 공유링크를 이미지 호스팅을 위한 다이렉트 링크로 바꿔주는 스크립트 10 file 이니스프리 2018.09.25 1842
43 코드 [오토핫키] 특정 사이트에 대한 ping 테스트 결과를 실행시간과 함께 로그 파일로 저장하는 스크립트 2 이니스프리 2018.09.22 2106
42 코드 [Python] 모 정부기관 사이트 파싱 후 PC 통신처럼 열람하고 싶은 게시글 번호를 입력하면 내용을 보여주는 소스 (허접) 4 이니스프리 2018.09.14 757
41 코드 파이선 셸에서 실행하면...? 3 제르엘 2018.07.22 645
40 코드 C언어 삼중자를 이용한 코드 title: 황금 서버 (30일)humit 2018.07.22 506
39 코드 폰트를 자동 설치하는 코드 1 네모 2018.07.16 1024
Board Pagination Prev 1 2 3 4 Next
/ 4