KSamsok PHP Advanced Usage
26th January 2016This is the second part out of two introducing the KSamsok-PHP API library, the first part is KSamsök-PHP: the Basics.
Extending
When KSamsök-PHP does not have a method for a request you want to preform against the K-Samsök API extending KSamsök-PHP might be the solution. Extending KSamsök-PHP allows you to use KSamsök-PHP functions for formating URIs, validate responds, parsing and more, together with your own custom requests.
Extending the kSamsok
class gives your new child class access to a set of protected methods useful to you.
customKSamsok extends kSamsok {
// your custom methods
}
In the following example we will write a method for retrieving the first 250 photos of the media type image/jpeg
, that has thumbnails based on a text-based search string. Note that KSamsök-PHP can only parse the presentation format so make sure you always append &recordSchema=presentation
.
Preparing the URL
The prepareUrl()
deals with encoding/whitespace in your URL and make sure it’s valid, always use it! Note that we access the API key with $this->key
and the endpoint with $this->url
.
customKSamok extends kSamsok {
public function photoSearch($text) {
$url = $this->url . 'x-api=' . $this->key . '&method=search&hitsPerPage=250&query=itemType="Foto"%20and%20text="' . $text . '"%20and%20mediaType="image/jpeg"%20and%20thumbnailExists=j&recordSchema=presentation'; // build the URL
$url = $this->prepareUrl($url); // Fix possible encoding/whitespace issues
}
}
Validating the Response
validResponse()
validates a response, returning false
if the resource is inaccessible or broken.
customKSamok extends kSamsok {
public function photoSearch($text) {
$url = $this->url . 'x-api=' . $this->key . '&method=search&hitsPerPage=250&query=itemType="Foto"%20and%20text="' . $text . '"%20and%20mediaType="image/jpeg"%20and%20thumbnailExists=j&recordSchema=presentation'; // build the URL
$url = $this->prepareUrl($url); // Fix possible encoding/whitespace issues
if (!$this->validResponse($urlQuery)) { // return false if record is inaccessible
return false;
}
}
}
Parsing the Results
KSamsök-PHP parses each item(record) one by one as a SimpleXMLElement object using its parseRecord()
method. Note the use of killXmlNamespace()
.
customKSamok extends kSamsok {
public function photoSearch($text) {
$url = $this->url . 'x-api=' . $this->key . '&method=search&hitsPerPage=250&query=itemType="Foto"%20and%20text="' . $text . '"%20and%20mediaType="image/jpeg"%20and%20thumbnailExists=j&recordSchema=presentation'; // build the URL
$url = $this->prepareUrl($url); // Fix possible encoding/withespace issues
if (!$this->validResponse($urlQuery)) { // return false if recorce is inaccessible
return false;
}
$xml = file_get_contents($url); // get the resource contents
$xml = $this->killXmlNamespace($xml); // bypass XML-Namespaces for the SimpleXMLElement class
$xml = new SimpleXMLElement($xml); // create the SimpleXMLElement object
$result[] = array(); // array container for the parsed items
foreach ($xml->records->record as $item) { // loop through all the items
$result[] = $this->parseRecord($item); // push parsed item to result array
}
return $result;
}
}
Usage
Using your new method is now as easy as using any of the basic ones:
$kSamsok = new customKSamok('test');
$searchResultArray = $kSamsok->photoSearch('kyrka');
Now have fun and build something, checkout the Documentation and report any evil bugs at Github.
Previous posts about K-Samsök and heritage data: