Code Monkey home page Code Monkey logo

bunnycdn-api's Introduction

BunnyNET CDN API Class

The most comprehensive, feature-packed and easy to use PHP class for bunny.net ( BunnyCDN) pull, video streaming, DNS and storage zones API.

This class whilst having a main focus on storage zone interaction includes pull zone features, DNS, Video streaming and more. Combining API with FTP managing and using your BunnyNet storage zones just got easier.

Generic badge Generic badge

Table of contents

1.9.7 changes

14th May 2024

  • Fixed dirSize() needing a slash
  • Fixed createFolder() throwing warning messages
  • Added fileExists()

Requirements

  • PHP 8.2

For Pull zone, billing and statistics API interaction you will need your BunnyNet API key, this is found in your dashboard in the My Account section.

The video streaming API you need the video stream library access key which is found in the settings for the library at bunny.net.

If you want to interact with storage zones you will need your BunnyCDN API key set and the name of the storage zone.

You can get this with listStorageZones() as it returns all the storage zone data/info for the account.

Features & abilities

  • List storage zones
  • Add/create storage zone
  • Delete storage zone
  • Create folder in storage zone
  • Delete folder in storage zone
  • Delete file in storage zone
  • Delete all files in a folder in storage zone
  • Download a file from storage zone
  • Download a file from storage zone with progress percentage
  • Download all files in a folder from storage zone
  • Upload file to storage zone
  • Upload file to storage zone with progress percentage
  • Upload all files in a folder to storage zone
  • Rename file or folder in storage zone
  • Move file in storage zone
  • Get file size in storage zone
  • Get directory size in storage zone
  • Navigate/List directories in storage zone
  • List all from storage zone directory
  • List all files formatted from storage zone directory
  • List all folders formatted from storage zone directory
  • List all formatted from storage zone directory
  • Create, edit and delete videos
  • Create, edit and delete DNS zones
  • Get usage statistics
  • Get billing data
  • View balance
  • View monthly charge
  • View monthly charge breakdown
  • Apply coupon code
  • List pull zones
  • Get pull zone
  • Add pull zone
  • Update pull zone
  • Delete pull zone
  • Purge pull zone
  • Add hostname to pull zone
  • Remove hostname from pull zone
  • Set force SSL for pull zone
  • List pull zone HTTP access logs
  • Calculate costs

Usage

Install with composer:

composer require corbpie/bunny-cdn-api

Use like:

require __DIR__ . '/vendor/autoload.php';

use Corbpie\BunnyCdn\BunnyAPIPull;

$bunny = new BunnyAPIPull();//Initiate the class

echo $bunny->listPullZones();

Setting API key:

option 1 (preferred)

Line 12 bunnyAPI.php

const API_KEY = 'XXXX-XXXX-XXXX';

option 2

With apiKey() (needs setting with each calling of class)

$bunny->apiKey('XXXX-XXXX-XXXX');//Bunny api key

Storage zone interaction

require __DIR__ . '/vendor/autoload.php';

use Corbpie\BunnyCdn\BunnyAPIStorage;

$bunny = new BunnyAPIStorage();

Storage zone name and access key for storage zone interaction (not needed if just using pull zone functions)

Set $access_key = '' to obtain key automatically (storage name must be accurate)

$bunny->zoneConnect($storagename, $access_key);

$storagename name of storage zone string

$access_key key/password to storage zone string optional


List storage zones

$bunny->listStorageZones();

returns array


Add a storage zone

$bunny->addStorageZone($newstoragezone);

$newstoragezone name of storage zone to create string


Delete a storage zone

$bunny->deleteStorageZone($id);

$id id of storage zone to delete int


Get directory size

$dir = "media/images/dogs";

$bunny->dirSize($dir);

$dir directory to get size of string


Return current directory

$bunny->currentDir();

returns string


Change directory

$dir = "media/images/dogs";

$bunny->changeDir($dir);

$dir directory navigation (FTP rules) string


Check folder exists

$bunny->folderExists($path);

$path the folder path string

Returns bool


Check file exists

$file = "media/images/dogs/collie.jpg";

$bunny->fileExists($file);

$file the full file path including the filename string

Returns bool


Move to the parent directory

$bunny->moveUpOne();

Create a folder in the current directory

$new_folder = "dogs"

$bunny->createFolder($new_folder);

$new_folder Create a folder in the current directory string


Delete folder

$bunny->deleteFolder($folder_name);

$folder_name Name of the folder to delete (folder must be empty) string


Delete a file

$bunny->deleteFile($name);

$name Name of file to delete string


Delete all files in a folder

$bunny->deleteAllFiles($dir);

$dir Directory to delete all files in string


Rename a file

BunnyCDN does not allow for ftp_rename so file copied to a new name and then the old file is deleted.

$directory = "media/images/dogs";
$old_file_name = "collie.jpg";
$new_file_name = "poodle.jpg";

$bunny->renameFile($directory, $old_file_name, $new_file_name);

$directory Directory that contains the file string

$old_name Object that is being renamed string

$new_name New name for object string


Move a file

$bunny->moveFile($file, $move_to);

$file File to move string

$move_to Directory to move file to string


Download a file

$bunny->downloadFile($save_as, $get_file, $mode);

$save_as Save file as string

$get_file File to download string

$mode FTP mode to use INT


Download all files in a directory

$bunny->downloadAll($dir_dl_from, $dl_into, $mode);

$dir_dl_from Directory to download all from string

$dl_into Download into string

$mode FTP mode to use INT


Upload a file

$bunny->uploadFile($upload, $upload_as, $mode);

$upload File to upload string

$upload_as Upload as string

$mode FTP mode to use INT


Upload all files from a local folder

$bunny->uploadAllFiles($dir, $place, $mode);

$dir Upload all files from this directory string

$place Upload to string

$mode FTP mode to use INT


Return storage zone files and folder data (Original)

$bunny->listAllOG();

returns array


Return storage zone directory files formatted

$bunny->listFiles($location);

$location Directory to get and return data string

returns array


Return storage zone directory folders formatted

$bunny->listFolders($location);

$location Directory to get and return data string

returns array


Return storage zone directory file and folders formatted

$bunny->listAll($location);

$location Directory to get and return data string

returns array


List all pull zones and data

$bunny->listPullZones();

returns array


List pull zones data for id

$bunny->pullZoneData($id);

$id Pull zone to get data from int

returns array


Purge pull zone data

$bunny->purgePullZone($id);

$id Pull zone to purge int


Delete pull zone data

$bunny->deletePullZone($id);

$id Pull zone to delete int


Lists pullzone hostnames and amount

$bunny->pullZoneHostnames($pullzone_id);

Add hostname to pull zone

$bunny->addHostnamePullZone($id, $hostname);

$id Pull zone hostname will be added to int

$hostname Hostname to add string


Remove a hostname from pull zone

$bunny->removeHostnamePullZone($id, $hostname);

$id Pull zone hostname be removed from int

$hostname Hostname to remove string


Change force SSL status for pull zone

$bunny->forceSSLPullZone($id, $hostname, $force_ssl);

$id Pull zone hostname change status int

$hostname Affected hostname string

$force_ssl True = on, FALSE = off bool


Add ip to block for pullzone

$bunny->addBlockedIpPullZone($pullzone_id, $ip, $db_log = false);

Un block an ip for pullzone

$bunny->unBlockedIpPullZone($pullzone_id, $ip, $db_log = false);

List all blocked ip's for pullzone

$bunny->listBlockedIpPullZone($pullzone_id);

Purge cache for a URL

$bunny->purgeCache($url, $async = false);

$url Purge cache for this url string

$async Dont wait for the purge before returning result bool


Pull zone logs as formatted array

$bunny->pullZoneLogs($id, $date);

$id Pull zone id int

$date Date for logs, only past 3 days (mm-dd-yy) string


Get usage statistics

$bunny->getStatistics();

returns array


Get billing data

$bunny->getBilling();

returns array


Get account balance

$bunny->balance();

returns float


Get monthly charge

$bunny->monthCharges();

returns float


Get monthly charge breakdown for region

$bunny->monthChargeBreakdown();

returns array


Lists total billing amount and first date time

$bunny->totalBillingAmount();

returns array


Apply a coupon code

$bunny->applyCoupon($code);

Set Json header

$bunny->jsonHeader();

Convert/format bytes to other data types

$bunny->convertBytes($bytes, $convert_to = 'GB', $format = true, $decimals = 2);

Convert bool to int value

$bunny->boolToInt($bool);

returns int


Close connection (Optional)

