webmarketingroi / optimizely-php
Optimizely REST API 的 PHP 封装
Requires
- php: >=5.3
- ext-curl: *
Requires (Dev)
- phpunit/phpunit: ^4.0
This package is not auto-updated.
Last update: 2024-09-28 19:58:16 UTC
README
Optimizely REST API v2.0(《https://developers.optimizely.com/rest/v2/》)的 PHP 封装库,由 Optimizely 解决方案合作伙伴 Web Marketing ROI 堂堂创建并开源。
安装
此库需要至少 PHP 5.6 版本,且已安装 curl
扩展。
使用 Composer 安装
php composer.phar require webmarketingroi/optimizely-php
上述命令将安装最新稳定版本。或者,如果您更喜欢前沿版本,可以使用以下命令安装 dev-master
php composer.phar require webmarketingroi/optimizely-php dev-master
用法
首先,您需要创建一个 OptimizelyApiClient
类的实例。您可以使用以下代码行实现这一点
<?php use WebMarketingROI\OptimizelyPHP\OptimizelyApiClient; use WebMarketingROI\OptimizelyPHP\Exception; try { // If you use the "OAuth 2.0 authorization code" grant, use the following array. $authCredentials = array( 'client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_CLIENT_SECRET', 'refresh_token' => 'YOUR_REFRESH_TOKEN', // Access token is optional (if not provided, will be retrieved automatically // with the refresh token). 'access_token' => 'YOUR_ACCESS_TOKEN' ); // Or, if you use the "OAuth 2.0 implicit grant" or "Optimizely personal // token", use the following array. Please note that personal tokens are not // recommended to use in production environments. $authCredentials = array( 'access_token' => 'YOUR_ACCESS_TOKEN' ); // Instantiate the API client. $client = new OptimizelyApiClient($authCredentials, 'v2'); // Do something with the client (for example, get the projects). $result = $client->projects()->listAll(); // Extract projects from result. $projects = $result->getPayload(); foreach ($projects as $project) { // Get project attributes. $name = $project->getName(); echo "Name: $name\n"; } // Finally, retrieve the access token from the client (this is only required // if you use "OAuth 2.0 authorization code" grant). $accessToken = $client->getAccessToken(); // Save the access token somewhere (to a file or database) for later use. file_put_contents('access_token.json', json_encode($accessToken)); } catch (Exception $e) { // Handle error. $code = $e->getCode(); // Client-specific error code. $httpCode = $e->getHttpCode(); // HTTP status code. $message = $e->getMessage(); // Error message. $uuid = $e->getUuid(); // Error UUID. echo "Exception caught: $message (code=$code http_code=$httpCode uuid=$uuid)\n"; }
OptimizelyApiClient
构造函数的第一个参数应该是您的 Optimizely API 凭证,形式为 array
,第二个参数表示 API 版本(目前仅支持 'v2')。
注意:有关如何获取 OAuth 2.0 凭证或个人令牌的信息,请参阅 Optimizely 文档 https://developers.optimizely.com/x/authentication/oauth/。
与项目协作
获取项目列表
使用以下代码检索所有 Optimizely 项目
$page = 1; for (;;) { // Get the next page of projects. $result = $client->projects()->listAll($page, 25); // Retrieve projects from Result object. $projects = $result->getPayload(); // Iterate through retrieved projects foreach ($projects as $project) { echo "ID: " . $project->getId() . "\n"; echo "Name: " . $project->getName() . "\n"; echo "Account ID: " . $project->getAccountId() . "\n"; echo "Platform: " . $project->getPlatform() . "\n"; echo "Status: " . $project->getStatus() . "\n"; echo "Is Classic: " . ($project->getIsClassic()?"true":"false") . "\n"; echo "Created: " . $project->getCreated() . "\n"; echo "Last Modified: " . $project->getLastModified() . "\n"; echo "\n"; } // Determine if there are more projects. if ($result->getNextPage()==null) break; // Increment page counter. $page ++; }
添加新项目
要添加新项目,请使用以下代码
<?php use WebMarketingROI\OptimizelyPHP\Resource\v2\Project; $project = new Project(); $project->setName('Test Project'); $project->setConfidenceThreshold(0.9); $project->setPlatform('web'); $project->setStatus('active'); // On return, call $result->getPayload() to get the newly created project $result = $client->projects()->create($project); $createdProject = $result->getPayload();
或者,您可以使用此(等效)代码
<?php use WebMarketingROI\OptimizelyPHP\Resource\v2\Project; $result = new Project(array( 'name' => 'Test Project', 'confidence_threshold' => 0.9, 'platform' => 'web', 'status' => 'active' )); // On return, call $result->getPayload() to get the newly created project $result = $client->projects()->create($project); $createdProject = $result->getPayload();
更新现有项目
<?php // We assume that $project is of type Project and that you retrieved it earlier $project->setName('New Project Name'); // On return, call $result->getPayload() to get the data of the updated project $result = $client->projects()->update($project); $updatedProject = $result->getPayload();
获取正在运行的活动的列表
$page = 1; for (;;) { // Get the next page of Campaigns. $result = $client->campaigns()->listAll($page, 25); // Retrieve Campaigns from Result object. $campaigns = $result->getPayload(); // Iterate through retrieved Campaigns foreach ($campaigns as $campaign) { if ($campaign->getStatus()!='active') continue; echo "Name: " . $campaign->getName() . "\n"; echo "Type: " . $campaign->getType() . "\n"; echo "Status: " . $campaign->getStatus() . "\n"; echo "\n"; } // Determine if there are more Campaigns. if ($result->getNextPage()==null) break; // Increment page counter. $page ++; }
添加新活动
<?php use WebMarketingROI\OptimizelyPHP\Resource\v2\Campaign; $campaign = new Campaign(); $campaign->setName('Test Campaign'); $campaign->setType('a/b'); $campaign->setStatus('active'); // On return, call $result->getPayload() to get the newly created Campaign $result = $client->campaigns()->create($campaign); $createdCampaign = $result->getPayload();
更多代码示例
有关更多代码示例,请参阅 examples 目录。
运行单元测试
此库使用 PHPUnit 进行测试。要运行单元测试,请使用以下命令
./vendor/bin/phpunit -c ./tests/phpunit.xml --coverage-html coverage
如果您想针对真实的 Optimizely 账户运行集成测试,请将 tests/auth_credentials.json.dist
重命名为 tests/auth_credentials.json
并在该文件中输入您的凭据。然后,创建环境变量 OPTIMIZELY_PHP_TEST_INTEGRATION
如下
export OPTIMIZELY_PHP_TEST_INTEGRATION=1
然后运行单元测试。
使用 optimizely-php 的开源项目
- optimizelyBillingUnpauser。这是一个简单的脚本来检查您的所有 optimizely 实验是否都没有运行(可能是因为您超过了该月的支付限额),然后恢复最新被暂停的实验(假设这些是被 optimizely 暂停的实验)。