Making job board and company data more accessible.



Announcing JobsToMail, Our First Job Search Product

One of the things I hope to do with the JobApis organization is release open source products that help job seekers use our job board API clients and inspire developers who might want to use them. To that end, today I released our first open source product, JobsToMail.

What is JobsToMail?

JobsToMail is like having a personal assistant for your job search.

Just sign up at JobsToMail.com, choose the search term and location you’d like to search, and we’ll send you new job listings every day.

One of the most annoying things to do when searching for a job (either actively or passively) is checking all the job boards for new items every day. You could sign up for their email blasts, but then you could be getting dozens of emails every day, and that’s annoying. We’re making the whole process simpler by sending you job listings from several job boards (6 as of this writing) in one simple daily email.

jobstomail.com

Sign up for as many searches as you like

At this point, the project doesn’t offer much management of your job searches, but you can sign up to receive multiple search emails at one address. This allows you to easily subscribe or unsubscribe from searches that are most relevant to you.

Unsubscribe any time

Just click the unsubscribe link at the bottom of any of our emails to stop receiving emails for that search immediately. If you subscribed to multiple searches, you will need to unsubscribe from each individually.

Clone the project and run it on your own servers

If you’re a developer or you want to customize the project to meet your needs, feel free. Just clone the project on Github and set it up to run on your local computer or your own servers. The public project is currently hosted on Heroku, so getting it set up there should be a cinch.

Make a suggestion or report an issue on Github

Finally, because the project is open source, you’re welcome to submit an issue or pull request to improve the project.

I’m looking forward to hearing from users. If you find this project useful or you have ideas, just let me know.


CareerCast API v1.0 Release Announcement

The latest job board now supporting version 2.0 of the Jobs Common project is the re-released Careercast API client, which just reached version 1.0 today.

This re-release offers most of the same functionality as the version 0 release, but defaults to JSON responses instead of XML. This allows for much richer data from the Careercast API.

Unfortunately, Careercast’s API is not official or documented, so the setters are limited, and it appears that pagination doesn’t work.

The basic usage is the same as most of our other providers:

1. Install the package via Composer

composer require jobapis/jobs-careercast

2. Create a query object with all API parameters

1
2
3
4
$query = new JobApis\Jobs\Client\Queries\CareercastQuery([
'keyword' => 'engineering',
'location' => 'Chicago, IL',
]);

3. Inject the query object and get jobs

1
2
$client = new JobApis\Jobs\Client\Provider\CareercastProvider($query);
$jobs = $client->getJobs();

This will return a Collection of Job objects.

For more detailed usage and documentation, see this project’s readme


USAJobs API Client now available

I’ve added a new PHP client for USAJobs, and released it to work with v2 of the Jobs-Common project.

USAJobs is one of the sources for the Government Jobs API, but their API has jobs that aren’t necessarily collected by the DigitalGov service, so if you’re really interested in using government jobs in your application, this could be a great addition.

The basic usage is the same as most of our other providers:

1. Install the package via Composer

composer require jobapis/jobs-usajobs

2. Create a query object with all API parameters

1
2
3
4
5
$query = new JobApis\Jobs\Client\Queries\UsajobsQuery([
'Keyword' => 'engineering',
'LocationName' => 'Chicago, IL',
'AuthorizationKey' => YOUR_API_KEY,
]);

3. Inject the query object and get jobs

1
2
$client = new JobApis\Jobs\Client\Provider\UsajobsProvider($query);
$jobs = $client->getJobs();

This will return a Collection of Job objects.

For more detailed usage and documentation, see this project’s readme


Querying multiple job board APIs at once

Today marks the first pre-release of Jobs-Multi, a package intented to help you access multiple job board APIs in PHP with less work.

Where Jobs-Common standardizes the output of each job board, Jobs-Multi helps standardize the input, giving users access to three setters that enable you to build multiple Queries and then retrieve all the results at the same time.

What does this mean in practice? With Jobs-Multi you can do things like:

1
2
3
4
5
6
7
8
9
$client = new JobsMulti([
'Dice' => [],
'Govt' => [],
'Github' => [],
]);
$jobs = $client->setKeyword('training')
->setLocation('chicago, il')
->setPage(1, 10)
->getAllJobs();

That final $jobs variable contains an array of all jobs matching the provided criteria from Dice, Government Jobs, and Github in one go.

You can access more providers and you also have the option to query each one individually. See the jobs-multi repo on Github for more details.


