cobwebfx/betfair-exchange

Betfair 交易所 API 包装器

1.2 2018-09-06 16:51 UTC

README

SensioLabsInsight Scrutinizer Code Quality License

介绍

这是一个对 Betfair 交易所 API 的简单包装。其主要作用是简化 Betfair 会话的启动和维护。它要求您了解 Betfair API 接受的请求以及每个请求使用的参数。这些可以在 Betfair 开发者网站 上找到。一开始可能会有些令人畏惧,但使用一段时间后,底层结构就会变得清晰。

如果您不喜欢这个,那么您可能想考虑 Daniel D'Angeli 的完整包Dan Cotora 的非常轻量级的包装器

安装

在命令行运行

composer require petercoles/betfair-exchange

使用方法

单个进程的身份验证(简单)

目前,该包仅针对英国交易所进行了测试。大多数方法现在已经就绪,但订单放置等功能仍需测试。

您需要一个 Betfair 开发者账户 以及该交易所的 APP_KEY - 这不需要费用,或确实用于个人用途的 API。

每个 Betfair 请求都以对包的子系统之一的一个静态调用开始。有三个这样的子系统:“auth”,“account”和“betting”。

所有请求都需要您登录到 Betfair 交易所,否则它不会与您通信。因此,您的第一个调用始终是

Betfair::init(string <app-key>, string <username>, string <password>);

在第一次调用中,它将存储您的 APP_KEY,然后登录并检索一个 SESSION_TOKEN,最后存储该令牌。应用密钥和会话令牌将用于验证所有后续请求。在每次请求组之前调用 init() 是安全且推荐的,如果已经有活跃的会话,它将简单地扩展此会话而不是再次登录。

身份验证信息仅在当前进程(即网页请求或 CLI 命令)完成时存在,但在该请求中您可以尝试尽可能多的 Betfair 访问。

多个进程的身份验证(推荐)

为了在多个请求之间共享身份验证凭据,例如,避免在每次 AJAX 请求上登录的需要,该包提供了以下选项

string Betfair::auth()->persist(string <app-key>, string <session-token>);
string Betfair::auth()->login(string <app-key>, string <username>, string <password>);

这假设您正在将凭据存储在 PHP 会话、缓存或数据库中,实际上是在任何可以由请求访问并将其作为参数传递给此方法的任何地方。

这种方法的一个有效方法是

// retreive Betfair session token from cache and if it doesn't exist ...
// ... login and get one and save it to the cache
if (!($token = Cache::get('betfairToken'))) {
    $token = Betfair::auth()->login(
        config('betfair.app-key'), config('betfair.username'), config('betfair.password')
    );
    Cache::put('betfairToken', $token, \PeterColes\Betfair\Api\Auth::SESSION_LENGTH);
}

// Persist the application key and session token, which means make them class variables
// in a singleton class and therefore available for the life of the script.
Betfair::auth()->persist(config('betfair.app-key'), $token);

(此示例使用 Laravel 的缓存和配置功能 - 用适合您应用程序的方法替换)。

如果收到 null 会话令牌,则包不会向 Betfair 发出调用。相反,它会立即抛出一个异常,该异常可以捕获(如上例所示)以登录并获得可以持久化以供后续请求使用的令牌。这对于第一次请求或令牌可能已过期的后续请求可能很有用。

还有三种其他身份验证方法可用,尽管您可能不需要使用它们

. logout();
. keepAlive();
. sessionremaining();

如果您正在手动管理您的Betfair会话,可以使用心跳方法来延长您的Betfair会话,尽管上面描述的持久化方法是更好的解决方案。英国交易所的Betfair会话目前为4小时。

获取数据

一旦认证,可以从投注子系统获取投注信息。所有调用都具有相同的结构

Betfair::betting(string <name-of-method>, array <params-for-method>);

可用的方法和它们的参数(强制或可选)定义在Betfair API文档中。

账户API调用遵循相同的模式

Betfair::account(string <name-of-method>, array <params-for-method>);

示例

为了使其变得真实,这里有一个简单的示例,我们将首先初始化与API的连接,然后请求意大利意甲足球联赛中列出的所有当前事件的列表

Betfair::init('BetfairAppKeyHere', 'you@example.com', 'your-password');
$events = Betfair::betting('listEvents', ['filter' => ['textQuery' => 'Serie A']]);

测试

此包附带两个测试套件(至少将这样做)。"单元"测试套件(当编写时)模拟http活动(即不会击中Betfair服务器),然而"集成"测试套件将测试连接性和请求的可接受性,因此需要有效的凭证。

本包不提供测试用的有效Betfair账户!因此要运行测试,请将phpunit.xml.dist重命名为phpunit.xml,并编辑它以添加您的Betfair、应用程序密钥、用户名和密码。

运行测试套件

phpunit --testsuite=unit (not yet available)
phpunit --testsuite=integration

建议您仅通过测试套件运行测试,因为一些测试故意被排除,以避免意外放置订单或资金转移。

问题

此包是为满足特定需求而开发的,然后推广到更广泛的使用。如果您有一个当前未满足的使用案例,或看到似乎不正常工作的事情,请在github仓库中提出问题。

许可证

此包根据MIT许可证授权。