PHPackages                             openpublicmedia/pbs-media-manager-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. openpublicmedia/pbs-media-manager-php

ActiveLibrary[API Development](/categories/api)

openpublicmedia/pbs-media-manager-php
=====================================

PHP client for consuming the PBS Media Manager API.

2.0.0(4y ago)322.1k↓13.3%[1 issues](https://github.com/OpenPublicMedia/pbs-media-manager-php/issues)[2 PRs](https://github.com/OpenPublicMedia/pbs-media-manager-php/pulls)Apache-2.0PHPPHP ^8.0

Since Jul 12Pushed 3y ago1 watchersCompare

[ Source](https://github.com/OpenPublicMedia/pbs-media-manager-php)[ Packagist](https://packagist.org/packages/openpublicmedia/pbs-media-manager-php)[ RSS](/packages/openpublicmedia-pbs-media-manager-php/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (6)Versions (15)Used By (0)

PBS Media Manager PHP Library
=============================

[](#pbs-media-manager-php-library)

This library abstracts interactions with the [PBS Media Manager API](https://docs.pbs.org/display/MM/Media+Manager) based on the Media Manager Core Data Model:

[![PBS Media Manager Core Data Model](pbs-media-manager-data-model.jpg)](pbs-media-manager-data-model.jpg)

Installation
------------

[](#installation)

Install via composer:

```
composer require openpublicmedia/pbs-media-manager-php
```

Use
---

[](#use)

The primary class provided by this library is the `OpenPublicMedia\PbsMediaManager\Client`. A `Client` instance can be used to query the API in various ways based on the Core Data Model. The client requires an API key and secret, provided by PBS.

### Response data structures

[](#response-data-structures)

Responses from the `Client` class will return either a Generator in the case of plural getters (e.g. `getFranchises`, `getShows`, `getSeasons`, etc.) or an object for singular getters (e.g. `getEpisode`, `getCollection`, etc.). Search methods (e.g. `searchShows`, `searchEpisodes`, etc.) also return Generators.

In all cases, objects representing API data follow a standard structure with the following properties:

- `id`: guid for the object.
- `type`: string of the object type (e.g. "franchise", "show", "season", etc.).
- `links`: links to related API endpoints for the object.
- `attributes`: metadata about the object.

### Examples

[](#examples)

#### Creating a client

[](#creating-a-client)

```
use OpenPublicMedia\PbsMediaManager\Client;

$api_key = 'xxxxxxxxxxxxxx';
$api_secret = 'xxxxxxxxxxx';

$client = new Client($api_key, $api_secret);
```

#### Getting all Franchises

[](#getting-all-franchises)

```
$franchises = $client->getFranchises();

foreach ($franchises as $franchise) {
    var_dump($franchise);
    class stdClass#45 (4) {
        public $links => class stdClass#40 (4) { ... }
        public $attributes => class stdClass#39 (18) { ... }
        public $type => string(9) "franchise"
        public $id => string(36) "e08bf78d-e6a3-44b9-b356-8753d01c7327"
      }
}
```

#### Getting a single Episode

[](#getting-a-single-episode)

```
$episode = $client->getEpisode('08e7ee9c-800a-406f-86f0-bf0bb77fe42b');

var_dump($episode);
class stdClass#80 (3) {
    public $attributes => class stdClass#38 (20) { ... }
    public $id => string(36) "08e7ee9c-800a-406f-86f0-bf0bb77fe42b"
    public $type => string(7) "episode"
}
```

#### Searching (Franchises, Shows, Specials, and Episodes)

[](#searching-franchises-shows-specials-and-episodes)

```
$results = $client->searchEpisodes('Seattle');

foreach ($results as $result) {
    var_dump($result);
    class stdClass#45 (4) {
        public $links => class stdClass#40 (4) { ... }
        public $attributes => class stdClass#39 (18) { ... }
        public $type => string(9) "episode"
        public $id => string(36) "bb053151-7d3f-42bd-ac69-d0c19f040b27"
      }
}
```

#### Searching (Assets)

[](#searching-assets)

Assets have much more advanced search options that must be passed to the method directly as query parameters. The example below searches for all Assets beloning to a Show with "Mossback" in the *Show* title and both "Seattle" and "came" in the \*Episode" title.

See [Searching Assets](https://docs.pbs.org/display/CDA/Search+Assets) for detailed documentation about available search filters.

```
$results = $client->searchAssets([
    'show-title' => 'Mossback',
    'episode-title' => ['Seattle', 'came'],
]);

var_dump(count($results));
int(4)

foreach ($results as $r) {
    print "{$r->id}\t{$r->attributes->title}\r\n";
}

4eb40f99-cd4f-4582-9e8a-1ef0a99b8293    When Camelot Came to the Seattle World's Fair
e96d66c4-aa8e-4a83-a060-bd712178ff6b    The Music Festival That Came Before Woodstock
884e4401-de5e-4423-8cab-1c611dd6e624    When Mark Twain Came to Seattle
73d7b2fe-111b-4318-8721-e93937bf22ea    When the ‘American Hitler’ Came to Washington
```

#### Handling exceptions

[](#handling-exceptions)

Most plural `Client` getters (e.g. `Client::getShows`) can throw `OpenPublicMedia\PbsMediaManager\Exception\BadRequestException`. This exception will include a JSON encoded message that can be used to determine follow-up actions. Singular getters (e.g. `Client::getShow`) will generally return `null`for invalid IDs.

```
try {
    $shows = $client->getShows(['page' => 100000]);
} catch (BadRequestException $e) {
    $message = json_decode($e->getMessage());
    var_dump($message);
    class stdClass#17 (1) {
      public $detail =>
      string(13) "Invalid page."
    }
}
```

Development goals
-----------------

[](#development-goals)

See [CONTRIBUTING](CONTRIBUTING.md) for information about contributing to this project.

### v1

[](#v1)

- API authentication (`OpenPublicMedia\PbsMediaManager\Client`)
- API direct querying (`$client->request()`)
- Result/error handling
- GET wrappers for core data objects (`$client->getXXX()`)
- Transparent paged response handling (`OpenPublicMedia\PbsMediaManager\Response\PagesResponse`)

### v1.x

[](#v1x)

- POST support (`OpenPublicMedia\PbsMediaManager\Client::post`)
    - Asset (`OpenPublicMedia\PbsMediaManager\Client::addAsset`)
    - Episode (`OpenPublicMedia\PbsMediaManager\Client::addEpisode`)
    - Special (`OpenPublicMedia\PbsMediaManager\Client::addSpecial`)
    - Season (`OpenPublicMedia\PbsMediaManager\Client::addSeason`)
- PATCH support (`OpenPublicMedia\PbsMediaManager\Client::patch`)
    - Asset (`OpenPublicMedia\PbsMediaManager\Client::updateAsset`)
    - Episode (`OpenPublicMedia\PbsMediaManager\Client::updateEpisode`)
    - Special (`OpenPublicMedia\PbsMediaManager\Client::updateSpecial`)
    - Season (unsupported by API)
    - Show (unsupported by API)
- DELETE support (`OpenPublicMedia\PbsMediaManager\Client::delete`)
    - Asset (`OpenPublicMedia\PbsMediaManager\Client::deleteAsset`)
    - Episode (`OpenPublicMedia\PbsMediaManager\Client::deleteEpisode`)
    - Special (`OpenPublicMedia\PbsMediaManager\Client::deleteSpecial`)
    - Season (unsupported by API)
- Asset ingestion/replace status wrangling

### v2

[](#v2)

- PHP 8 support

### v3.x

[](#v3x)

- Entities for core data objects
- Advanced Asset availability handling
- Advanced Changelog endpoint operations
- Chainable query argument building (mostly for Asset search)

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance13

Infrequent updates — may be unmaintained

Popularity29

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity71

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~76 days

Recently: every ~16 days

Total

12

Last Release

1662d ago

Major Versions

v1.1.5 → 2.0.02021-10-22

2.0.0 → 3.x-dev2021-10-29

PHP version history (2 changes)v1.0.0PHP &gt;=7.1

2.0.0PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/bff91dfe597545a4f54945ec9aee22330bf39fd981466accfa486ede2b573abc?d=identicon)[cdubz](/maintainers/cdubz)

---

Top Contributors

[![cdubz](https://avatars.githubusercontent.com/u/10456740?v=4)](https://github.com/cdubz "cdubz (54 commits)")

---

Tags

api-clientphp

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/openpublicmedia-pbs-media-manager-php/health.svg)

```
[![Health](https://phpackages.com/badges/openpublicmedia-pbs-media-manager-php/health.svg)](https://phpackages.com/packages/openpublicmedia-pbs-media-manager-php)
```

###  Alternatives

[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3731.2M42](/packages/tencentcloud-tencentcloud-sdk-php)[php-soap/wsdl

Deals with WSDLs

173.5M12](/packages/php-soap-wsdl)[optiosteam/payconiq-client-php

Payconiq API client library for PHP developed by Optios.

1273.4k](/packages/optiosteam-payconiq-client-php)[convertkit/convertkitapi

Kit PHP SDK for the Kit API

2167.1k1](/packages/convertkit-convertkitapi)[mapado/rest-client-sdk

Rest Client SDK for hydra API

1125.9k2](/packages/mapado-rest-client-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