Github Jobs now available in Jobs Common v2

The Github Jobs API provider has hit a version 1.0 release, which is now compatible with Jobs Common v2.

If you’re not sure what that means, basically it just means you can access jobs from Github’s job board as described below.

1. Install the package via Composer

composer require jobapis/jobs-github

2. Create a query object with all API parameters

1
2
3
4
5
$query = new JobApis\Jobs\Client\Queries\GithubQuery([
'search' => 'engineering',
'location' => 'chicago',
'page' => '1',
]);

3. Inject the query object and get jobs

1
2
$client = new JobApis\Jobs\Client\Provider\GithubProvider($query);
$jobs = $client->getJobs();

This will return a Collection of Job objects.

For more detailed usage and documentation, see this project’s readme


Jobs Common Version 2 Release

For the past year or so I’ve been meaning to invest the time in a version 2 of the Jobs Common package, and I finally got around to releasing it this morning.

What’s new in version 2?

Most of the improvements are internal. My goal was to make creating a new provider faster and easier while allowing maximum flexibility for unique parameters or response objects. Basically, this means that it’s now easier to create a new client with Jobs Common.

  • New AbstractQuery object - In version 1, attributes were set directly on the Provider class (eg: $provider->setKeyword('engineer');. In version 2, you set attributes on a new Query class and then inject that into the Provider. The AbstractQuery handles most of the heavy lifting; you just have to add all the attributes from the API and fill in a couple abstract methods.
  • AbstractProvider handles parsing responses - With the new AbstractQuery, the Provider is now primarily responsible for handling the response from the API. It basically checks that the Query is valid and uses it to make a call (still using Guzzle), then parses the response. As such, the abstract method signatures have changed here.
  • Concrete classes in a “/fixtures” folder for testing - Another improvement in version 2 is the inclusion of two Concrete classes intended to demonstrate creating a new Client and improve testability of the abstract classes.

Which providers are using version 2?

Currently we have updated the most popular providers to use jobs-common version 2:

My plan is to release a new provider every 1-2 weeks until I’ve got them all running on v2.

Other announcements

SimplyHired API indefinitely shut down

SimplyHired was sold this summer, and it looks like they’ve shut off their API indefinitely. Until I hear that it’s back up, I’m discontinuing support for the SimplyHired jobs provider.

Jobs Multi coming up

Finally, the next project in the jobs space that I’ll be tackling is an effort at standardizing the input parameters for job board APIs.

While Jobs Common standardizes the output of job boards using the schema.org JobPosting standard it makes no attempt at standardizing the input parameters used for each provider. This is intentional. When I first started the project, I tried to do this, but as I’ve used Jobs Common for a couple different use cases now, I’ve realized that it was not appropriate.

So, the Jobs Common package and each Provider will remain useful as independent packages, and Jobs Multi will make it easy to access each job board using standard language.

I don’t have many specifics yet as I’m just starting to plan for this, but my guess will be that the external API will allow for things like:

1
2
3
4
5
6
7
8
9
10
11
12
13
$allJobs = new Multi();
$providers = [
'Indeed',
'Dice',
'Careerbuilder',
];
$results = $allJobs->setKeyword('sales')
->setLocation('Memphis, TN')
->setProviders()
->perPage('100');

Because the goal will be to standardize inputs that aren’t always equivalent, there will be some opining in this package that may or may not be appreciated by users. I get it, and I’d welcome contributions or alternative solutions to this problem.

That’s all for this week. Looking forward to getting more quality open source jobs software out soon!


What's this?

A few years ago I started working on a website to help entry level job
seekers find employment. In doing so, I discovered that job board data
was hard to find and job board APIs weren’t in any way standardized.

This prompted me to start an open source project to help developers access
job board APIs
,
and now, a year later, I’ve decided to double down on that effort. As such,
this site will be the new home for my job board standardization project
as well as other related open source projects.

So what is JobApis?

JobApis is all about helping you access job board and company data faster
and more easily. On this site, I’ll post updates to the job board API clients
that Steven Maguire and I first released in 2015,
helpful “how-tos” for developers hoping to use the projects, and any other
updates that seem relevant to this audience.

JobApis is currently just me, but it’s open to the community. If you want
to get involved by contributing to one of our open source projects or
whatever else, contact me.

Who am I?

My name is Karl and I’m a software engineer with a soft spot for PHP.
I live in the Chicago area and am currently in charge of our engineering
efforts at The Graide Network.

My website - Twitter