Giter Club home page Giter Club logo

akamai's Introduction

Netstorage API library package for Akamai

This package follows facade design pattern (Click on the link to read more on this).

Features:

  1. Upload a file to Akamai Netstorage
  2. List the files and directories of a given directory
  3. Download a file
  4. Delete a file
  5. Rename a file
  6. Remove a directory (Directory must be empty to remove)
  7. Create a new directory
  8. Generate Video Auth token for playback

Sample .env.akamai

AKAMAI_HOST="Your Netstorage Host"
AKAMAI_KEY="Your Netstorage Key"
AKAMAI_KEYNAME="Your Netstorage Key Name"
AKAMAI_VIDEO_TOKEN="Your Video Token"

Explanation:

This package has three facade classes

1) Akamai\Facades\Config

Introduction:

Config facade is used to load/set the credentials which are used for API requests

Methods:
1) Config::loadFromENV($path, $name);

This method is used to load the credentials from an env file. This method will try to load all four env variables which are mentioned in the sample .env.akamai file.

/*
    @param: $path - Path of the env file. Default is current working directory.
    @param: $name - Name of the env file to load. Default is `.env.akamai`.
    @return: Array - Loaded configuration.
    @throws: Akamai\Exceptions\DotEnvException.
*/
2) Config::setAkamaiConfig($config)

This method is to set the credentials in runtime. Will be usefull when the credentials are stored in database or any other mode of storage.

/*
    @param: $config - Configuration to be updated.
    @return: Array - Loaded configuration.
    @throws: Akamai\Exceptions\InvalidDataTypeFoundException;
*/
3) Config::getAkamaiConfig()

This method is to get the credentials in runtime.

/*
    @return: Array - Loaded configuration.
*/

2) Akamai\Facades\Akamai

Introduction:

Akamai facade is used to do the basic operations like upload, download etc. All API operations return responses as an array with fields for "data" and "code".

/*
    [
        "data" => API response (simple string or xml string),
        "code" => API response status code
    ]
*/

For a list of all possible status codes, see https://control.akamai.com/dl/customers/NS/NS_http_api_FS.pdf

Methods:
1) Akamai::upload($akamai_path, $file_path);

This method is used to upload a file to Akamai.

/*
    @param: $akamai_path - File location with file name and extension to which the file should be uploaded. ex: /cpcode/folder/path/file.mp4
    @param: $file_path - Path to the file to be written.
    @return: Array - ["data" => API response, "code" => API response status code]
*/
2) Akamai::dir($akamai_path);

This method is used to list the files in a particular directory.

/*
    @param: $akamai_path - Directory path to be listed. ex: /cpcode/folder/path
    @return: Array - ["data" => API response, "code" => API response status code]
*/
3) Akamai::download($akamai_path);

This method is to download a file

/*
    @param: $akamai_path - File location with file name and extension. ex: /cpcode/folder/path/file.mp4
    @return: Array - ["data" => API response (contents of file on success), "code" => API response status code]
*/
4) Akamai::delete($akamai_path);

This method is to delete a file

/*
    @param: $akamai_path - File location with file name and extension. ex: /cpcode/folder/path/file.mp4
    @return: Array - ["data" => API response, "code" => API response status code]
*/
5) Akamai::rename($old_akamai_path, $new_akamai_path);

This method is to rename a file

/*
    @param: $old_akamai_path - Existing file location with file name and extension. ex: /cpcode/folder/path/file.mp4
    @param: $new_akamai_path - Desired file location with file name and extension. ex: /cpcode/new_folder/new_path/new_file.mp4
    @return: Array - ["data" => API response, "code" => API response status code]
*/
6) Akamai::rmdir($akamai_path);

This method is to delete a directory. [CAUTION: Directory has to be empty. (ie, list and delete all files individually before performing this API call)].

/*
    @param: $akamai_path - Directory path to be deleted. ex: /cpcode/folder/path
    @return: Array - ["data" => API response, "code" => API response status code]
*/
7) Akamai::mkdir($akamai_path);

This method is to create a directory.

/*
    @param: $akamai_path - Directory path to be added. ex: /cpcode/folder/path
    @return: Array - ["data" => API response, "code" => API response status code]
*/
8) Akamai::generateToken($duration, $type);

[DEPRECATED] Please use Token facade to generate video tokens

