1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* Access Careerjet's job search from PHP |
5
|
|
|
* |
6
|
|
|
* PHP versions 4 and 5 |
7
|
|
|
* |
8
|
|
|
* LICENSE: This source file is subject to version 3.0 of the PHP license |
9
|
|
|
* that is available through the world-wide-web at the following URI: |
10
|
|
|
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
11
|
|
|
* the PHP License and are unable to obtain it through the web, please |
12
|
|
|
* send a note to [email protected] so we can mail you a copy immediately. |
13
|
|
|
* |
14
|
|
|
* |
15
|
|
|
* @package Careerjet_API |
16
|
|
|
* @author Thomas Busch <[email protected]> |
17
|
|
|
* @copyright 2007-2015 Careerjet Limited |
18
|
|
|
* @licence PHP http://www.php.net/license/3_01.txt |
19
|
|
|
* @version 3.6 |
20
|
|
|
* @link http://www.careerjet.com/partners/api/php/ |
21
|
|
|
*/ |
22
|
|
|
|
23
|
|
|
/** |
24
|
|
|
* Class to access Careerjet's job search API |
25
|
|
|
* |
26
|
|
|
* Code example: |
27
|
|
|
* |
28
|
|
|
* <code> |
29
|
|
|
* |
30
|
|
|
* require_once "Careerjet_API.php"; |
31
|
|
|
* |
32
|
|
|
* // Create a new instance of the interface for UK job offers |
33
|
|
|
* $cjapi = new Careerjet_API('en_GB'); |
34
|
|
|
* |
35
|
|
|
* |
36
|
|
|
* // Then call the search methods (see below for parameters) |
37
|
|
|
* $result = $cjapi->search( array( |
38
|
|
|
* 'keywords' => 'java manager', |
39
|
|
|
* 'location' => 'London', |
40
|
|
|
* 'affid' => '0afaf0173305e4b9', |
41
|
|
|
* ) |
42
|
|
|
* ); |
43
|
|
|
* |
44
|
|
|
* if ($result->type == 'JOBS') { |
45
|
|
|
* echo "Got ".$result->hits." jobs: \n\n"; |
46
|
|
|
* $jobs = $result->jobs; |
47
|
|
|
* |
48
|
|
|
* foreach ($jobs as &$job) { |
49
|
|
|
* echo " URL: ".$job->url."\n"; |
50
|
|
|
* echo " TITLE: ".$job->title."\n"; |
51
|
|
|
* echo " LOC: ".$job->locations."\n"; |
52
|
|
|
* echo " COMPANY: ".$job->company."\n"; |
53
|
|
|
* echo " SALARY: ".$job->salary."\n"; |
54
|
|
|
* echo " DATE: ".$job->date."\n"; |
55
|
|
|
* echo " DESC: ".$job->description."\n"; |
56
|
|
|
* echo "\n"; |
57
|
|
|
* } |
58
|
|
|
* } |
59
|
|
|
* |
60
|
|
|
* </code> |
61
|
|
|
* |
62
|
|
|
* |
63
|
|
|
* @package Careerjet_API |
64
|
|
|
* @author Thomas Busch <[email protected]> |
65
|
|
|
* @copyright 2007-2015 Careerjet Limited |
66
|
|
|
* @link http://www.careerjet.com/partners/api/php/ |
67
|
|
|
*/ |
68
|
|
|
class Careerjet_API { |
69
|
|
|
var $locale = '' ; |
70
|
|
|
var $version = '3.6'; |
71
|
|
|
var $careerjet_api_content = ''; |
72
|
|
|
|
73
|
|
|
/** |
74
|
|
|
* Creates client to Careerjet's API |
75
|
|
|
* |
76
|
|
|
* <code> |
77
|
|
|
* $cjapi = new Careerjet_API($locale); |
78
|
|
|
* </code> |
79
|
|
|
* |
80
|
|
|
* Available locales: |
81
|
|
|
* |
82
|
|
|
* <pre> |
83
|
|
|
* LOCALE LANGUAGE DEFAULT LOCATION CAREERJET SITE |
84
|
|
|
* cs_CZ Czech Czech Republic http://www.careerjet.cz |
85
|
|
|
* da_DK Danish Denmark http://www.careerjet.dk |
86
|
|
|
* de_AT German Austria http://www.careerjet.at |
87
|
|
|
* de_CH German Switzerland http://www.careerjet.ch |
88
|
|
|
* de_DE German Germany http://www.careerjet.de |
89
|
|
|
* en_AE English United Arab Emirates http://www.careerjet.ae |
90
|
|
|
* en_AU English Australia http://www.careerjet.com.au |
91
|
|
|
* en_CA English Canada http://www.careerjet.ca |
92
|
|
|
* en_CN English China http://www.career-jet.cn |
93
|
|
|
* en_HK English Hong Kong http://www.careerjet.hk |
94
|
|
|
* en_IE English Ireland http://www.careerjet.ie |
95
|
|
|
* en_IN English India http://www.careerjet.co.in |
96
|
|
|
* en_MY English Malaysia http://www.careerjet.com.my |
97
|
|
|
* en_NZ English New Zealand http://www.careerjet.co.nz |
98
|
|
|
* en_OM English Oman http://www.careerjet.com.om |
99
|
|
|
* en_PH English Philippines http://www.careerjet.ph |
100
|
|
|
* en_PK English Pakistan http://www.careerjet.com.pk |
101
|
|
|
* en_QA English Qatar http://www.careerjet.com.qa |
102
|
|
|
* en_SG English Singapore http://www.careerjet.sg |
103
|
|
|
* en_GB English United Kingdom http://www.careerjet.com |
104
|
|
|
* en_US English United States http://www.careerjet.com |
105
|
|
|
* en_ZA English South Africa http://www.careerjet.co.za |
106
|
|
|
* en_TW English Taiwan http://www.careerjet.com.tw |
107
|
|
|
* en_VN English Vietnam http://www.careerjet.vn |
108
|
|
|
* es_AR Spanish Argentina http://www.opcionempleo.com.ar |
109
|
|
|
* es_BO Spanish Bolivia http://www.opcionempleo.com.bo |
110
|
|
|
* es_CL Spanish Chile http://www.opcionempleo.cl |
111
|
|
|
* es_CR Spanish Costa Rica http://www.opcionempleo.co.cr |
112
|
|
|
* es_DO Spanish Dominican Republic http://www.opcionempleo.com.do |
113
|
|
|
* es_EC Spanish Ecuador http://www.opcionempleo.ec |
114
|
|
|
* es_ES Spanish Spain http://www.opcionempleo.com |
115
|
|
|
* es_GT Spanish Guatemala http://www.opcionempleo.com.gt |
116
|
|
|
* es_MX Spanish Mexico http://www.opcionempleo.com.mx |
117
|
|
|
* es_PA Spanish Panama http://www.opcionempleo.com.pa |
118
|
|
|
* es_PE Spanish Peru http://www.opcionempleo.com.pe |
119
|
|
|
* es_PR Spanish Puerto Rico http://www.opcionempleo.com.pr |
120
|
|
|
* es_PY Spanish Paraguay http://www.opcionempleo.com.py |
121
|
|
|
* es_UY Spanish Uruguay http://www.opcionempleo.com.uy |
122
|
|
|
* es_VE Spanish Venezuela http://www.opcionempleo.com.ve |
123
|
|
|
* fi_FI Finnish Finland http://www.careerjet.fi |
124
|
|
|
* fr_CA French Canada http://www.option-carriere.ca |
125
|
|
|
* fr_BE French Belgium http://www.optioncarriere.be |
126
|
|
|
* fr_CH French Switzerland http://www.optioncarriere.ch |
127
|
|
|
* fr_FR French France http://www.optioncarriere.com |
128
|
|
|
* fr_LU French Luxembourg http://www.optioncarriere.lu |
129
|
|
|
* fr_MA French Morocco http://www.optioncarriere.ma |
130
|
|
|
* hu_HU Hungarian Hungary http://www.careerjet.hu |
131
|
|
|
* it_IT Italian Italy http://www.careerjet.it |
132
|
|
|
* ja_JP Japanese Japan http://www.careerjet.jp |
133
|
|
|
* ko_KR Korean Korea http://www.careerjet.co.kr |
134
|
|
|
* nl_BE Dutch Belgium http://www.careerjet.be |
135
|
|
|
* nl_NL Dutch Netherlands http://www.careerjet.nl |
136
|
|
|
* no_NO Norwegian Norway http://www.careerjet.no |
137
|
|
|
* pl_PL Polish Poland http://www.careerjet.pl |
138
|
|
|
* pt_PT Portuguese Portugal http://www.careerjet.pt |
139
|
|
|
* pt_BR Portuguese Brazil http://www.careerjet.com.br |
140
|
|
|
* ru_RU Russian Russia http://www.careerjet.ru |
141
|
|
|
* ru_UA Russian Ukraine http://www.careerjet.com.ua |
142
|
|
|
* sv_SE Swedish Sweden http://www.careerjet.se |
143
|
|
|
* sk_SK Slovak Slovakia http://www.careerjet.sk |
144
|
|
|
* tr_TR Turkish Turkey http://www.careerjet.com.tr |
145
|
|
|
* uk_UA Ukrainian Ukraine http://www.careerjet.ua |
146
|
|
|
* vi_VN Vietnamese Vietnam http://www.careerjet.com.vn |
147
|
|
|
* zh_CN Chinese China http://www.careerjet.cn |
148
|
|
|
* </pre> |
149
|
|
|
* |
150
|
|
|
* @param string $locale |
151
|
|
|
*/ |
152
|
|
|
function __construct($locale = 'en_GB') |
153
|
|
|
{ |
154
|
|
|
$this->locale = $locale; |
155
|
|
|
} |
156
|
|
|
|
157
|
|
|
/** |
158
|
|
|
* @ignore |
159
|
|
|
**/ |
160
|
|
|
function call($fname , $args) |
161
|
|
|
{ |
162
|
|
|
$url = 'http://public.api.careerjet.net/'.$fname.'?locale_code='.$this->locale; |
163
|
|
|
|
164
|
|
|
if (empty($args['affid'])) { |
165
|
|
|
return (object) array( |
166
|
|
|
'type' => 'ERROR', |
167
|
|
|
'error' => "Your Careerjet affiliate ID needs to be supplied. If you don't " . |
168
|
|
|
"have one, open a free Careerjet partner account." |
169
|
|
|
); |
170
|
|
|
} |
171
|
|
|
|
172
|
|
|
foreach ($args as $key => $value) { |
173
|
|
|
$url .= '&'. $key . '='. urlencode($value); |
174
|
|
|
} |
175
|
|
|
|
176
|
|
|
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { |
177
|
|
|
$ip = $_SERVER["HTTP_CF_CONNECTING_IP"]; |
178
|
|
|
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { |
179
|
|
|
$ip = $_SERVER['HTTP_CLIENT_IP']; |
180
|
|
|
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { |
181
|
|
|
// For more info: http://en.wikipedia.org/wiki/X-Forwarded-For |
182
|
|
|
$ip = trim(array_shift(array_values(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])))); |
183
|
|
|
} elseif (isset($_SERVER['REMOTE_ADDR'])) { |
184
|
|
|
$ip = $_SERVER['REMOTE_ADDR']; |
185
|
|
|
} else { |
186
|
|
|
$ip = '::1'; |
187
|
|
|
} |
188
|
|
|
|
189
|
|
|
$url .= '&user_ip=' . $ip; |
190
|
|
|
|
191
|
|
|
if (isset($_SERVER['HTTP_USER_AGENT'])) { |
192
|
|
|
$userAgent = urlencode($_SERVER['HTTP_USER_AGENT']); |
193
|
|
|
} else { |
194
|
|
|
$userAgent = 'Mozilla%2F5.0+%28Macintosh%3B+Intel+Mac+OS+X+10_10_5%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F48.0.2564.103+Safari%2F537.36'; |
195
|
|
|
} |
196
|
|
|
$url .= '&user_agent=' . $userAgent; |
197
|
|
|
|
198
|
|
|
// determine current page |
199
|
|
|
$current_page_url = ''; |
200
|
|
|
if (!empty ($_SERVER["SERVER_NAME"]) && !empty ($_SERVER["REQUEST_URI"])) { |
201
|
|
|
$current_page_url = 'http'; |
202
|
|
|
if (!empty ($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") { |
203
|
|
|
$current_page_url .= "s"; |
204
|
|
|
} |
205
|
|
|
$current_page_url .= "://"; |
206
|
|
|
|
207
|
|
|
if (!empty ($_SERVER["SERVER_PORT"]) && $_SERVER["SERVER_PORT"] != "80") { |
208
|
|
|
$current_page_url .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; |
209
|
|
|
} else { |
210
|
|
|
$current_page_url .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; |
211
|
|
|
} |
212
|
|
|
} |
213
|
|
|
|
214
|
|
|
$header = "User-Agent: careerjet-api-client-v" . $this->version . "-php-v" . phpversion(); |
215
|
|
|
if ($current_page_url) { |
216
|
|
|
$header .= "\nReferer: " . $current_page_url; |
217
|
|
|
} |
218
|
|
|
|
219
|
|
|
$careerjet_api_context = stream_context_create(array( |
220
|
|
|
'http' => array('header' => $header) |
221
|
|
|
)); |
222
|
|
|
|
223
|
|
|
$response = file_get_contents($url, false, $careerjet_api_context); |
224
|
|
|
return json_decode($response); |
225
|
|
|
} |
226
|
|
|
|
227
|
|
|
/** |
228
|
|
|
* Performs a search using Careerjet's public search API |
229
|
|
|
* |
230
|
|
|
* Code example: |
231
|
|
|
* |
232
|
|
|
* <code> |
233
|
|
|
* $result = $cjapi->search(array( |
234
|
|
|
* 'keywords' => 'java', |
235
|
|
|
* 'location' => 'London', |
236
|
|
|
* 'pagesize' => 10, |
237
|
|
|
* 'affid' => '0afaf0173305e4b9', |
238
|
|
|
* ) |
239
|
|
|
* ); |
240
|
|
|
* </code> |
241
|
|
|
* |
242
|
|
|
* If the given location is not ambiguous, you can use this object like that: |
243
|
|
|
* |
244
|
|
|
* <code> |
245
|
|
|
* if ($result->type == 'JOBS') { |
246
|
|
|
* echo "Got ".$result->hits." jobs: \n"; |
247
|
|
|
* echo " On ".$result->pages." pages \n"; |
248
|
|
|
* $jobs = $result->jobs; |
249
|
|
|
* |
250
|
|
|
* foreach ($jobs as &$job) { |
251
|
|
|
* echo " URL: ".$job->url."\n"; |
252
|
|
|
* echo " TITLE: ".$job->title."\n"; |
253
|
|
|
* echo " LOC: ".$job->locations."\n"; |
254
|
|
|
* echo " COMPANY: ".$job->company."\n"; |
255
|
|
|
* echo " SALARY: ".$job->salary."\n"; |
256
|
|
|
* echo " DATE: ".$job->date."\n"; |
257
|
|
|
* echo " DESC: ".$job->description."\n"; |
258
|
|
|
* echo " SITE: ".$job->site."\n"; |
259
|
|
|
* echo "\n" ; |
260
|
|
|
* } |
261
|
|
|
* } |
262
|
|
|
* </code> |
263
|
|
|
* |
264
|
|
|
* If the given location is ambiguous, result contains a list of suggested locations: |
265
|
|
|
* |
266
|
|
|
* <code> |
267
|
|
|
* if ($result->type == 'LOCATIONS') { |
268
|
|
|
* echo "Suggested locations:\n"; |
269
|
|
|
* $locations = $result->locations; |
270
|
|
|
* |
271
|
|
|
* foreach ($locations as &$loc) { |
272
|
|
|
* echo $loc."\n" ; |
273
|
|
|
* } |
274
|
|
|
* } |
275
|
|
|
* </code> |
276
|
|
|
* |
277
|
|
|
* @param array $args |
278
|
|
|
* |
279
|
|
|
* map of search parameters |
280
|
|
|
* |
281
|
|
|
* Example: array( 'keywords' => 'java manager', |
282
|
|
|
* 'location' => 'london', ... ); |
283
|
|
|
* |
284
|
|
|
* All values of keys MUST be encoded either in ASCII or UTF8. |
285
|
|
|
* If you use this API within a webpage, make sure: |
286
|
|
|
* - That your pages are served in utf-8 encoding OR |
287
|
|
|
* - Your job search form begins like that : |
288
|
|
|
* <form accept-charset="UTF-8" |
289
|
|
|
* |
290
|
|
|
* |
291
|
|
|
* MANDATORY PARAMETERS |
292
|
|
|
* |
293
|
|
|
* The following parameters is mandatory: |
294
|
|
|
* - <b>affid:</b><br> |
295
|
|
|
* Affiliate ID provided by Careerjet<br> |
296
|
|
|
* Requires to open a Careerjet partner account<br> |
297
|
|
|
* http://www.careerjet.com/partners/ |
298
|
|
|
* |
299
|
|
|
* FILTERS |
300
|
|
|
* |
301
|
|
|
* All filters have default values and are not mandatory: |
302
|
|
|
* - <b>keywords:</b><br> |
303
|
|
|
* Keywords to search in job offers. Example: 'java manager'<br> |
304
|
|
|
* Default: none (Returns all offers from default country) |
305
|
|
|
* - <b>location:</b><br> |
306
|
|
|
* Location to search job offers in. Examples: 'London', 'Paris'<br> |
307
|
|
|
* Default: none (Returns all offers from default country) |
308
|
|
|
* - <b>sort:</b><br> |
309
|
|
|
* Type of sort.<br> |
310
|
|
|
* Available values are 'relevance' (default), 'date', and 'salary'. |
311
|
|
|
* - <b>start_num:</b><br> |
312
|
|
|
* Num of first offer returned in entire result space should be >= 1 and <= Number of hits<br> |
313
|
|
|
* Default: 1 |
314
|
|
|
* - <b>pagesize:</b><br> |
315
|
|
|
* Number of offers returned in one call<br> |
316
|
|
|
* Default: 20 |
317
|
|
|
* - <b>page:</b><br> |
318
|
|
|
* Current page number (should be >=1)<br> |
319
|
|
|
* If set, will override start_num<br> |
320
|
|
|
* The maxumum number of page is given by $result->pages |
321
|
|
|
* - <b>contracttype:</b><br> |
322
|
|
|
* Character code for contract types:<br> |
323
|
|
|
* 'p' - permanent job<br> |
324
|
|
|
* 'c' - contract<br> |
325
|
|
|
* 't' - temporary<br> |
326
|
|
|
* 'i' - training<br> |
327
|
|
|
* 'v' - voluntary<br> |
328
|
|
|
* Default: none (all contract types) |
329
|
|
|
* - <b>contractperiod:</b><br> |
330
|
|
|
* Character code for contract contract periods:<br> |
331
|
|
|
* 'f' - Full time<br> |
332
|
|
|
* 'p' - Part time<br> |
333
|
|
|
* Default: none (all contract periods) |
334
|
|
|
* @return object An object containing results |
335
|
|
|
* |
336
|
|
|
* @throws \Jobles\Careerjet\Exception\CareerjetException |
337
|
|
|
*/ |
338
|
|
|
function search($args) |
339
|
|
|
{ |
340
|
|
|
$result = $this->call('search' , $args); |
341
|
|
|
if ($result->type == 'ERROR') { |
342
|
|
|
throw new \Jobles\Careerjet\Exception\CareerjetException($result->error); |
343
|
|
|
} |
344
|
|
|
return $result; |
345
|
|
|
} |
346
|
|
|
} |
347
|
|
|
|