Just a Blog

[macOS 앱] '알프레드 워크플로우 (Alfred workflow)' 환율계산기 간단 제작 본문

IT, Computer

[macOS 앱] '알프레드 워크플로우 (Alfred workflow)' 환율계산기 간단 제작

wehong 2023. 1. 8. 01:31

Alfred 5 Powerpack을 구매하고 사용해 보면서 이전에 사용하던 workflow들을 설치/조정했다.

 

[macOS 앱] Alfred 5 Powerpack 구매

Alfred 3, 4 버전에 이어 Alfred 5에 대한 Powerpack도 구매. 이번에는 'Mega Supporter' 라이센스로 구매.

wehong.tistory.com

 

이번에도 환율계산을 할 수 있는 workflow 중 새로 개발된 것이 있는지 살펴 보았는데 여전히 잘 보이지 않았다. Alfred에서 환율계산 기능을 하는 workflow들이 개인 개발자들로부터 공개되어 있기는 하지만, 이상하게도 대부분 PHP를 이용한 것들이라 사용하기 어려웠다. 특정 앱의 특정 기능 하나를 위해 macOS에 PHP를 설치하는 것은 아무래도 내키지 않았다.

 

그래서 PHP 기반 workflow를 살펴 보고 Python으로 직접 만들어 보는 것을 시도해 보았다. 그 workflow들은 환율제공 서비스(Exchange Rate API)의 OpenAPI를 이용하고 있었기에, OpenAPI를 호출하고 JSON 형식의 결과에서 변환 비율 값을 찾아 사용자 입력 값에 곱하는 로직을 구현하면 될 것 같았다.

터미널에서 Python으로 작성한 스크립트를 구동하니 잘 되어 Alfred에 넣어 봤는데 문제가 발생했다. 개인적으로 pyenv를 사용해 macOS의 Python(/usr/bin/python3) 환경과 별도로 Python 환경을 사용하고 있는데, alfred에서 사용하기 위해서는 OS 기본 python에 여러 모듈들을 설치해야 동작하는 문제가 있었다. 이번에도 역시, 특정 앱의 특정 기능 하나를 위해 PIP로 OS 상의 Python 환경에 여러 모듈을 설치하기 싫었다.

 

차선으로 선택한 것이 Ruby였다. Python과 비슷한 개발 환경이 될 것이라 생각했고, Ruby를 Perl 수준의 스크립트 형태로 사용하면 기본 로직은 구현할 수 있을 것 같았다. Ruby도 개인적으로는 rbenv로 OS의 기본 Ruby(/usr/bin/ruby)와 별도의 환경으로 사용하고 있지만, OS 상의 기본 Ruby에서도 대부분의 라이브러리 모듈 기능이 동작해서 gem 같은 것으로 추가 설치할 필요가 없었다.

 

Python 쪽이든 Ruby 쪽이든 workflow에 개발에 깊게 파고 볼 문서를 찾기가 어려웠다. GitHub에 공개된 템플릿 코드를 뒤져 보거나 다른 개발자들이 공개한 결과물을 보는 것이 대안이었다.

 

일단 만들어 보니 대충 동작은 한다. Alfred에서 사용자가 어떤 값을 입력하면 그 값에 해당하는 미국달러, 유로화, 파운드화가 각각 한국 화폐로 얼마인지 보여주는 형식이다. 아이콘은 여기서 다운 받은 workflow 것을 그대로 사용했다(어차피 개인적으로 사용할 것이니까).

물론 코드의 효율성이 좋지 않고 최적화 부분이 많아 보인다. 하지만 일부는 Alfred의 workflow 플레임워크 구조와 연관이 있기도 한 것 같다.

 

핵심적인 Ruby 코드는 대략 다음과 같다.

require 'uri'
require 'net/http'
require 'json'

uri_usd = URI(' ... ')  <-- Exchange Rate OpenAPI URL 사용 (access key 포함)
res_usd = Net::HTTP.get_response(uri_usd)
result_usd = JSON.parse(res_usd.body)
rate_usd = result_usd['conversion_rate']

esult_usd = (ARGV[0].to_f * rate_usd.to_f).ceil
result_usd_text = '{"title": "' + ARGV[0] + ' USD = ' + result_usd.to_s + ' KRW", "subtitle": "convert USD to KRW"}'
total_result = '{"items":[' + result_usd_text + ']}'
puts total_result

이런 내용을 별도의 rb 파일로 만들고 Alfred 쪽의 설정에서 스크립트를 shell로 실행하도록 설정했다.

/usr/bin/ruby (파일명).rb "{query}"

 

여러 모로 살펴보면 macOS 사용자라면 환율변환에는 Spotlight를 쓰는게 제일 나은 것 같다.

 

이 workflow가 사용하는 OpenAPI의 결과와 Spotlight 결과 및 네이버 환율계산기 결과가 모두 다른데, 정확한 금액을 확인한다기 보다는 대략 얼마 정도가 되는지 가늠하는 용도로 사용하는 것이 맞아 보인다.

 

Comments