Ro­bots Slack y web API con fun­cio­nes R

Uno de los ma­yo­res atrac­ti­vos del Slack es fá­cil de ex­pan­dir, sus apli­ca­cio­nes com­ple­men­ta­rias pue­den ha­cer de to­do, des­de res­pon­der pre­gun­tas so­bre aná­li­sis de ne­go­cios has­ta ac­tua­li­za­cio­nes de pro­yec­tos de he­rra­mien­tas.

IT Now El Salvador - - Know how - CIO

Aun­que hay do­ce­nas de ro­bots Slack pre­con­fi­gu­ra­dos de ter­ce­ros co­mer­cia­les y desa­rro­lla­do­res de có­di­go abier­to, no es di­fí­cil co­di­fi­car los pro­pios. Ya hay tu­to­ria­les so­bre có­mo ha­cer es­to en PHP y Pyt­hon. Pe­ro que­ría apro­ve­char al­gu­nas de las fun­cio­nes en R que im­por­tan fá­cil­men­te da­tos so­bre fi­nan­zas, in­for­ma­ción me­teo­ro­ló­gi­ca, in­for­ma­ción gu­ber­na­men­tal y mu­cho más, con so­lo agre­gar co­man­dos per­so­na­li­za­dos de ba­rra, que per­mi­ten a los usua­rios ob­te­ner res­pues­tas a las con­sul­tas con for­ma­tos sim­ples co­mo /clima o /pre­cio de mer­ca­do.

Pa­so 1: En­cuen­tre pre­cios de las ac­cio­nes con R

Con­se­guir un pre­cio ac­tual en I es ri­dí­cu­la­men­te fá­cil. Ins­ta­lar el pa­que­te de quant­mod con ins­tall.pac­ka­ges(“quant­mod”) y vuel­va a eje­cu­tar qu ant­mod::ge­tQuo­te(“stocksym­bol”). Por ejem­plo, quant­mod::ge­tQuo­te(“MSFT”) de­vuel­ve el más re­cien­te de Mi­cro­soft pre­cio de las ac­cio­nes. Los re­sul- ta­dos vie­nen atrás co­mo una tra­ma de da­tos R.

Te su­ge­ri­ría que con­ver­tir es­to en una res­pues­ta de tex­to por lo que es más fá­cil pa­ra el usua­rio pa­ra ver el pre­cio más re­cien­te y el cam­bio. El pri­mer ele­men­to de la tra­ma de da­tos de re­sul­ta­dos es el tiem­po del pre­cio de las ac­cio­nes que se in­for­ma; el se­gun­do ele­men­to (la co­lum­na “Úl­ti­ma”) es q u e la ma­yor pre­cio dis­po­ni­ble re­cien­te. Jun­to con la de­vo­lu­ción del pre­cio, lo que pro­ba­ble­men­te desee aña­dir un po­co de com­pro­ba­ción de erro­res por lo que hay una res­pues­ta le­gi­ble en ca­so de un pre­cio no es­tá dis­po­ni­ble. Aho­ra ten­dre­mos que ac­ti­var es­ta fun­ción en al­go que otro ser­vi­cio co­mo Slack pue­de rea­li­zar con­sul­tas - en otras pa­la­bras, una API que es­tá dis­po­ni­ble a tra­vés de URL.

Pa­so 2: Es­ta­ble­cer un API en R

Mi­ré en va­rias for­mas de ha­cer guio­nes R eje­cu­ta­bles des­de una URL, co­mo el uso del Fas­tRWeb pro­yec­to o en eje­cu­ción R a tra­vés de PHP y scripts de shell. Pe­ro to­dos ellos pa­re­cían más com­ple­jos de ins­ta­lar y con­fi­gu­rar que va­lía la pe­na só­lo pa­ra eje­cu­tar un sim­ple co­man­do Slack. En­ton­ces re­cor­dé el R fon­ta­ne­ro pa­que­te, que pue­de con­ver­tir cual­quier fun­ción R en un API. Fon­ta­ne­ro fue crea­do por "e# &llen, un in­ge­nie­ro de soft­wa­re es­tu­dio y la ca­be­za de una start-up lla­ma­da de ca­ba­lle­te Tec­no­lo­gía , y es una ma­ne­ra muy fá­cil y ele­gan­te pa­ra crear una API con R.

Es­to es fá­cil de con­fi­gu­rar lo­cal­men­te. Ins­ta­lar el pa­que­te con ins­tall. pac­ka­ges(“plum­ber”), y lue­go agre­gue el có­di­go si­guien­te en la lí­nea di­rec­ta­men­te so­bre el ini­cio de su fun­ción: #* @get /stock­quo­te.

