petercokes / betfair-exchange
Betfair Exchange API包装器
Requires
- php: >=7.3
- guzzlehttp/guzzle: >=6.3.3
- tightenco/collect: >=5
Requires (Dev)
- mockery/mockery: ^1
- phpunit/phpunit: >=8
README
简介
这是一个针对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许可证。