function parse_response($api, $params) { global $records; $page = $params['from'] / $params['size'] + 1; echo "Page {$page}\n"; //compare the individual request parameters into k=>v pairs to the URL $qparams = array(); foreach ($params as $k => $v) { $qparams[] = "{$k}=" . urlencode($v); } $service = $api . implode('&', $qparams); //request JSON from API $json = file_get_contents($service); $data = json_decode($json); //iterate through results foreach ($data->results as $result) { $record = array(); $record['id'] = $result->priref; $record['uri'] = "http://data.fitzmuseum.cam.ac.uk/id/object/{$result->priref}"; $record['objectnumber'] = $result->ObjectNumber; $record['title'] = "Fitzwilliam Museum - Object {$result->ObjectNumber}"; $imageCount = 0; foreach ($result->images->thumbnailURI as $url) { switch ($imageCount) { case 0: $record['obv_image'] = $url; break; case 1: $record['rev_image'] = $url; } $imageCount++; } //begin screen scraping $url = "http://webapps.fitzmuseum.cam.ac.uk/explorer/index.php?oid={$result->priref}"; $fields = parse_html($url); if (isset($fields['reference'])) { $record['reference'] = $fields['reference']; } if (isset($fields['coinType'])) { $record['cointype'] = $fields['coinType']; } if (isset($fields['weight'])) { $record['weight'] = $fields['weight']; } if (isset($fields['axis'])) { $record['axis'] = $fields['axis']; } $records[] = $record; } //var_dump($records); //if there are more pages to parse, curse function $numFound = $data->total; if ($params['from'] + $params['size'] <= $numFound) { $params['from'] = $params['from'] + $params['size']; parse_response($api, $params); } }
/** * returns complete cURL response of POST request * * @since ADD MVC 0.5 */ public function post_response($url, $post) { $this->init($url); curl_setopt($this->curl, CURLOPT_HEADER, 1); curl_setopt($this->curl, CURLOPT_REFERER, $url); curl_setopt($this->curl, CURLOPT_POST, true); curl_setopt($this->curl, CURLOPT_POSTFIELDS, $post); $response = $this->exec(); return parse_response($response); }
<html> <body bgcolor="white"> <form action="<?php echo $_SERVER['PHP_SELF']; ?> " method="GET"> Login: <input type="text" name="login"><br /> Password: <input type="password" name="password"><br /> <input type="submit" value="Login"> </form> <?php define('__SERVER__', "localhost"); define('__PORT__', 80); if (count($_GET)) { include "/home/rei/www/pres2/presentations/slides/web_services/client.inc.php"; $ret = make_request(); if (parse_response($ret) === TRUE) { echo "Login Successful"; } else { echo "Authentication Failure"; } } ?> </body> </html>
function urlload_($connomains, $p = array()) { if (!is_array($connomains)) { $close = false; if (!isset($p["_"]) || $p["_"] == null) { $close = true; $p["_"] = curl_init(); } url_setopts($p["_"], $p); if (isset($p["limit"]) && $p["limit"] > 0) { //use limit curl_setopt($p["_"], CURLOPT_RETURNTRANSFER, 0); curl_setopt($p["_"], CURLOPT_BUFFERSIZE, $p["limit"]); $cwriter = isset($p["writer"]) && $p["writer"] !== "" ? $p["writer"] : "urlwriter"; curl_setopt($p["_"], CURLOPT_WRITEFUNCTION, array($w = new $cwriter($p["limit"]), "__invoke")); } curl_setopt($p["_"], CURLOPT_URL, $connomains); $res = curl_exec($p["_"]); $info = curl_getinfo($p["_"]); if (isset($p["limit"]) && $p["limit"] > 0 && $info["http_code"] != 404) { $res = $w->content; } else { if (curl_errno($p["_"]) || $info["http_code"] == 404) { $res = ""; trigger_error("CURL Error: " . curl_errno($p["_"]) . " - " . curl_error($p["_"]), E_USER_WARNING); } else { if (isset($p["result"]) && $p["result"] && strlen($res) == 0) { trigger_error("CURL Error: " . curl_errno($p["_"]) . " - " . curl_error($p["_"]), E_USER_WARNING); } } } if ($close) { curl_close($p["_"]); $p["_"] = null; } if (isset($p["getheaders"]) && $p["getheaders"] === true) { return parse_response($res); } if (isset($p["getinfo"]) && $p["getinfo"] === true) { return array($info, $res); } return $res; } else { $mh = curl_multi_init(); foreach ($connomains as $i => $url) { $conn[$i] = curl_init($url); $configs = isset($p["setup"]) ? call_user_func($p["setup"], $i, $url) : array(); url_setopts($conn[$i], array_merge($p, $configs)); curl_multi_add_handle($mh, $conn[$i]); } do { $mrc = curl_multi_exec($mh, $active); if (isset($p["waitbefore"]) && $p["waitbefore"] > 0) { usleep($p["waitbefore"] * 1000000); } } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active and $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } if ($mrc != CURLM_OK) { trigger_error("Curl multi read error {$mrc}\n", E_USER_WARNING); } foreach ($connomains as $i => $url) { if (($err = curl_error($conn[$i])) == '') { $res[$i] = curl_multi_getcontent($conn[$i]); } else { trigger_error("Curl error on handle {$i}: {$err}\n", E_USER_WARNING); } curl_multi_remove_handle($mh, $conn[$i]); curl_close($conn[$i]); } curl_multi_close($mh); return $res; } }