La fun­ción ne­wGe­tQuo­te aho­ra se ve así:

El #*es un co­men­ta­rio fon­ta­ne­ro es­pe­cial pa­ra ac­ti­var la fun­ción

Al­gu­nas de las fun­cio­nes en R que im­por­tan fá­cil­men­te da­tos so­bre fi­nan­zas, in­for­ma­ción me­teo­ro­ló­gi­ca, in­for­ma­ción gu­ber­na­men­tal y mu­cho más, con so­lo agre­gar co­man­dos per­so­na­li­za­dos de ba­rra.

en un pun­to fi­nal de la &PZ. \get­sig­ni­fi­ca que de­be ser una so­li­ci­tud HTTP GET pa­ra la lec­tu­ra de da­tos.

Fon­ta­ne­ro tam­bién es com­pa­ti­ble con @post, @ put \de­le­te. 'l ^sto­c_­quo­te­des­pués \ge­tes­pe­ci­fi­ca cuál es el ca­mino de la API de­be res­pon­der. Uti­li­zan­do stock­quo­te­me­dios que el for­ma­to de URL de la API se­rá http://www.myurl.com/stock­quo­te. La ca­de­na de ca­rac­te­res des­pués de que el /po­dría ha­ber si­do Stoc­kP­ri­ce, my­quo­tes o cual­quier otra co­sa.

Sal­vo que co­mo un ar­chi­vo R. (Lla­mé a la mi­na stock­fun­ction.R, pe­ro pue­de que el nom­bre na­da).

Un se­gun­do ar­chi­vo R de­be con­te­ner có­di­go pa­ra po­ner en mar­cha un ser­vi­dor fon­ta­ne­ro y eje­cu­te el ar­chi­vo stock­fun­ction.R (o lo que se lla­ma el ar­chi­vo con la fun­ción que desea API-ize). Es­te se­gun­do ar­chi­vo se car­ga la bi­blio­te­ca fon­ta­ne­ro, fon­ta­ne­ro crea un ob­je­to a par­tir del có­di­go stock­fun­ction.R con la fun­ción de plo­ma­da (), y es­ta­ble­ce el puer­to que el ser­vi­dor va a es­cu­char. Ese có­di­go es el si­guien­te:

Si se eje­cu­ta to­do el có­di­go en es­te se­gun­do ar­chi­vo, que lla­mo my­ser­ver.R, y lue­go ir a la URL http://lo­cal­host:8000/ stock­quo­te?thesym­bol=MSFTen un na­ve­ga­dor, de­be­ría ver el pre­cio de las ac­cio­nes en su na­ve­ga­dor.

Pa­so 3: Alo­jar la API R re­mo­ta­men­te

Hay va­rias ma­ne­ras pa­ra al­ber­gar la API, ya que hay pa­ra cual­quier apli­ca­ción ba­sa­da en la web: Agre­gar a un ser­vi­dor in­terno exis­ten­te, su­bir­lo a un ser­vi­dor ex­terno de su or­ga­ni­za­ción, uti­li­ce un ser­vi­cio en la nu­be con o sin una má­qui­na vir­tual, o uti­li­zar un tra­di­cio­nal alo­ja­mien­to web. No pue­de cu­brir a to­dos, pe­ro los fun­da­men­tos son bas­tan­te si­mi­la­res (a me­nos que es­té usan­do un ser­vi­cio de alo­ja­mien­to web en la que no tie­ne ac­ce­so de root a la má­qui­na; en ese ca­so, pue­den ser ne­ce­sa­rios ajus­tes adi­cio­na­les). Ten­ga en cuen­ta que si desea im­ple­men­tar es­to co­mo una apli­ca­ción aco­pla­ble, hay una ima­gen aco­pla­ble pa­ra el pa­que­te R fon­ta­ne­ro.

Una de las ma­ne­ras más fá­ci­les pa­ra aco­ger es­te es ex­ter­na­men­te con Océano Di­gi­tal . La con­fi­gu­ra­ción es sen­ci­lla, y se pue­de uti­li­zar el más pe­que­ño “go­ti­ta” en $ 5 / mes.

In­ge­nie­ro de soft­wa­re y con­sul­tor R Dean At­ta­li tie­ne ex­ce­len­tes ins­truc­cio­nes pa­so a pa­so so­bre có­mo con­fi­gu­rar en el Ocean di­gi­tal. e es­bo a más de lo que ne­ce­si­ta pa­ra es­te pro­yec­to, ya que su ob­je­ti­vo es po­ner en mar­cha con el mar­co R Bri­llan­te Web (no es ne­ce­sa­rio pa­ra es­te pro­yec­to).

