안수찬의 개발이야기

Message App with Applescript : 본인인증 인증번호 한방에 가져오기

Introduction

안수찬 @dobestan

안수찬 @dobestan

소프트웨어 생태계에 기여할 수 있는 실용주의 프로그래머가 되고자 합니다. 나는 안수찬이다. 그러므로 나는 할 수 있다.


자동화

Message App with Applescript : 본인인증 인증번호 한방에 가져오기

Posted by 안수찬 @dobestan on .
Featured

자동화

Message App with Applescript : 본인인증 인증번호 한방에 가져오기

Posted by 안수찬 @dobestan on .

최근에 제가 매일 매일 하고 있는 바보같은 일을 하나 발견했는데 바로 "각종 사이트에 본인인증을 하거나, 결제을 할 때 인증번호를 입력해야하는 경우가 많은데 이 때 마다, 문자를 받고 문자를 Message App를 통해서 읽어서 보고, 그제서야 사이트 내에 숫자를 입력하는" 약 5초 나 걸리는 일을 계속 반복한다는 겁니다.

오늘도 오전에 결제을 하다가 계속적으로 반복되는 이 작업이 불편한 것 같아 개선해보고자 생각하였습니다. 문자들을 살펴보면 다음과 같습니다.

[국제발신] Your Google verification code is 818493 - 구글 OAuth를 적용한 3rd Party Service 를 사용할 때의 인증번호 안내 SMS

[NICE ID 본인확인] 인증번호 [663756]를 입력해 주세요. - 본인인증 인증번호 안내 SMS

[시럽페이] 본인인증번호는 125601 입니다. 정확히 입력해주세요. - 간편결제 ( 시럽페이, 옐로우페이 등 ) 인증번호 안내 SMS

공통점을 살펴보면 딱히 없어요 문자에 숫자가 있습니다. "[818493]" 이렇게 뭔가 묶어주면 숫자만 빼내기 쉬울 것 같았는데 그런 건 없었네요. 그럼 바로 시작해보겠습니다.

Message App with AppleScript

일단 가장 중요한건 Apple Message Application 에서의 지원 여부인데, 클립보드로 바로 붙여넣기와 같은 기능은 제공하지 않지만, 기존에 만들어진 AppleScript를 이용해서 메시지 수신, 발신 이벤트 중에 특정 기능을 수행할 수 있도록 되어있습니다.

기본적으로 내장되어 있는 스크립트를 살펴보면 다음과 같습니다.

/Users/dobestan/Library/Application Scripts/com.apple.iChat

.
├── Auto\ Accept.applescript
├── Auto\ Decline.applescript
├── Mix\ Message\ Case.applescript
├── Speak\ Events.applescript
└── iTunes\ Remote\ Control.applescript

0 directories, 6 files  

대표적으로 Mix Message Case.applescript의 경우에는 Case ( 대, 소문자 )를 랜덤하게 변경해주는 스크립트 입니다. ( 정말 필요없을 것 같다는 생각이 드는 걸 보니 아마 예시로 넣어준 것 같습니다 )

다른 스크립트 파일도 확인해보시면 전체적인 구조가 비슷하게 이루어져 있다는 것을 확인해보실 수 있습니다. 아래와 같이 각각의 이벤트 내에서 실행하고 싶은 스크립트를 작성해주면 됩니다.

using terms from application "Messages"  
    on message sent theMessage for theChat
        ...
    end message sent

    on message received theMessage from theBuddy for theChat
        ...
    end message received

    # The following are unused but need to be defined to avoid an error
    ...
end using terms from

Message to Clipboard

가장 기본적으로 문자의 수신 과정에서 받은 메시지를 클립보드로 옮기는 것은 매우 쉽습니다. 발생한 이벤트에서 전달받은 메시지 ( theMessage )를 그대로 clipboard로 옮기면 됩니다.

on autoclipboard(theMessage)  
    set the clipboard to theMessage # 클립보드로 메시지를 복사하는 스크립트
end autoclipboard

on message received theMessage from theBuddy for theChat  
    autoclipboard(theMessage)
end message received  
...

AppleScript with Regex

이 부분은 몇 가지를 검색을 해 봤는데, 애플스크립트 내에 정규표현식을 이용해서 문자열을 추출할 수 있는 기능이 없는 것 같다.

답변들을 살펴보면 대부분 sed ( stream editor ) 커맨드를 이용해서 이 부분을 해결하여 여기서도 그렇게 진행해보로 하였다. 기본적으로 sed로 숫자 추출하기의 용례는 다음과 같다.

$ echo "[NICE ID 본인확인] 인증번호 [663756]를 입력해 주세요." | sed "s/[^0-9]//g"
663756  

이걸 애플스크립트로 변경해보면 다음과 같이 작성할 수 있다.

set the clipboard to do shell script "echo '" & theMessage & "' | sed 's/[^0-9]//g'"  

이걸 적용해서 최종적인 스크립트를 작성해보면 다음과 같다 : https://github.com/dobestan/dotfiles/blob/master/osx/applescripts/AutoClipboard.applescript

on autoclipboard(theMessage)  
    set the clipboard to theMessage # 클립보드로 메시지를 복사하는 스크립트
    set the clipboard to do shell script "echo '" & theMessage & "' | sed 's/[^0-9]//g'" # Stream Editor를 이용해서 숫자만을 가져오는 스크립트
end autoclipboard

on message received theMessage from theBuddy for theChat  
    autoclipboard(theMessage)
end message received  
...

결론

애플스크립트를 처음 다뤄보고 문서를 읽어보느라 위의 간단한 스크립트를 짜는데 약 1시간 ( 3600초 ) 정도가 걸린 것 같습니다. 반복적인 작업을 하는데 걸린 시간이 약 5초 정도였으니,

반복적인 작업에 걸릴 시간 3600초 = 5초/1회 * 반복적인 작업 720회

이렇게 본인인증 및 결제 720회 이후에는 생산성이 더 늘어날 것이라 조심스래 기대해봅니다.

안수찬 @dobestan

안수찬 @dobestan

https://dobest.io/

소프트웨어 생태계에 기여할 수 있는 실용주의 프로그래머가 되고자 합니다. 나는 안수찬이다. 그러므로 나는 할 수 있다.

View Comments...