일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 이원경기자
- 인텔
- 롤
- 출시
- 플레이웨어즈
- 마이크로소프트
- 애플
- 공개
- Apple
- 구글
- AWS
- 배틀그라운드
- 리뷰
- Microsoft
- Bitcoin
- 문태환기자
- 브레인박스
- 삼성
- 닌텐도 스위치
- 엔비디아
- 업데이트
- Review
- 이벤트
- 비트코인
- 리그오브레전드
- LEAGUE OF LEGENDS
- 아이폰X
- 오버워치
- 카카오게임즈
- Today
- Total
IT & Life
[해외] 자신의 슬랙 봇 및 웹 API를 R로 작성하십시오. 본문
자신의 슬랙 봇 및 웹 API를 R로 작성하십시오.
이 단계별 자습서에서는 현재 주가를 찾는 방법을 보여 주지만 기본 프레임 워크는 모든 종류의 데이터에 사용할 수 있습니다
슬랙 의 가장 큰 매력 중 하나는 확장 성이 좋다는 것입니다.
애드온 응용 프로그램은 그룹 공동 작업을하는 동안 비즈니스 분석 에 대한 대답 질문 부터 Jira 및 Trello와 같은 도구에서 프로젝트 업데이트 를 제공 하는 모든 작업을 수행 할 수 있습니다 .
상용 타사 및 오픈 소스 개발자가 수십 개의 미리 구성된 슬랙 봇을 가지고 있지만 코드를 작성하는 것은 어렵지 않습니다.
이미 PHP 와 Python 에서이 작업을 수행하는 방법에 대한 자습서가 있습니다 . 그러나 재무, 날씨, 정부 정보 등에 관한 데이터를 쉽게 가져올 수있는 R 함수를 활용하고 Slack이 "사용자 정의 슬래시 명령"이라고 부르는 것에 일부를 추가하기를 원했습니다.
이 기능을 통해 사용자는 간단한 형식으로 쿼리에 대한 응답을 얻을 수 있습니다 like /weather또는 /stockprice.
다음은 현재 주가를 검색하기 위해 R에서 사용자 정의 슬랙 슬래시 명령 봇을 작성한 방법입니다. R을 사용하여 가져 와서 처리 할 수있는 다른 유형의 정보에도 동일한 기술을 사용할 수 있습니다.
1 단계 : R로 주가를 찾는다.
R에서 현재 주가를 얻는 것은 쉬운 일입니다. quantmod 패키지 를 설치 한 install.packages(“quantmod”)다음 실행하십시오 quantmod::getQuote(“stocksymbol”). 예를 들어 quantmod::getQuote(“MSFT”)최신 Microsoft 주가를 반환합니다. 결과는 R 데이터 프레임으로 돌아옵니다.
이를 텍스트 응답으로 전환하여 사용자가 가장 최근의 가격과 변경 사항을 더 쉽게 볼 수 있도록하는 것이 좋습니다. 결과 데이터 프레임의 첫 번째 항목은 주가보고 시간입니다. 두 번째 항목 ( "마지막"열)은 가장 최근의 사용 가능한 가격입니다. 가격을 반환하는 것과 함께 가격을 사용할 수없는 경우에 대비하여 사람이 읽을 수있는 응답이 표시되도록 오류 검사를 추가하고 싶을 것입니다. 다음은 간단한 R 함수입니다.
이제이 함수를 슬랙 (Slack)과 같은 다른 서비스, 즉 URL을 통해 사용할 수있는 API로 변환해야합니다.
2 단계 : R에 API 설정
FastRWeb 프로젝트를 사용하거나 PHP 및 쉘 스크립트를 통해 R을 실행 하는 것과 같이 URL에서 R 스크립트를 실행 가능하게 만드는 여러 가지 방법을 살펴 보았습니다 . 그러나 그들은 단순한 Slack 명령을 실행하는 것보다 설치하고 설정하는 것이 더 복잡해 보였습니다. 그런 다음 R 기능을 API로 전환 할 수 있는 R 배관공 패키지를 기억했습니다 . 배관공은 RStudio 소프트웨어 엔지니어이자 Trestle Technology 라는 창업자 인 Jeff Allen이 만들었습니다 . R을 사용하여 API를 만드는 것은 매우 쉽고 우아합니다.
이것은 로컬에 설치하기 쉽습니다. install.packages(“plumber”), 함께 패키지를 설치하고 다음 함수의 시작 바로 위에 줄에 다음 코드를 추가하십시오 #* @get /stockquote.
newGetQuote 함수는 이제 다음과 같이 보입니다.
이 #*함수를 API 끝점으로 바꾸는 특별한 배관공 주석입니다. @get데이터 읽기를위한 HTTP GET 요청이어야 함을 의미합니다. 배관공은 또한 지원 @post, @put및 @delete. 은 /stockquote후 @getAPI가에 응답해야 어떤 경로를 지정합니다. 사용 stockquote은 API URL 형식이 http://www.myurl.com/stockquote가됨을 의미합니다. 그 다음의 문자열 /은 stockprice, myquotes 또는 다른 것일 수 있습니다.
R 파일로 저장하십시오. (나는 내 주식 함수라고 불렀다.하지만 그 이름은 뭐든지 될 수있다.)
두 번째 R 파일에는 배관공 서버를 시작하고 stockfunction.R 파일 (또는 API 함수를 사용하여 파일을 호출 한 파일)을 실행하는 코드가 있어야합니다. 이 두 번째 파일은 배관공 라이브러리를로드하고 plumb () 함수로 stockfunction.R 코드에서 배관공 객체를 만들고 서버가 수신 대기 할 포트를 설정합니다. 그 코드는 다음과 같습니다.
myserver.R이라고하는이 두 번째 파일의 코드를 모두 실행 한 다음 http://localhost:8000/stockquote?thesymbol=MSFT브라우저 의 URL로 이동 하면 브라우저에 주가가 표시됩니다.
그런 다음 Slack이 액세스 할 수있는 시스템에이 코드를 배포해야합니다.
3 단계 : 원격으로 R API 호스팅
API를 호스팅하는 방법에는 웹 기반 응용 프로그램과 같이 여러 가지가 있습니다. 기존 내부 서버에 추가하거나, 조직의 외부 서버에 업로드하거나, 가상 시스템의 유무에 관계없이 클라우드 서비스를 사용하거나, 웹 호스트. 모두 다 커버 할 수는 없지만, 기본은 꽤 비슷합니다 (머신에 루트 액세스 권한이없는 웹 호스트를 사용하지 않는 한, 추가적인 조정이 필요할 수 있습니다). Docker 응용 프로그램으로 배포하려는 경우 R 배관 도구 패키지에 대한 Docker 이미지 가 있음에 유의하십시오 .
외부에서 호스팅하는 가장 쉬운 방법 중 하나는 Digital Ocean 입니다. 설정은 간단하며 가장 작은 "물방울"을 $ 5 / 월에 사용할 수 있습니다.
소프트웨어 엔지니어이자 R consultant Dean Attali는 Digital Ocean에서 R을 설정하는 방법에 대한 단계별 지침을 제공합니다 . 그의 목표는 R Shiny Web 프레임 워크 (이 프로젝트에는 필요하지 않음)로 시작하고 실행하는 것이므로이 프로젝트에 필요한 것 이상을 설명합니다.
Attali의 1 ~ 6 단계를 따르는 것이 좋습니다.
- DigitalOcean으로 가입
- 새 물방울 만들기
- 새 서버에 로그인하십시오.
- 보안 및 인증 기본 사항 설정
- 브라우저에서 드롭 릿에 액세스하십시오.
- R 및 필요한 패키지를 설치하십시오. 배관공과 퀀텀을 설치하는 것을 잊지 마십시오.하지만, 당신이 원하지 않는 한, Attali의 지시에 나오는 devtools 나 shinyj는 필요하지 않습니다.
일반적인 R 명령 줄 환경에서 작업하는 것을 선호한다면 단계 7로 이동하여 RStudio Server의 자체 클라우드 버전을 설치할 수 있습니다. 이 Slack 프로젝트에 Shiny 서버가 필요하지 않을 것입니다.
Digital Ocean 서버를 갖게되면 앱의 두 R 파일에 대한 앱 디렉토리를 만들어 서버에 업로드하십시오. 마침내 API를 테스트 할 수 있습니다.
Rscript myserver.Rapp 디렉토리에있는 동안 드롭 릿의 명령 줄에서 myserver.R 파일을 실행하십시오 . "포트 8000에서 수신 대기중인 서버"(또는 선택한 포트) 메시지가 나타납니다.
API URL은 http://xxx.xxx.xxx.xxx:8000/stockquote?thesymbol = 과 같습니다 ( xxx.xxx.xxx.xxx 는 드롭 릿의 IP 주소 임). API를 테스트하려면 브라우저를 열고 http : //your.droplet.ip.address : port / APIpath? thesymbol = MSFT 로 이동하면 [ "MSFT 가격은 2017-02-17 기준 $ 64.49입니다. 12:34:00 "] 대가로. API 경로는 R 함수 파일의 첫 번째 행에 설정 한 것입니다 . 서버의 앱 디렉토리 이름 이 아닙니다 . STOCKSYMBOL#* @get
이제 API가 작동하고 있다는 것을 알았으므로 Ctrl-C를 사용하여 수동 서버를 중지 하고 배관공 애플리케이션을 웹 호스팅하는 방법 에 대한 Trestle의 지침으로 안내하십시오 . Attali 's 의 RStudio Server와 Shiny Server를 DigitalOcean 게시판 으로 가져 오는 방법 에 따라 R을 이미 설치 했으므로 나머지 단계는 다음과 같습니다.
- Node.js 자바 스크립트 프레임 워크 설치
- npm ( Node.js 패키지 관리자) 설치
- PM2를 설치 (위한 프로세스 관리자 Node.js를 )
- pm2가 실행할 수있는 세 번째 R 스크립트 파일 만들기
- 배관공 서버를 pm2에 등록하십시오.
- 부팅시 서버가 실행되도록 pm2를 설정하십시오.
다행히도 이러한 작업의 대부분은 단 1-2 줄의 코드 만 필요 하며 배관공 애플리케이션을 웹 호스팅하는 방법 에 대해서는 모두 설명되어 있습니다. 우분투 방울에 pm2를 설치하는 데 문제가 있으면 node-legacy sudo apt install nodejs-legacy를 설치 한 다음 pm2를 설치하십시오 sudo npm install -g pm.
R 서버를 실행하기 위해 Node.js JavaScript 프레임 워크 가 필요한 이유가 궁금하다면 , 대답은 다음과 같습니다. Node의 pm2 프로세스 관리자에 액세스하려면. Allen이 배관공 문서에서 설명했듯이 기본 R은 한 번에 한 명의 사용자를 위해 설계되었지만 API는 한 번에 여러 세션을 처리해야 할 수도 있습니다. Node의 pm2 나 Ruby의 Phusion Passenger 와 같은 프로세스 관리자 는 R (및 다른 플랫폼)이이를 수행하도록 허용 할 수 있습니다.
세 번째 스크립트 파일 (run-myserver.R이라고 부름)은 다음과 유사해야합니다.
’myserver.R’2 번 줄에는 배관공 서버 파일의 이름을 지정해야합니다. 3 행의 포트는 애플리케이션에서 사용할 수있는 모든 포트가 될 수 있습니다. (Webfaction과 같은 공유 호스팅 서비스를 사용하는 경우 응용 프로그램에는 사용할 수있는 포트가 하나만있을 수 있으므로 그 포트가 무엇인지 알아야합니다.)
이 파일을 드롭 릿의 app 디렉토리에 업로드하고 실행 가능한지 확인하십시오. 즉, 올바른 유닉스 권한을 가지고 있는지 확인하십시오. chmod 755 run-myserver.Rapp 디렉토리에서 명령 을 실행하여이를 수행 할 수 있습니다 .
pm2 start —interpreter="Rscript" /path/to/run-myserver.Rand -를 사용하여 pm2로 run-myserver.R 파일을 등록하기 위해 Allen의 지시를 따랐다면 pm2 save, 서버는 계속 실행되어야합니다. Rscript myserver.R한 번에 하나의 서비스 만 포트에서 실행될 수 있기 때문에 pm2가 서버를 실행하는 경우 더 이상 myserver.R 파일을 수동으로 실행할 수 없습니다 .
빌라! 일부 R 코드를 공개적으로 사용할 수있는 API로 전환했습니다. 슬랙 (Slack) 봇 (bot)과 슬랙 (slack) 채널 만이 슬랙 (slack) 채널을 사용하도록하기위한 몇 가지 개조가 있습니다.
4 단계 : 슬랙에 API 연결
Slack에서 "맞춤 슬래시 명령"을 설정하려면 채널의 맞춤 통합 부분으로 이동하십시오.이 부분은 https://YOURTEAMNAME.slack.com/apps/manage/custom-integrations 에서 바로 찾을 수 있습니다. 앱 왼쪽 상단의 채널 이름 옆에있는 드롭 다운 메뉴를 통해 슬랙 맞춤 설정> 메뉴> 앱 구성> 맞춤 통합을 클릭합니다. 어떤 방법 으로든 슬래시 명령을 클릭하십시오. 구성 추가라고 표시된 녹색 막대가 보일 것입니다.
사용자 정의 통합 옵션 부족 Slack 메뉴의 스크린 샷
Slack의 사용자 정의 통합 메뉴에서 사용자 정의 슬래시 명령을 추가 할 수있는 위치를 찾을 수 있습니다.
그것을 클릭하면 마지막으로 슬래시 명령을 추가하는 화면이 나타납니다. 사용자가 명령을 실행하는 데 사용할 단어를 선택 /stockprice하거나 /stockquote주식 가격 앱을 선택하십시오. 슬래시로 시작한 다음 소문자 만 사용하십시오. 슬래시 명령 추가 버튼을 클릭하십시오.
슬랙 사용자 정의 슬래시 명령 추가 슬랙 메뉴의 스크린 샷
커스텀 슬래시 명령을 추가하기위한 슬랙 페이지.
R API의 루트 URL (예 : http://xxx.xxx.xxx.xxx:8000/stockquote )을 입력하고 메소드로 GET을 선택하십시오. Slack은이 슬래시 명령에 대한 고유 한 토큰을 생성합니다. 이 토큰은 필요하지 않지만 R 함수에 추가하여 슬랙의 승인 된 요청 만 API를 사용할 수 있습니다. 이는 중요한 내부 데이터를 사용하는 앱에 대해 수행 할 수 있습니다.
액세스를 제한하려면 다음과 같은 if-else 문으로 기본 함수를 래핑하십시오.
http://xxx.xxx.xxx.xxx:8000/stockquote?thesymbol=GOOG&token=YOURSLACKTOKEN 과 같은 URL을 사용하여 테스트 할 수 있습니다 . 중요 : R 파일 중 새 버전을 드롭 릿에 업로드하는 경우 변경 사항을 적용하려면 배관공 서버를 중지했다가 다시 시작해야합니다. 시스템의 다른 프로세스를 방해 할 염려가 없다면 프로세스를 쉽게 업데이트 할 수 있습니다. pm2 updatePM2
슬랙 (Slack)은 응답을 출력하는 봇의 이름을 사용자 정의하는 옵션을 제공합니다.이 옵션은 광산 주식 봇이라고 부릅니다. 또는 봇 기본값을 사용할 수 있습니다.
통합의 마지막 부분은 새 /stockprice슬래시 명령이 슬랙에서 API로 전송 된 후 슬랙 사용자가 입력 한 텍스트를 확인하는 것 입니다. Slack은 예를 들어 슬래시 명령과 함께 사용하는 GET 또는 POST 변수를 설명합니다.
예제에 따르면, text 는 사용자가 slash 명령 다음에 입력하는 것을 저장하는 변수입니다. 즉, newGetQuote 함수를 변경해야 할 필요가 있습니다. newGetQuote 함수는 thesymbol이 아닌 text라는 변수를 가져올 것이기 때문입니다. 나는 또한 다음과 같이 R의 trimws () 함수를 사용하여 사용자 입력 전후에 공백을 제거하는 선을 추가하는 것이 좋습니다.
당신의 물방울의 응용 프로그램 디렉토리에 개정 된 stockfunction.R을 업로드하여 서버를 다시 시작 pm2 updatePM2하고 다음과 같은 형태의 URL과 브라우저의 새로운 버전을 테스트 http://xxx.xxx.xxx.xxx:8000/stockquote?text=을 GOOG & token = YOURSLACKTOKEN .
그게 정상적으로 작동한다면 슬래시 명령에 대한 추가 옵션 필드를 작성하십시오. 원하는 경우 사진을 업로드하거나 도움말 텍스트를 추가 한 다음 저장하십시오.
슬랙 봇이 작동 할 것입니다. 따라서 팀원은 누구나 /stockprice AAPL주식 가격이 아니라면 슬랙에 슬래시 명령의 이름 을 입력 하고 Apple의 최신 주가를받을 수 있어야합니다.
아마 "AAPL의 가격은 2017-02-17 03:04:00 현재 $ 135.485입니다."와 같이 대괄호와 따옴표로 응답이 반환 된 것으로 나타났습니다. 그것은 배관공 패키지의 기본 응답이 json이기 때문입니다. 아직이 기능에 대한 문서는 많지 않지만 이 버그로 인해 결과가 일반 텍스트로 돌아 오면 배관공의 응답을위한 다른 형식을 정의하기 위해 직렬기를 추가해야합니다 .
주식 함수의 초기 라인 앞에 있는 함수 파일 맨 위에서 #* @get /stockquote[ ""] JSON 래퍼없이 일반 텍스트를 보냅니다.
이 단계를 통해 R 코드를 사용하여 다른 Slack 봇 및 웹 API를 많이 만들 수 있습니다. 결국 배관공 환경을 이미 설정 한 후에는 서버에 사용 가능한 다른 포트가있는 한 추가 API와 슬래시 명령을 추가하는 것이 더 쉽습니다.
이런 식으로 API와 Slack slash 명령을 사용할 수있는 다른 데이터에 대한 아이디어가 필요하면 검색 가능한 표를 확인하십시오. 이 R 패키지는 스포츠, 날씨, 주식 데이터 등을 가져옵니다 .
이 R 방법에 대한 의견이 있으십니까? 당신은 트위터에 샤론을 찾을 수 있습니다 sharon000 @ 와의 이메일로 smachlis@computerworld.com .
이 이야기는 "자신의 슬랙 봇과 웹 API를 R로 만들자"는 원래 Computerworld에서 출판되었습니다.