This method is to generate video authentication token.

/*
    @param: $duration - Time to live (ttl) of that token. (In seconds)
    @param: $type - It should be `hdnts` or `hdnea`.
    @return: String - Final token which has to be appended with the m3u8 request.
*/

3) Akamai\Facades\Token

Introduction:

Token facade is used to generate video auth tokens.

Methods:
1) Token::generateVideoToken($duration, $type);

This method is to generate video authentication token.

/*
    @param: $duration - Time to live (ttl) of that token. (In seconds)
    @param: $type - It should be `hdnts` or `hdnea`.
    @return: String - Final token which has to be appended with the m3u8 request.
*/

Usage sample

<?php

require_once __DIR__ . "/vendor/autoload.php";

use Akamai\Facades\Config;
use Akamai\Facades\Akamai;
use Akamai\Facades\Token;

// For loading config info from different env file. Can be used to change credentials on run time. This method overwrites the existing config with latest one.
Config::loadFromENV('./', '.akamai');

// Getting the akamai config in runtime
$config = Config::getAkamaiConfig();

try {
    /**
     * @var array
     * Example: [
     *              "data" =>
     *                  "<?xml version="1.0" encoding="ISO-8859-1"?>
     *                      <stat directory="/cpcode/directory/path">
     *                          <file type="file" name="filename.mp4" mtime="1234567890" size="1024" md5="f0qcf8xkl6y7p9mo5zror7bpmtiq392d"/>
     *                      </stat>"
     *               "code" => 200
     *           ]
     */
    $dirResponse = Akamai::dir('/cpcode/directory/to/list');

    /** @var array */
    $uploadResponse = Akamai::upload('/cpcode/path/to/file/testing.mp4', './testing.mp4');
    /** @var string */
    $uploadResponseData = $uploadResponse["data"];
    /** @var int */
    $uploadResponseCode = $uploadResponse["code"];

    /** @var array */
    $downloadResponse = Akamai::download('/cpcode/path/to/file/testing.mp4');
    if ($downloadReponse["code"] === 200) {
        file_put_contents('./testing.mp4', $downloadResponse["data"]);
    } else {
        // perform some error handling based on status code
    }

    /** @var array - ['data' => "could be simple string or xml string",'code' => 200] */
    $renameResponse = Akamai::rename('/cpcode/path/to/file/testing.mp4', '/cpcode/new_path/to/file/new_testing.mp4');

    /** @var array - ['data' => "could be simple string or xml string",'code' => 200] */
    $deleteResponse = Akamai::delete('/cpcode/newpath/to/file/new_testing.mp4');

    /** @var array - ['data' => "could be simple string or xml string",'code' => 200] */
    $mkdirResponse = Akamai::mkdir('/cpcode/new_dir');

    /** @var array - ['data' => "could be simple string or xml string",'code' => 200] */
    $rmdirResponse = Akamai::rmdir('/cpcode/new_dir');

    $token = Token::generateVideoToken(100, "hdnts");
    var_dump($token);
    /**
     * hdnts=st=1470130755~exp=1470130855~acl=*~hmac=99665898830y435t37487889hl672055956t9p7455e14g765c056i413u433125;
     */

} catch (Exception $e) {
    echo $e->getMessage();
}

###Change Log:

####v3.1.0 Thanks to Julian Griggs

  1. New mkdir and rename functions

####v3.0.0 Thanks to Julian Griggs

  1. Standardization of API
  2. Refactor
  3. Document update
  4. Removed unwanted test

####v2.0.1 Thanks to Julian Griggs

  1. Added missing return statement for delete method.

####v2.0.0

  1. New Token facade
  2. Code refactor
  3. Bug fixes
  4. Deprecated Akamai::generateToken($duration, $type)

####v1.1.1

  1. Issue fix
  2. Document update

####v1.1.0

  1. Added video token api for generating tokens for video based on duration.

####v1.0.3

  1. Code optimization

####v1.0.2

  1. Issue fixes

####v1.0.1

  1. Issue fixes

####v1.0.0

  1. Initial version with support for upload, list directory, download, remove directory and delete

NOTE: This package is based on Akamai plugin by Raben. So credits goes to him. I have added Video auth token with this and packaged it.

akamai's People

Contributors

talk2cerlin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.