webmarketingroi/optimizely-php

Optimizely REST API 的 PHP 封装

0.9.0beta9 2018-05-14 07:05 UTC

README

Build Status Code Coverage Latest Stable Version Total Downloads Latest Unstable Version Scrutinizer Code Quality

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 暂停的实验)。