Le su­gie­ro que si­ga los pa­sos de At­ta­li 1 a 6:

1 - Re­gís­tre­se con di­gi­ta­lo­cean

2 - Crear un nue­vo go­ti­ta

3- In­gre­se a su nue­vo ser­vi­dor

4- Es­ta­ble­cer al­gu­nos con­cep­tos bá­si­cos de se­gu­ri­dad y au­ten­ti­ca­ción

5- Ac­ce­der a su go­ta des­de un na­ve­ga­dor

6- Ins­ta­lar R y pa­que­tes ne­ce­sa­rios - no se ol­vi­de de ins­ta­lar plo­me­ro y quant­mod, pe­ro no es ne­ce­sa­rio dev­tools o shinyjs, que apa­re­cen en las ins­truc­cio­nes del At­ta­li, a me­nos que ellos quie­ren.

Es po­si­ble que desee ir al pa­so 7 e ins­ta­lar su pro­pia ver­sión nu­be de rs­tu­dio Ser­ver, si us­ted pre­fie­re que al tra­ba­jar en un en­torno de lí­nea de co­man­dos tí­pi­ca R. De­fi­ni­ti­va­men­te no se ne­ce­si­ta un ser­vi­dor bri­llan­te pa­ra es­te pro­yec­to Slack.

Una vez que ten­ga su ser­vi­dor Océano di­gi­tal, crear un di­rec­to­rio de apli­ca­ción pa­ra los dos ar­chi­vos R de la apli­ca­ción y su­bir­los al ser­vi­dor. Por fin, se pue­de po­ner a prue­ba su API.

Eje­cu­te el ar­chi­vo my­ser­ver.R con Rs­cript my­ser­ver.Rla lí­nea de co­man­dos de su go­ta, mien­tras que en el di­rec­to­rio de apli­ca­ción. De­be­ría ver un men­sa­je de “ser­vi­dor par­tir de es­cu­char en el puer­to 8000” (o lo que sea puer­to que eli­gió).

La di­rec­ción URL de su API se ve­rá al­go co­mo http://xxx.xxx. xxx.xxx:8000/stockq uo­te?thesym­bol=ST OCKSYMBOL (con xxx.xxx.xxx.xxx es la di­rec­ción IP de su go­ti­tas). Pa­ra pro­bar la API, abra un na­ve­ga­dor y di­ri­gir­se a http: // your.dro­plet.ip.ad­dress: puer­to / API­path thesym­bol = MSFT y us­ted de­be ob­te­ner al­go co­mo [el “pre­cio pa­ra MSFT es $ 64.49 a par­tir del 17/02/2017 12:34:00” ] a cam­bio. API­path que es lo que se con­fi­gu­ra con el #* @get en la pri­me­ra lí­nea de su ar­chi­vo fun­ción R. Es no el nom­bre del di­rec­to­rio de apli­ca­ción en el ser­vi­dor.

Aho­ra que sa­bes la API es­tá tra­ba­jan­do, de­te­ner ese ser­vi­dor ma­nual con Ctrl-C y la ca­be­za con las ins­truc­cio­nes del ca­ba­lle­te en for­ma de web host una apli­ca­ción de fon­ta­ne­ro. Ya de­be ha­ber ins­ta­la­do R si­guien­do At­ta­li de Có­mo ob­te­ner su pro­pio ser­vi­dor y el ser­vi­dor rs­tu­dio bri-

llan­te con di­gi­ta­lo­cean pues­to, por lo que los pa­sos res­tan­tes son los si­guien­tes:

Ins­ta­lar el mar­co No­de.js Ja­vaS­cript

Ins­ta­lar NPM (el ges­tor de pa­que­tes No­de.js)

Ins­ta­lar PM2 (un ges­tor de pro­ce­sos pa­ra No­de.js)

Crear un ar­chi­vo de script ter­cer R PM2 que se pue­de eje­cu­tar

Re­gis­tre el ser­vi­dor fon­ta­ne­ro con PM2

 nfi urar X‚ƒ pa­ra que se eje­cu­te el ser­vi­dor en el arran­que

Afor­tu­na­da­men­te, la ma­yo­ría de es­tas ta­reas re­quie­ren só­lo una o dos lí­neas de có­di­go, y to­dos son ex­pli­ca­dos en ! r a de „e …an­fi­tri n de una apli­ca­ción de fon­ta­ne­ro. Si tie­ne di­fi­cul­ta­des pa­ra ins­ta­lar en su PM2 go­ta Ubun­tu, in­ten­te ins­ta­lar no­do le­ga­do con su­do apt ins­tall no­dejs-le­gacyy lue­go ins­ta­lar PM2 con su­do npm ins­tall -g pm.

Si us­ted se pre­gun­ta por qué ne­ce­si­ta el mar­co No­de.js Ja­vaS­cript pa­ra eje­cu­tar un ser­vi­dor R, la res­pues­ta es: Pa­ra te­ner ac­ce­so al ges­tor de pro­ce­sos PM2 del No­do. Co­mo Allen ex­pli­ca en la do­cu­men­ta­ción del fon­ta­ne­ro, bá­si­ca R fue di­se­ña­do pa­ra un so­lo usua­rio a la vez, pe­ro su API po­dría te­ner que ma­ne­jar múl­ti­ples se­sio­nes a la vez. Ge­ren­tes de pro­ce­sos ta­les co­mo PM2 de no­do o de Ruby de pa­sa­je­ros Phu­sion pue­den per­mi­tir R (y otras pla­ta­for­mas) pa­ra ha­cer es­to.

Ese ar­chi­vo ter­cer guión, que lla­ma­ré a my­ser­ver.R ad­mi­nis­tra­da, de­be ser al­go co­mo:

‘my­ser­ver.R’en la lí­nea 2 de­be ser lo ha asig­na­do el nom­bre de ar­chi­vos del ser­vi­dor fon­ta­ne­ro. El puer­to en la lí­nea 3 pue­de ser cual­quier puer­to que es­tá dis­po­ni­ble pa­ra su apli­ca­ción. (Si es­tá uti­li­zan­do un ser­vi­cio de alo­ja­mien­to com­par­ti­do, co­mo Web­fac­tion, su apli­ca­ción só­lo pue­de te­ner un puer­to dis­po­ni­ble, ase­gú­re­se de que sa­be lo que es eso.)

Sube ese ar­chi­vo en el di­rec­to­rio de apli­ca­ción de la go­ti­ta y ase­gu­rar­se de que es eje­cu­ta­ble - en otras pa­la­bras, que tie­ne el de­re­cho de los per­mi­sos de Unix. Us­ted pue­de ha­cer es­to me­dian­te la eje­cu­ción del co­man­do ch­mod 755 run-my­ser­ver.R, mien­tras que en el di­rec­to­rio de apli­ca­ción.

Si ha se­gui­do las ins­truc­cio­nes de Allen pa­ra re­gis­trar el ar­chi­vomy­ser­ver.R co­rrer con PM2 usan­do pm2 start --in­ter­pre­ter=”Rs­cript” /path/to/run-my­ser- ver.Ry pm2 sa­ve, el ser­vi­dor de­be se­guir fun­cio­nan­do. Ten­ga en cuen­ta que no se pue­de eje­cu­tar ma­nual­men­te el ar­chi­vo my­ser­ver.R con Rs­cript my­ser­ver.

Si ha se­gui­do las ins­truc­cio­nes de Allen pa­ra re­gis­trar el ar­chi­vo-my­ser­ver.R co­rrer con PM2 usan­do pm2 start --in­ter­pre­ter=”Rs­cript” /path/to/runmy­ser­ver.Ry pm2 sa­ve, el ser­vi­dor de­be se­guir fun­cio­nan­do.

Rmás si PM2 se es­tá eje­cu­tan­do el ser­vi­dor, ya que só­lo un ser­vi­cio pue­de eje­cu­tar­se en el puer­to a la vez.

Voi­la! Us­ted ha con­ver­ti­do al­go de có­di­go R en una API a dis­po­si­ción del pú­bli­co. Hay só­lo unos po­cos más ajus­tes pa­ra que fun­cio­ne co­mo un bot Slack ade­más de una ma­ne­ra de ase­gu­rar­se de que só­lo el ca­nal de Slack lo uti­li­za.

La ma­yo­ría de es­tas ta­reas re­quie­ren só­lo una o dos lí­neas de có­di­go, y to­dos son ex­pli­ca­dos en for­ma de web-an­fi­trión de una apli­ca­ción de fon­ta­ne­ro. Hay só­lo unos po­cos más ajus­tes pa­ra que fun­cio­ne co­mo un bot Slack - ade­más de una ma­ne­ra de ase­gu­rar­se de que só­lo el ca­nal de Slack lo uti­li­za.

Un se­gun­do ar­chi­vo R de­be con­te­ner có­di­go pa­ra po­ner en mar­cha un ser­vi­dor fon­ta­ne­ro y eje­cu­te el ar­chi­vo stock­fun­ction.R

Newspapers in Spanish

Newspapers from El Salvador

© PressReader. All rights reserved.