blog.humaneguitarist.org
order PyEDS within the next 10 minutes and receive PHP_EDS for free
[Sun, 13 Oct 2013 15:43:01 +0000]
I needed a PHP wrapper for EBSCO's EDS API and there was't one.
So I wrote one, stealing from my own Python implementation, PyEDS [http://blog.humaneguitarist.org/tag/pyeds/].
This is all really informal for now, but here's the code if anyone's interested.
<?php
class php_eds {
private $__EDS = array();
private function send_request($url, $post_array, $headers) {
/* Makes a POST request via CURL for a $url with data ($post_array) and $headers.
Based on: http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl
*/
$json_data = json_encode($post_array);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$result = json_decode($result, true);
return $result;
}
function authenticateUser($UserId, $Password) {
/* Authenticates user with an EDS $UserId and $Password. */
$req_url = "https://eds-api.ebscohost.com/authservice/rest/UIDAuth";
$req_array = array("UserId" => $UserId,
"Password" => $Password,
"InterfaceID" => "WSapi");
$req_headers = array("Content-Type: application/json",
"Accept: application/json"); //without the "Accept" header the EDS API will return XML.
$req_results = $this->send_request($req_url, $req_array, $req_headers);
$this->__EDS["AuthToken"] = $req_results["AuthToken"];
$this->__EDS["AuthTimeout"] = $req_results["AuthTimeout"];
return;
}
function openSession($Profile, $Guest, $Org) {
/* Opens the EDS session with an EDS $Profile, the $Guest value ("y" or "n"), and the $Org nickname. */
$req_url = "https://eds-api.ebscohost.com/edsapi/rest/CreateSession";
$req_array = array("Profile" => $Profile,
"Guest" => $Guest,
"Org" => $Org);
$req_headers = $req_headers = array("Content-Type: application/json",
"Accept: application/json",
"x-authenticationToken: " . $this->__EDS["AuthToken"]);
$req_results = $this->send_request($req_url, $req_array, $req_headers);
$this->__EDS["SessionToken"] = $req_results["SessionToken"];
return;
}
function closeSession() {
/* Closes the EDS session. */
$req_url = "https://eds-api.ebscohost.com/edsapi/rest/EndSession";
$req_array = array();
$req_headers = $req_headers = array("Content-Type: application/json",
"Accept: application/json",
"x-authenticationToken: " . $this->__EDS["AuthToken"]);
$req_results = $this->send_request($req_url, $req_array, $req_headers);
return;
}
function rawSearch($query_string) {
/* Returns search results using an ampersand-separated URL parameter string. */
$url = "http://eds-api.ebscohost.com/edsapi/rest/Search?" . $query_string;
$headers = array("Content-Type: application/json",
"Accept: application/json",
"x-authenticationToken: " . $this->__EDS["AuthToken"],
"x-sessionToken: " . $this->__EDS["SessionToken"]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
return $result;
}
function basicSearch($query, $view="brief", $offset=1, $limit=10, $order="relevance") {
/* Returns search results using basic arguments. */
$search_json = ('{"SearchCriteria":{"Queries":[{"Term":"' . $query . '"}],"SearchMode":"bool","IncludeFacets":"n","Sort":"' . $order . '"}, "RetrievalCriteria":{"View":"' . $view . '","ResultsPerPage":' . $limit . ',"PageNumber":' . $offset . ',"Highlight":"n"},"Actions":null}');
$req_results = $this->advancedSearch($search_json);
return $req_results;
}
function advancedSearch($search_json) {
/* Returns search results using the full EDS search syntax (JSON). */
$req_url = "https://eds-api.ebscohost.com/edsapi/rest/Search";
$req_array = json_decode($search_json);
$req_headers = array("Content-Type: application/json",
"Accept: application/json",
"x-authenticationToken: " . $this->__EDS["AuthToken"],
"x-sessionToken: " . $this->__EDS["SessionToken"]);
$req_results = $this->send_request($req_url, $req_array, $req_headers);
return json_encode($req_results);
}
function retrieveRecord($accession_number, $db_code, $terms_to_highlight=null, $preferred_format="ebook-epub") {
/* Returns metadata (including abstract and full-text if applicable) for a single record. */
$req_url = "https://eds-api.ebscohost.com/edsapi/rest/Retrieve";
$req_array = array("EbookPreferredFormat" => $preferred_format,
"HighlightTerms" => $terms_to_highlight,
"An" => $accession_number,
"DbId" => $db_code);
$req_headers = array("Content-Type: application/json",
"Accept: application/json",
"x-authenticationToken: " . $this->__EDS["AuthToken"],
"x-sessionToken: " . $this->__EDS["SessionToken"]);
$req_results = $this->send_request($req_url, $req_array, $req_headers);
return json_encode($req_results);
}
function showInfo() {
/* Returns EDS limiters, sort options, search tags, expanders, and search modes available to the profile. */
$req_url = "https://eds-api.ebscohost.com/edsapi/rest/Info";
$req_array = array();
$req_headers = array("Content-Type: application/json",
"Accept: application/json",
"x-authenticationToken: " . $this->__EDS["AuthToken"],
"x-sessionToken: " . $this->__EDS["SessionToken"]);
$req_results = $this->send_request($req_url, $req_array, $req_headers);
return json_encode($req_results);
}
// PHP 5.4+ only.
function prettyPrint($json_string) {
/* Returns a pretty-printed $json_string. */
return json_encode(json_decode($json_string), JSON_PRETTY_PRINT);
}
}
?>