使用Connect Bridge的Python脚本访问Trello API。

Ondrej Papiernik 技术方面 1评论

渴望用Python脚本快速访问Trello API,而不需要学习Trello API?请阅读本教程,了解使用Connect Bridge是多么简单。

Trello API Python - 介绍

每次需要访问API时,没有人喜欢学习冗长复杂的API文档。本文介绍了如何通过Python(在3.3版本中已经尝试过)语言脚本来访问Trello API,而不需要任何关于Trello API的专业知识。在本教程中,你需要使用集成平台Connect Bridge来允许通过Trello API使用简单的SQL语句进行数据通信。数据传输是通过ODBC层进行的。我已经在Python中使用pyodbc模块ver.3.0.7x64实现了这一点。3.0.7 x64

什么是 "Connect Bridge"?

Connect Bridge 是一个集成平台,允许通过ODBC、JDBC驱动和Web服务与超过31个连接器(包括Trello)连接任何软件。开发人员可以用任何编程语言访问这些连接器,而不需要具备目标系统的专业知识,基本上在几分钟内就可以完成。最重要的是,你不仅可以使用该工具通过Python访问Trello API,你还可以从MS Exchange、MS Dynamics CRM、MS SharePoint和更多系统中抓取/输入数据。

先决条件

现在让我们通过简单的Python脚本的开发过程,通过几个简单的步骤,使用Connect Bridge通过ODBC驱动访问Trello API。

  1. 安装Connect Bridge(你可以在这里得到 免费试用)
  2. 安装 适用于Windows的Python 3.3+版本3.3+
  3. 安装 pyodbc模块 3.0.7+ (我曾用过的是 pyodbc-3.0.7.win-amd64-py3.3.exe)
  4. 为了让我的脚本的编写、运行和调试更容易,我使用了 日食 Luna与 pydev 插件
  5. 在Connect Bridge中为Trello设置账户(见下段)。

Connect Bridge设置

安装Connect Bridge后,可以看到三个应用。

  • CB服务控制器 - 用于启动和停止Connect Bridge。
  • CB管理工具--在这里您可以设置您的账户以连接到目标系统。
  • CB查询分析器--该工具用于目标系统数据库Schema的可视化,您可以在这里轻松地尝试查询。

那么让我们为Trello创建你的账户吧。打开管理工具,在账户部分创建新账户,在连接器组合框中选择CBTrelloConnector,然后点击认证向导。

在这里你只需填写你的用户名和密码,并允许访问你的Trello。

那么只要保存好,我们的账户就有了。
现在我们可以使用CB Query Analyzer工具来可视化模式。我们需要添加新的连接,如下图所示。

为了从python脚本连接,我们将需要一个连接字符串到这个账户。

要想知道我们的连接字符串,我们只需右击Trello连接,然后点击 "编辑连接",在连接编辑器中选择 "高级 "选项卡,从文本框中复制 "连接字符串 "的值。(见下图)

手把手教你写脚本!

核心同时也是我的解决方案中唯一的文件是CBQuery.py。请在下面找到源代码。

 #!/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) 持有ODBC连接字符串,我们将其传递给pyodbc模块,以创建一个ODBC连接,存储在conn变量中。
  • 下一步,我们使用存储在conn中的连接打开一个数据库游标。
  • 然后我们执行通过命令行参数query传递的SQL查询
  • 最后,我们使用一个while循环逐行读取游标的结果,当cursor.fetchone返回None时,我们中断这个循环
  • 如果在ODBC获取过程中出现异常,我们也会中断循环,并将问题打印出来输出
  • 如果fetchone方法成功并返回一个数据行,我们将把原始数据行打印到输出端进行演示(......可以是任何类型的输出......我们可以格式化为xml或json,csv......或任何类型的数据交换格式),或者干脆使用原始数据行对象来进一步的代码逻辑来执行自定义任务。

运行CBQuery.py脚本

我已经使用Windows PowerShell测试了我的脚本,但你可以运行任何其他你喜欢使用的shell。

我们知道,我们的CBQuery.py接受两个定位命令行参数 "connstr "和 "query"。

我们可以看到,模式中包含了一个名为 "list "的 "表",所以我们可以将查询构造为SELECT * FROM list LIMIT 10来选择Trello列表中的前10个条目,通过运行查询,我们可以在下图中看到,查询在输出中返回了10行。

现在我们可以尝试创建新的Trello卡到第一个 "空白 "列表。我们将使用它的查询。

INSERT INTO Card (name, idlist) VALUES ('New card', '565c0d32c75039b07e86b0b3')

您可以在Trello中看到新的卡片已经成功创建。

限制因素

到目前为止,我只能在Windows操作系统上使用Connect Bridge工具,因为Connecting Software没有提供任何ODBC Linux客户端库(如果这是可能的话)。所以一定要在Windows机器上玩你的Python脚本。

结论

我们已经证明,使用Connect Bridge集成工具,在Python中访问Trello API可以非常容易。而Trello只是Connect Bridge可以集成的众多系统中的一个。想象一下,你可以安全地访问主要软件和服务的API,如Dynamics CRM, NAV, AX, Salesforce, Exchange和更多。如果你有兴趣不再浪费你的时间去学习数百个API文档页,每次你遇到新的目标系统。 询问免费试用,价格和任何其他问题。.

干杯。
Ondrej

评论 1

  1. Amazingly Great job。这两点涵盖得很好:"Connect Bridge设置 "和 "约束"。感谢分享这个主题 "使用Connect Bridge的Python脚本访问Trello API"。最棒的是,文章中有所有实用的细节!继续分享。继续分享。

发表评论

电子邮件地址不会被公开。 必填项已用*标注