Categorías
Python

Python, Ruby y Golang: Servicio de una aplicación web Comparación

 

Tabla de Contenidos

  • herramientas que necesitaremos
  • la holgura Web API
  • Slack API Fundamentos
  • envío de mensajes
  • recibir mensajes
  • envolviéndolo

La mancha alojada Una mala aplicación de chat está de moda este año. la adopción de la herramienta no es bombo vacío – es increíblemente útil para la comunicación con y aprender de colegas desarrolladores. Por ejemplo, las comunidades de desarrolladores de software tales como DC Python, Dallas-Forth Worth Devs, y Denver Devs establecieron sus propios canales de tensión.

Sin embargo, la holgura no sería tan útil si era sólo un glorificado AOL Instant Messenger. Es el acceso mediante programación para recuperar y enviar mensajes con la interfaz de programación de aplicaciones Slack web (API), donde el poder realmente entra en.

En este post, vamos a ver cómo trabajar con holgura a través de la API y el funcionario SlackClient Python una biblioteca de ayuda. Nos va a agarrar un acceso a la API token y escribir código Python a la lista, recuperar y enviar datos a través de la API. excavación Vamos ahora! Bono

gratuito: Haga clic aquí para obtener acceso a un tutorial de vídeo libres Frasco + Python que muestra cómo construir aplicación web Frasco, paso a paso.

Este es un invitado del blog de Matt Makai, desarrollador Evangelista en Twilio y autor de Full Stack Python.

herramientas que necesitaremos

Varias herramientas se utilizarán para ejecutar el código en esta entrada del blog, incluyendo:

  • Una cuenta de holgura libre con un equipo en el que tiene acceso a la API o se inscribe para el Hangout Slack desarrollador de cualquier equipo
  • Python 2 o 3 biblioteca de códigos slackclient
  • Python Oficial construido por el equipo Slack
  • las pruebas API Slack símbolo
  • Frasco web de micro-marco; Si no está familiarizado con ella, echa un vistazo a la pitón real supuesto, la serie Frasco por ejemplo, o en la página Frasco de Full Stack Python

También es útil tener la holgura docs API abierta para la referencia. Puede seguir junto al escribir el código en este post, o clonar el repositorio GitHub compañero con el proyecto terminado.

ahora que sabemos lo que las herramientas que necesitamos para el uso, vamos a empezar por la creación de un nuevo virtualenv para aislar nuestras dependencias de la aplicación de otros proyectos de Python que está trabajando:

$ mkdir slackapi
$ virtualenv venv

Activar el virtualenv:

$ source venv/bin/activate

Dependiendo de cómo el virtualenv y Shell están configurados, su pronta ahora debería ser algo como esto:

(venv)$

Mantenga la concha abierta por ahora ya tenemos nuestro acceso Slack establece a través de la biblioteca de ayuda API slackclient oficial construido por Slack.

También hay otras bibliotecas fantásticas ayudante de Python creados por la comunidad. Para simplificar, sólo vamos a instalar y utilizar slackclient, pero también se puede probar bibliotecas como más flojo, flojo y pyslack vez que hemos terminado aquí.

Instalar la biblioteca de ayuda slackclient en su virtualenv con pip:

$ pip install slackclient==1.0.0

Ahora que tenemos instalada la biblioteca de ayuda, necesitamos obtener un acceso Slack de símbolo para nuestro equipo y su cuenta.

la holgura Web API

Cara a la página de destino para la API de Web Slack:

Una vez que haya iniciado sesión puede desplazarse hacia abajo en la página web de la API, donde encontrarás un botón para generar señales de prueba :

Generar un token de prueba para un equipo Slack en el que tenga privilegios administrativos. Este token servirá bien para nuestros propósitos de desarrollo en esta entrada del blog, pero también se puede crear un flujo de OAuth que otros usuarios pueden generar tokens de autenticación a través de sus propias cuentas.