$bunny->closeConnection();

Video streaming zone interaction

Calling and setting stream library access key

require __DIR__ . '/vendor/autoload.php';

use Corbpie\BunnyCdn\BunnyAPIStream;

$bunny = new BunnyAPIStream();

$bunny->streamLibraryAccessKey('XXXX-XXXXX-XXXX-XXXX');

//Or set stream library access key at line 14 in BunnyAPI.php

You can only get the video library id from your bunny.net stream library page Set video stream library id

$bunny->setStreamLibraryId($library_id);

$library_id stream library id int


Get video collections

Requires setStreamLibraryId() to be set.

$bunny->getVideoCollections();

Set video collection guid

$bunny->setStreamCollectionGuid($collection_guid);

$collection_guid video collection guid string


Set video guid

$bunny->setStreamVideoGuid($video_guid);

$video_guid video guid string


Get video collections for library id

Requires setStreamLibraryId() to be set.

$bunny->getStreamCollections($page, $items_pp,$order_by);

$page page number int

$items_pp items to show int

$order_by order by string


Get streams for a collection

Requires setStreamLibraryId() and setStreamCollectionGuid() to be set.

$bunny->getStreamForCollection();

Update stream collection

Requires setStreamLibraryId() and setStreamCollectionGuid() to be set.

$bunny->updateCollection($updated_collection_name);

$updated_collection_name the name to update video collection to string


Delete stream collection

Requires setStreamLibraryId() and setStreamCollectionGuid() to be set.

$bunny->deleteCollection();

Create stream collection

Requires setStreamLibraryId() to be set.

$bunny->createCollection($new_collection_name);

$new_collection_name the name for your new video collection string


List videos for library

Requires setStreamLibraryId() to be set.

$bunny->listVideos($collection_guid);

$collection_guid video collection guid string


Get video information

Requires setStreamLibraryId() to be set.

$bunny->getVideo($collection_guid);

$collection_guid video collection guid string


Delete video

Requires setStreamLibraryId() to be set.

$bunny->deleteVideo($collection_guid);

$library_id library id int

$collection_guid video collection guid string


Create video

Requires setStreamLibraryId() to be set.

$bunny->createVideo($video_title);

$video_title video title string


Create video for collection

Requires setStreamLibraryId() and setStreamCollectionGuid() to be set.

$bunny->createVideoForCollection($video_title);

$video_title video title string


Upload video

Requires setStreamLibraryId() to be set.

Need to use createVideo() first to get video guid

$bunny->uploadVideo($video_guid, $video_to_upload);

$video_guid video guid string

$video_to_upload video filename string


Set thumbnail for video

Requires setStreamLibraryId() to be set.

$bunny->setThumbnail($video_guid, $thumbnail_url);

$video_guid video guid string

$thumbnail_url image url string


Get video resolutions

Requires setStreamLibraryId() to be set.

$bunny->videoResolutionsArray($video_guid);

Get video size

Requires setStreamLibraryId() to be set.

$bunny->videoSize($video_guid);

Add captions

Requires setStreamLibraryId() to be set.

$bunny->addCaptions($video_guid, $collection_guid, $label, $captions_file);

$video_guid video guid string

$srclang caption srclang string

$label label for captions string

$captions_file caption file URL string


Delete captions

Requires setStreamLibraryId() to be set.

$bunny->deleteCaptions($library_id, $video_guid, $srclang);

$video_guid video guid string

$srclang captions srclang string


DNS zone interaction

require __DIR__ . '/vendor/autoload.php';

use Corbpie\BunnyCdn\BunnyAPIDNS;

$bunny = new BunnyAPIDNS();

Get DNS all zones

$bunny->getDNSZones();

$library_id stream library id int


Get DNS zone

$bunny->getDNSZone($zone_id);

$zone_id DNS zone id int


Add a DNS zone

$bunny->addDNSZone($domain, $logging);

$domain domain name string $logging use logging bool


Add a DNS zone full

$parameters = array(
    'Domain' => 'zonedomain.com', 'NameserversDetected' => true, 'CustomNameserversEnabled' => true,
    'Nameserver1' => 'customns1.com', 'Nameserver2' => 'customns2.com', 'SoaEmail' => '[email protected]',
    'DateModified' => '2022-08-18 23:59:59', 'DateCreated' => '2022-08-18 23:59:59', 'NameserversNextCheck' => '2022-08-28 23:59:59',
    'LoggingEnabled' => true, 'LoggingIPAnonymizationEnabled' => true
);
$bunny->addDNSZoneFull($parameters);

$parameters parameters to create array


Delete DNS zone

$bunny->deleteDNSZone($zone_id);

$zone_id DNS zone id int


DNS zone statistics

$bunny->getDNSZoneStatistics($zone_id);

$zone_id DNS zone id int


Update DNS nameservers

$bunny->updateDNSZoneNameservers($zone_id, $custom_ns, $ns_one, $ns_two);

$zone_id DNS zone id int $custom_ns use custom nameservers bool $ns_one NS one string $ns_two NS two string


Update DNS SOA email

$bunny->updateDNSZoneNameservers($zone_id, $soa_email);

$zone_id DNS zone id int $soa_email NS one string


Add a DNS record by using parameters https://docs.bunny.net/reference/dnszonepublic_addrecord

$parameters = array('Type' => 0, 'Ttl' => 120, 'Accelerated' => true, 'Weight' => 200);
$bunny->addDNSRecord($zone_id, $name, $value, $parameters);

$zone_id DNS zone id int $name name string $value IP address string $parameters array


Add DNS A record

$bunny->addDNSRecordA($zone_id, $hostname, $ipv4);

$zone_id DNS zone id int $hostname hostname string $ipv4 IPv4 address string


Add DNS AAAA record

$bunny->addDNSRecordAAAA($zone_id, $hostname, $ipv6);

$zone_id DNS zone id int $hostname hostname string $ipv6 IPv6 address string


Add DNS CNAME record

$bunny->addDNSRecordCNAME($zone_id, $hostname, $target);

$zone_id DNS zone id int $hostname hostname string $target string


Add DNS MX record

$bunny->addDNSRecordMX($zone_id, $hostname, $mail, $priority);

$zone_id DNS zone id int $hostname hostname string $mail mail server string $priority int


Add DNS TXT record

$bunny->addDNSRecordTXT($zone_id, $hostname, $content);

$zone_id DNS zone id int $hostname hostname string $content txt contents string


Add DNS NS record

$bunny->addDNSRecordNS($zone_id, $hostname, $target);

$zone_id DNS zone id int $hostname hostname string $target string


Add DNS redirect

$bunny->addDNSRecordRedirect($zone_id, $hostname, $url);

$zone_id DNS zone id int $hostname hostname string $url redirect to string


Update DNS A record

$bunny->updateDNSRecordA($zone_id, $dns_id, $hostname, $ipv4);

$zone_id DNS zone id int $dns_id DNS record id int $hostname hostname string $ipv4 ipv4 address string


Update DNS AAAA record

$bunny->updateDNSRecordAAAA($zone_id, $dns_id, $hostname, $ipv6);

$zone_id DNS zone id int $dns_id DNS record id int $hostname hostname string $ipv6 ipv6 address string


Disable DNS record

$bunny->disableDNSRecord($zone_id, $dns_id);

$zone_id DNS zone id int $dns_id DNS record id int


Enable DNS record

$bunny->enableDNSRecord($zone_id, $dns_id);

$zone_id DNS zone id int $dns_id DNS record id int


Delete DNS record

$bunny->deleteDNSRecord($zone_id, $dns_id);

$zone_id DNS zone id int $dns_id DNS record id int


bunnycdn-api's People

Contributors

cp6 avatar macbookandrew avatar xarex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

bunnycdn-api's Issues

Is there a smart fileExists method?

Hi,

sometimes I need to check if a file exists on the storage.
I currently just get the folder via listFiles and then check if the return array does contain the file.
But this can take quite some time as I might have thousands of files in the folder.
Is there a more clever way to do this?

Thanks for any ideas on this.
gb5256

folderExists not working?

I am trying this:

          if ( $CDNStorage->folderExists($target) === false ) {  
                          $CDNStorage->createFolder($target);
          }

This throws error like "can not create folder as it already exists".
So the folderExist does return false even that the folder exists already.

Any ideas?
gb5256

Bunny CDN Stream upload encoding failed

Do you maybe know what can be a encoding problem with uploading to the stream?
I tried sending file as file, file as base64 encrypted and base64 with data content..

$videoFile -> is laravel UploadedFile type.
$video = 'data:' . mime_content_type($videoFile->path()) .';base64,' . base64_encode(file_get_contents($videoFile));

For all 3 tries in bunny dashboard gallery it shows encoding failed on a video.. Reencoding do not work as well.

Tried with mp4, webm, avi files..

Does 1.9.5 contains the new fileExists() ?

Just did an composer update and it says in my composer.lock that corbpie/bunny-cdn-api is now at v1.9.5 but looking at the code it downloaded, it does not contain the new fileExists() function.
Or am I doing something wrong?

Do I need to use your dev branch?
I am using master like this: "corbpie/bunny-cdn-api" : "*",

I have also deleted the corbpie folder from vendor and did again a composer update, still the same.

Thanks for any ideas.
gb5256

Error in single high size video file.

{message: "ftp_put(): php_connect_nonb() failed: Operation now in progress (115)",ā€¦} exception: "ErrorException" file: "/home/admin/public_html/vendor/corbpie/bunny-cdn-api/src/BunnyAPI.php" line: 578 message: "ftp_put(): php_connect_nonb() failed: Operation now in progress (115)"

license?

i would like to integrate the code with my project (yes, i know composer exists but i need tighter integration), but my project is AGPL licensed while this one has no such license.

is this like public domain or something? i would like to know

purgeCache returns always a 400

Not sure if this is my fault...

If I use the example:

$bunny->purgeCache('https://cdn.domain.com/css/style.min.css')

It returns a 400 code.
Of course I do not have access to cdn.domain.com, but if I try this here:
https://docs.bunny.net/reference/purgepublic_indexpost
Then I get a 404 repsonse with this additional info:

  {
  "ErrorKey": "pullZone.not_found",
  "Field": "PullZone",
  "Message": "The requested Pull Zone was not found"
}

So my question is why does this return a 400 when using this exension?
Also: this is the respone I get back:

 {"ErrorKey":"purge.urls_invalid","Field":"Urls","Message":"The purge request must contain at least one and no more than 50 URLs"}

And besides this, even If I try to use a pull zone where I have access to, it also always returns a 400 and does not purge.

Any idea?
Can somebody confirm that this exenstion is indeed purging correctly right now and also does return a 200 code on success?

Thanks,
gb5256

Not logged in (ftp_login) failed

When running on the code $bunny->zoneConnect($storageZoneName, $accessKey); it show the follow errors
and i have check all the variable are there

Please let me know what make the error occurs
ErrorException ftp_login(): Not logged in

        $conn_id = ftp_connect((BunnyAPI::HOSTNAME));
        $login = ftp_login($conn_id, $storage_name, $this->access_key);

Composer support?

Any thoughts about adding composer support for easier use and updates in other projects? Iā€™d be happy to assist if you want.

Syntax error, unexpected '|', expecting ';' or '{'

Always getting this error, no matter if I try on PHP 7.4 or 8.0

Parse error: syntax error, unexpected '|', expecting ';' or '{' in /vendor/corbpie/bunny-cdn-api/src/BunnyAPI.php on line 294

Any ideas?

Which PHP version to use?

I got an error about php version.
"Package corbpie/bunny-cdn-api at version has a PHP requirement incompatible with your PHP version (7.3.11)"

Which php versions are supported?

Return response for all valid http status codes

Currently, only 200 status code returns the response.

I suggest returning the response for 2XX status codes (e.g. 201 which means resources created). Also I suggest returning the response for errors i.e.

BunnyAPI.php:100

if ($responseCode >= 200 && $responseCode < 300) {
            return $this->data = json_decode($result, true);
        } else {
            return [
                'http_code' => $responseCode,
                'response' => json_decode($result, true),
            ];
        }

Use a prs-7 http client instead of (only) curl

There are many clients that provide throttling, automatic retry, and a host of other goodies. I like the Symfony HttpClient, others like Guzzle.

Instead of making the API calls with curl, would you consider making them with a psr-7 client that the user installs and configures?

Basically, make the client generic, you could even document installing https://github.com/pdeans/http to continue using curl.

Thanks for releasing this. I like having the storage API and the system API all in the same bundle, currently I've installed the bunny storage https://github.com/BunnyWay/BunnyCDN.PHP.Storage where I just made the same request, and https://github.com/ToshY/BunnyNet-PHP, which does use implement the psr7 client interface.

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.