Accedere alle API Trello utilizzando script Python con Connect Bridge

Ondrej Papiernik Tecnico 1 Commento

Volete accedere alle API Trello con gli script Python in modo rapido e senza la necessità di imparare le API Trello? Leggete questo tutorial e scoprite quanto è facile con Connect Bridge.

Trello API Python - Introduzione

A nessuno piace imparare una documentazione lunga e complicata per le API ogni volta che c'è la necessità di accedervi. Questo articolo descrive come accedere alle API di Trello via Python (hanno provato nella versione 3.3) script di linguaggio senza alcuna esperienza nelle API di Trello. Per questo tutorial avrete bisogno della piattaforma di integrazione Connect Bridge per consentire la comunicazione dei dati tramite l'API Trello utilizzando per lo più semplici istruzioni SQL. Il trasferimento dei dati avviene tramite il livello ODBC. Ho ottenuto questo risultato in Python utilizzando il modulo pyodbc ver. 3.0.7 x64

Che cos'è "Connect Bridge"?

Connect Bridge è una piattaforma di integrazione che permette di collegare qualsiasi software attraverso ODBC, driver JDBC e Web Services con più di 31 connettori (incluso Trello). Gli sviluppatori possono accedere a questi connettori in qualsiasi linguaggio di programmazione senza la necessità di avere una competenza nel sistema di destinazione, fondamentalmente in pochi minuti. Il fatto è che è possibile utilizzare lo strumento per accedere non solo alle API Trello via Python, ma anche per prelevare/pubblicare dati da/verso MS Exchange, MS Dynamics CRM, MS SharePoint e molti altri sistemi.

Prerequisiti

Ora passiamo al processo di sviluppo di un semplice script Python che accede alle API Trello utilizzando Connect Bridge tramite un driver ODBC in diversi semplici passi:

  1. Installare Connect Bridge (è possibile ottenere prova gratuita qui)
  2. Installare Pitone per finestre ver. 3.3+
  3. Installare modulo pyodbc 3.0.7+ (ho usato il pyodbc-3.0.7.win-amd64-py3.3.exe)
  4. Per facilitare la scrittura, l'esecuzione e il debug dei miei script, ho utilizzato Eclipse Luna con pydev plugin
  5. Conto di setup per Trello in Connect Bridge (vedi paragrafo sotto)

Configurazione Connect Bridge

Dopo l'installazione di Connect Bridge, si possono vedere tre applicazioni:

  • CB Service Controller - serve per l'avvio e l'arresto di Connect Bridge
  • CB Administration Tool - qui potete impostare i vostri account per il collegamento al sistema di destinazione
  • CB Query Analyzer - questo strumento serve per la visualizzazione del database del sistema di destinazione Schema e potete provare qui le vostre query facilmente

Quindi creiamo il tuo account per Trello. Aprite Administration Tool e nella sezione Account create un nuovo account, nella combobox dei connettori selezionate CBTrelloConnector e cliccate su Authentication Wizard.

Qui è sufficiente inserire il proprio nome utente e la password e consentire l'accesso al proprio Trello.

Poi basta salvarlo e abbiamo il nostro conto.
Ora possiamo usare lo strumento CB Query Analyzer per visualizzare lo schema. Dobbiamo aggiungere una nuova connessione come descritto nell'immagine sottostante.

Per la connessione da script python avremo bisogno di una stringa di connessione a questo account.

Per conoscere la nostra stringa di connessione possiamo semplicemente cliccare con il tasto destro del mouse sulla connessione Trello e poi cliccare su "Modifica connessione", nell'editor di connessione scegliere la scheda "Avanzate" e copiare il valore dalla casella di testo "Stringa di connessione". (Vedi immagini sotto)

Mani sullo scripting!

Il nucleo e allo stesso tempo l'unico file della mia soluzione è CBQuery.py. Trovate il codice sorgente qui sotto.

 #!/usr/local/bin/python2.7
# encoding: utf-8
'''
CBQuery2 -- query data from, write data to SharePoint, Dynamics CRM, Exchange
CBQuery2 is a script that allows to run SQL queries via Connect Bridge ODBC driver

@author:     Michal Hainc
@copyright:  2014
@license:    Apache 2.0

@contact:    michalhainc@gmail.com
@deffield    updated: 18.8.2014
'''

import sys
import os
import pyodbc

from argparse import ArgumentParser
from argparse import RawDescriptionHelpFormatter

__all__ = []
__version__ = 0.1
__date__ = '2014-08-15'
__updated__ = '2014-08-15'

DEBUG = 1
TESTRUN = 0
PROFILE = 0

class CLIError(Exception):
    '''Generic exception to raise and log different fatal errors.'''
    def __init__(self, msg):
        super(CLIError).__init__(type(self))
        self.msg = "E: %s" % msg
    def __str__(self):
        return self.msg
    def __unicode__(self):
        return self.msg

