New Package: Domainr API wrapper for PHP

Phil Stephens
Jul 28, 2017 · 2 min read

Following on from my little side-project from a couple of days ago I wanted to be able to dynamically check the availability of a given domain. Originally I planned to use the AWS Route53 API as I was already familiar with it, but after a couple of tests with it I found that I would very quickly have my API connection throttled as I approached some very meager rate limits — not ideal if I planned to get the status of domains in batches in scheduled jobs.

After a little research I came across a service called Domainr. Their Developer API is clean and simple and exactly what I was looking for. After a number of dry runs using Guzzle to make API calls I decided to quickly put together a package to wrap Domainr API with some simple syntax, and add some sugar to some of the responses. It still needs a test suite written for it, but is available on Github and Packagist.

Installation

The package can be installed using Composer:

composer require theprivateer/domainr

Usage

For detailed documentation please visit the Domainr API on Mashape or Domainr API on Domainr.build. You will need to subscribe to the Domainr API to get a Mashape API key — there is currently a free plan that allows for 10,000 requests per month, however you will need to enter credit card details to cover any overage.

// autoload
include 'path/to/autoload.php'

$client = new \Privateer\Domainr\Domainr('YOUR_MASHAPE_API_KEY');

Search

$client->search($query, $location = null, $registrar = null, $defaults = null);

The search method allows you to search for domains by keyword, and receive multiple alternatives back from Domainr.

$client->search('acme.coffee');

JSON data will be returned:

[
{
"domain":"acme.coffee",
"host":"",
"subdomain":"acme.",
"zone":"coffee",
"path":"",
"registerURL":"https:\/\/api.domainr.com\/v2\/register?client_id=mashape-salimgrsy&domain=acme.coffee&registrar=&source="
},
{
"domain":"acme.cafe",
"host":"",
"subdomain":"acme.",
"zone":"cafe",
"path":"",
"registerURL":"https:\/\/api.domainr.com\/v2\/register?client_id=mashape-salimgrsy&domain=acme.cafe&registrar=&source="
},
{
"domain":"acme.com.tr",
"host":"",
"subdomain":"acme.",
"zone":"com.tr",
"path":"",
"registerURL":"https:\/\/api.domainr.com\/v2\/register?client_id=mashape-salimgrsy&domain=acme.com.tr&registrar=&source="
}
]

Register

$client->register($domain, $registrar = null);

This method returns a string, the value of which is the URL to the domain’s registrar:

$client->register('acme.coffee');

// https://domains.google.com/registrar?s=acme.coffee&utm_campaign=domainr.com&utm_content=&af=domainr.com

Status

$client->status($domain);

The status method allows you to check domain availability:

$status = $client->status('acme.coffee');

This will return an instance of \Privateer\Domainr\Status. The values of the underlying JSON response will be accessible via the get() method on the Status object:

$status = $client->status('acme.coffee');

$status->get('domain');
// acme.coffee

$status->get('zone');
// coffee

$status->get('status');
// undelegated inactive

$status->get('summary');
// inactive

The Status object has a number of utility helpers to further explain the response.

$status->get('description');
// Available for new registration.

$status->get('available');
// true

These dynamic properties are derived from the status descriptions in the Domainr API documentation].

The Status object also static method to access these values:

Status::description($summary);\Privateer\Domainr\Status::description('inactive'); 
// Available for new registration.

\Privateer\Domainr\Status::available('inactive');
// true

Using with Laravel

I did start to put together a Laravel wrapper with a service provider and facade, but decided not to use it in my application. It can be found on Github and installed using:

composer require theprivateer/laravel-domainr

This article was originally published on my personal blog at https://philstephens.io/new-package-domainr-api-wrapper-for-php.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade