1 | <?php |
||
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 |