def main(argv=None): # IGNORE:C0111
    '''Command line options.'''

    if argv is None:
        argv = sys.argv
    else:
        sys.argv.extend(argv)

    program_name = os.path.basename(sys.argv[0])
    program_version = "v%s" % __version__
    program_build_date = str(__updated__)
    program_version_message = '%%(prog)s %s (%s)' % (program_version, program_build_date)
    program_shortdesc = __import__('__main__').__doc__.split("n")[1]
    program_license = '''%s

  Created by Michal Hainc on %s.

  Licensed under the Apache License 2.0
  http://www.apache.org/licenses/LICENSE-2.0

  Distributed on an "AS IS" basis without warranties
  or conditions of any kind, either express or implied.

USAGE
''' % (program_shortdesc, str(__date__))

    try:
        # Setup argument parser
        parser = ArgumentParser(description=program_license, formatter_class=RawDescriptionHelpFormatter)
        parser.add_argument('connstr')        
        parser.add_argument('query')
        
        # Process arguments
        args = parser.parse_args()

        query = args.query
        connstr = args.connstr

        conn = pyodbc.connect(connstr)
        cursor = conn.cursor()
        cursor.execute(query)
        while 1:
            row = None
            try:
                row = cursor.fetchone()
            except: 
                print(sys.exc_info()[1])
                break
            if not row:
                break                    
            print(row)
                        
            
    except KeyboardInterrupt:
        ### handle keyboard interrupt ###
        return 0
    except:
        print(sys.exc_info()[1])
        #indent = len(program_name) * " "        
        #sys.stderr.write(program_name + ": " + repr(e) + "n")
        #sys.stderr.write(indent + "  for help use --help")
        return 2

if __name__ == "__main__":
         
    if TESTRUN:
        import doctest
        doctest.testmod()
    if PROFILE:
        import cProfile
        import pstats
        profile_filename = 'CBQuery2_profile.txt'
        cProfile.run('main()', profile_filename)
        statsfile = open("profile_stats.txt", "wb")
        p = pstats.Stats(profile_filename, stream=statsfile)
        stats = p.strip_dirs().sort_stats('cumulative')
        stats.print_stats()
        statsfile.close()
        sys.exit(0)
    sys.exit(main())
  • connstr (Connection string) contiene la stringa di connessione ODBC che passiamo nel modulo pyodbc per creare una connessione ODBC memorizzata nella variabile conn
  • come passo successivo apriamo un cursore di database utilizzando la connessione memorizzata in conn
  • poi eseguiamo la query SQL passata attraverso il parametro della riga di comando denominato query
  • come ultima cosa usiamo un while loop per leggere i risultati del cursore riga per riga, quando il cursore.fetchone ritorna Nessuno, rompiamo il loop
  • se si verifica un'eccezione durante il fetch ODBC, rompiamo anche il loop e stampiamo il problema in uscita
  • se il metodo del fetchone procede e restituisce una riga di dati, stamperemo la riga di dati grezzi all'output a scopo dimostrativo (... potrebbe essere qualsiasi tipo di output... potremmo formattare come xml o json, csv... o qualsiasi tipo di formato di scambio di dati) o semplicemente usare l'oggetto riga di dati grezzi da usare in ulteriore logica di codice per eseguire compiti personalizzati

Esecuzione dello script CBQuery.py

Ho testato il mio script utilizzando il PowerShell di Windows, ma è possibile eseguire qualsiasi altra shell...

Sappiamo che il nostro CBQuery.py accetta due argomenti a riga di comando posizionale, il "connstr" e la "query".

Possiamo vedere che lo schema contiene una "tabella" chiamata "lista" in modo da poter costruire la nostra query come SELECT * FROM list LIMIT 10 per selezionare le prime 10 voci dalla lista Trello, ed eseguendo la query come possiamo vedere nella nostra immagine qui sotto che la query ha restituito 10 righe nell'output.

Ora possiamo provare a creare una nuova Trello Card nella prima lista 'Blank'. La useremo per la query:

INSERIRE NELLA TESSERA (nome, idlist) VALORI ('Nuova tessera', '565c0d32c75039b07e86b0b3')

Potete vedere in Trello che la nuova carta è stata creata con successo

Vincoli

Finora sono stato in grado di utilizzare lo strumento Connect Bridge solo da sistemi operativi Windows, a causa del fatto che Connecting Software non ha fornito alcuna libreria client ODBC Linux (se questo è possibile). Quindi assicuratevi di giocare con i vostri script Python su una macchina Windows.

Conclusione

Abbiamo dimostrato che l'accesso alle API Trello in Python può essere davvero facile utilizzando lo strumento di integrazione Connect Bridge. E Trello è solo un sistema tra tanti altri che Connect Bridge rende possibile l'integrazione. Immaginate di poter accedere in modo sicuro alle API dei principali software e servizi come Dynamics CRM, NAV, AX, Salesforce, Exchange e molti altri. Se siete interessati a smettere di sprecare il vostro tempo imparando centinaia di pagine di documentazione API ogni volta che vi imbattete in un nuovo sistema di destinazione, Chiedi una prova gratuita, i prezzi ed eventuali domande aggiuntive.

Salute,
Ondrej

Commenti 1

  1. Incredibilmente ottimo lavoro. Questi due punti sono ben coperti; "Connect Bridge setup " e " Constraints". Grazie per aver condiviso questo argomento "Accesso alle API Trello utilizzando script Python con Connect Bridge". La parte migliore è che l'articolo ha tutti i dettagli pratici! Continuate a condividere.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.