Necesitaremos esa prueba de ficha en un momento, por lo que lo tenga a mano. Interruptor Vamos a nuestro entorno Python configurado de modo que podemos probar la API. Con su virtualenv todavía activo, el fuego de la REPL Python: Prueba de

(venv)$ python
Python 3.5.0 (v3.5.0:374f501f4567, Sep 12 2015, 11:00:19)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Let nuestra API token de una llamada de prueba; coloque el código siguiente en el símbolo del REPL:

>>> from slackclient import SlackClient
>>> slack_client = SlackClient('your test token here')
>>> slack_client.api_call("api.test")

de la réplica debe de vuelta de nuevo algo así como el diccionario siguiente si su prueba de API con el testigo fue un éxito:

{u'args': {u'token': u'xoxp-361113305843-7621238052-8691112296227-d0d4824abe'}, u'ok': True}

Si vuelvas {u’ok ‘: Falso, u’error ‘: u’invalid_auth’} haga doble comprobación de que ha copiado la holgura de token correctamente en la segunda línea introducida en el REPL.

Introduzca una prueba más rápida para nuestra autenticación con otra línea de código en el REPL:

>>> slack_client.api_call("auth.test")

Debería ver otro diccionario similar a éste:

{u'user_id': u'U0S77S29J', u'url': u'https://fullstackguides.slack.com/', u'team_id': u'T0S8V1ZQA', u'user': u'matt', u'team': u'Full Stack Guides, u'ok': True}

impresionante! Estamos autorizados a comenzar a utilizar la API de Slack través de nuestra cuenta. Ahora comienza la diversión como podemos empezar a obtener datos de programación de tensión y manejo de mensajes!

Slack API Fundamentos

Salir fuera de la REPL con un rápido Ctrl + D o comando exit (). De nuevo en la línea de comandos, exportar la holgura de token como una variable de entorno:

(venv)$ export SLACK_TOKEN='your slack token pasted here'

Vamos a enganchar la variable de entorno en el script Python usando el módulo os en lugar de codificar en el código fuente.

Sumérgete en su editor de texto favorito, como Vim, Emacs, o sublime texto para que podamos cortar un poco nuevo código Python. Crear un nuevo archivo llamado app.py y empezar a llenarlo con las siguientes importaciones:

import os
from slackclient import SlackClient

Una vez más, el módulo os será utilizado para tirar de la variable de entorno SLACK_TOKEN que acaba de exportar. La importación SlackClient será familiar, ya que es la misma línea que escribimos anteriormente en el REPL:

SLACK_TOKEN = os.environ.get('SLACK_TOKEN')

slack_client = SlackClient(SLACK_TOKEN)

En lo anterior dos líneas, que enganchar el valor de la variable de entorno SLACK_TOKEN y una instancia de la biblioteca SlackClient ayudante. A continuación vamos a crear una función para los canales de la lista a través de una llamada a la API. holgura vuelve atrás los resultados en un diccionario con dos llaves: ok y canales. ok nos permite saber si la llamada a la API se ha realizado correctamente, y si su valor es True canales contiene entonces los datos que necesitamos en la lista de canales.

def list_channels():
channels_call = slack_client.api_call("channels.list")
if channels_call.get('ok'):
return channels_call['channels']
return None

Por último, vamos a añadir una función principal la comodidad que nos permitirá imprimir todos los canales cuando invocamos el archivo Python con app.py pitón en la línea de comandos:

if __name__ == '__main__':
channels = list_channels()
if channels:
print("Channels: ")
for c in channels:
print(c['name'] + " (" + c['id'] + ")")
else:
print("Unable to authenticate.")

Eso es todo el código que necesitamos por el momento. Es hora de darle una oportunidad. Ejecutar el script desde la línea de comandos con app.py. pitón Usted verá una salida como la siguiente lista de canales:

Channels:
general (C0S82S5RS)
python (C0S8HABL3)
random (C0S8F4432)

¿Cuál es el ID de canal que imprimimos entre paréntesis al lado del nombre del canal para? API de holgura necesita una referencia única para los canales, por lo que utilizar el ID, no el nombre, como un identificador en lugar del nombre del canal legible.

Nos puede escribir código que utiliza el método de la API channel.info para obtener datos de un canal específico en función de su ID.

Añadir una nueva función, junto con algunas nuevas líneas en la salida principal para el último mensaje de cada canal, que sólo está disponible en la llamada de API más detallada channel.info.

código Actualizado:

import os
from slackclient import SlackClient

SLACK_TOKEN = os.environ.get('SLACK_TOKEN', None)

slack_client = SlackClient(SLACK_TOKEN)

def list_channels():
channels_call = slack_client.api_call("channels.list")
if channels_call['ok']:
return channels_call['channels']
return None

def channel_info(channel_id):
channel_info = slack_client.api_call("channels.info", channel=channel_id)
if channel_info:
return channel_info['channel']
return None

if __name__ == '__main__':
channels = list_channels()
if channels:
print("Channels: ")
for c in channels:
print(c['name'] + " (" + c['id'] + ")")
detailed_info = channel_info(c['id'])
if detailed_info:
print(detailed_info['latest']['text'])
else:
print("Unable to authenticate.")

Tenga en cuenta que con este código estamos aumentando en gran medida la API llama se ejecuta la secuencia de comandos, de uno a N + 1, donde N es el número de canales de vuelta detrás por Slack.

Ejecutar el nuevo guión de nuevo ejecutando pitón app.py:

Channels:
general (C0S82S5RS)
yada yada yada.
python (C0S8HABL3)
This is posted to #python and comes from a bot named webhookbot.
random (C0S8F4432)
<@U0SAEJ99T|samb> has joined the channel

Nice! Ahora tenemos tanto la lista de canales, así como una manera de obtener información detallada sobre cada canal con su ID. interactúan siguiente nos dejó con otros usuarios de uno de nuestros canales de envío y recepción de mensajes.

Envío de mensajes

Podemos ir aún más lejos en la API Slack ahora que sabemos que nuestras llamadas a la API están trabajando y tienen el ID del canal. Enviemos un mensaje al canal #general.

Añadir una nueva función bajo el nombre channel_info send_message:

def send_message(channel_id, message):
slack_client.api_call(
"chat.postMessage",
channel=channel_id,
text=message,
username='pythonbot',
icon_emoji=':robot_face:'
)

send_message toma en el ID para el canal, entonces se enviará un mensaje de nuestro “bot Python” a ese canal. Además, modificar la función principal de modo que cuando se ejecute este archivo, la principal llamará a nuestro nueva función send_message:

if __name__ == '__main__':
channels = list_channels()
if channels:
print("Channels: ")
for channel in channels:
print(channel['name'] + " (" + channel['id'] + ")")
detailed_info = channel_info(channel['id'])
if detailed_info:
print('Latest text from ' + channel['name'] + ":")
print(detailed_info['latest']['text'])
if channel['name'] == 'general':
send_message(channel['id'], "Hello " +
channel['name'] + "! It worked!")
print('-----')
else:
print("Unable to authenticate.")

guardar los cambios y ejecución pitón app.py. Abrir el canal #general para su equipo Slack. Debe ver a su bot Python enviar un nuevo mensaje al canal:

impresionante! Por lo que podemos enviar mensajes, pero ¿y si queremos ver lo que los usuarios en el canal #general que opinan?

recepción de mensajes

Podemos establecer un web hook saliente que alertará a nuestra aplicación Python a través de una petición HTTP POST. Esta parte es un poco más complicado que el envío de mensajes, porque tenemos que recibir una o más peticiones POST.

En primer lugar vamos a necesitar un servidor web sencillo que puede manejar una solicitud POST entrante desde la web hook Slack. Crear un nuevo archivo llamado receive.py con el siguiente código:

import os
from flask import Flask, request, Response

app = Flask(__name__)

SLACK_WEBHOOK_SECRET = os.environ.get('SLACK_WEBHOOK_SECRET')

@app.route('/slack', methods=['POST'])
def inbound():
if request.form.get('token') == SLACK_WEBHOOK_SECRET:
channel = request.form.get('channel_name')
username = request.form.get('user_name')
text = request.form.get('text')
inbound_message = username + " in " + channel + " says: " + text
print(inbound_message)
return Response(), 200

@app.route('/', methods=['GET'])
def test():
return Response('It works!')

if __name__ == "__main__":
app.run(debug=True)

En el anterior archivo de Python, que:

Install Frasco (PIP instalar frasco), y luego iniciar la aplicación Frasco con el comando python y receive.py vamos a ver alguna salida de depuración que indica el servidor de desarrollo se está ejecutando.

  • Correr en http://127.0.0.1:5000/ (Presione Ctrl + C para dejar de fumar)
  • reinicio con stat
  • depurador está activo!
  • depurador de código pin: 144-609-426

estamos listos para recibir nuestra solicitud web hook POST, excepto que la mayoría de los entornos de desarrollo no exponga rutas más allá de localhost. Necesitamos un túnel localhost que nos dará un nombre de dominio accesible desde el exterior, mientras que estamos desarrollando nuestro código. Me suelen utilizar ngrok ya que es fácil, libre y impresionante. También hay otras opciones, como localtunnel y hacia adelante.

Después de descargar y ejecutar ngrok (u otra herramienta de tunelización localhost) en una nueva ventana de terminal, obtendrá un subdominio que reenvía las solicitudes enviadas a ese subdominio a su servidor host local. Esto es lo que ngrok se ve como en la consola cuando se comenzó con la .
grok http 5.000 comando:

Vaya a la sección Configuración de la integración. Seleccione “#general” como el canal escuche. Copiar la URL Forwarding ngrok plus “/ holgura” en el cuadro de texto URL (s):

Copiar la emergencia generada. Desplazamiento hacia abajo y pulse el botón “Guardar configuración”.

Detener el servidor Frasco por un momento. Como hicimos antes con el token Slack, utilice el comando de exportación para exponer la web hook saliente token como una variable de entorno:

(venv)$ export SLACK_WEBHOOK_SECRET='generated outgoing webhook token here'

continuación, reinicie el servidor de frasco para que pueda agarrar el SLACK_WEBHOOK_SECRET generado. Por último, es el momento de poner a prueba la recepción de mensajes!

Ir a su canal #general Slack. Debería ver que la integración web hook saliente ha sido añadido al canal:

Dentro Slack, escriba un mensaje como “pruebas” y pulsa enter. Volver a la línea de comandos, donde su aplicación es Frasco running.You debería ver la salida del mensaje impreso de la solicitud POST:

matt in general says: testing
127.0.0.1 - - [21/May/2016 12:39:56] "POST /slack HTTP/1.1" 200 -

Ahora tenemos una manera de recibir mensajes de uno o más canales y podemos añadir lo que el código Python quieren manejar la entrada. Este es un gran gancho para la construcción de un robot o el envío de mensajes a otro servicio para procesar.

envolviéndolo

Woohoo! ¡Todo listo! Bueno, en realidad, no hay mucho más que puede hacer con la API Slack. Aquí hay varios más ideas para probar ahora que usted tiene los fundamentos abajo:

Bono gratuito: Haga clic aquí para obtener acceso a un tutorial de vídeo libres Frasco + Python que muestra cómo construir aplicación web Frasco, paso- Por paso.

Eso es todo por ahora.

Si tiene alguna pregunta no dude en pasar un comentario más abajo o póngase en contacto conmigo a través de:

  • Twitter: @mattmakai y @fullstackpython
  • GitHub: makaimc
  • Twitch (en vivo de codificación con Python y Swift): mattmakai

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *