petercokes/betfair-exchange

Betfair Exchange API包装器

1.3.2 2022-11-11 12:39 UTC

This package is auto-updated.

Last update: 2024-09-11 16:39:54 UTC


README

SensioLabsInsight Scrutinizer Code Quality License

简介

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

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

安装

在命令行运行

composer require petercoles/betfair-exchange

用法

单个进程认证(简单)

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

您需要有一个Betfair开发者账户,并且从该交易所获得了APP_KEY - 这不收取任何费用,或者实际上用于个人使用的API。

每个Betfair请求都以对包的子系统之一的静态调用开始。这里有三种: "auth"、"account" 和 "betting"。

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

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会话、缓存或数据库中,实际上是在任何可以由请求访问并将作为参数传递给此方法的地方。

一种有效的方法是

// retrieve 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许可证