# @author: Simon Bowie # @purpose: Performs functions against the European Patent Office's Open Patent Services (OPS) API # @acknowledgements: # OPS documented at https://www.epo.org/searching-for-patents/data/web-services/ops.html # OPS RESTful API specification at http://documents.epo.org/projects/babylon/eponet.nsf/0/F3ECDCC915C9BCD8C1258060003AA712/$File/ops_v3.2_documentation_-_version_1.3.18_en.pdf # OPS API functions list at https://developers.epo.org/ops-v3-2/apis function get_access_token() { // OPS API credentials (details at http://documents.epo.org/projects/babylon/eponet.nsf/0/F3ECDCC915C9BCD8C1258060003AA712/$File/ops_v3.2_documentation_-_version_1.3.18_en.pdf) $ops_url = $_ENV["OPS_URL"] . '3.2/auth/accesstoken'; $auth = base64_encode($_ENV["CONSUMER_KEY"] . ":" . $_ENV["CONSUMER_SECRET"]); // Set up API call $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ops_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic $auth","Content-Type: application/x-www-form-urlencoded")); curl_setopt($ch, CURLOPT_POSTFIELDS, 'grant_type=client_credentials'); curl_setopt($ch, CURLOPT_POST, true); // Give back curl result $response = curl_exec($ch); curl_close($ch); // Turn the API response into useful Json $json = json_decode($response); $access_token = $json->access_token; return $access_token; } function get_publication_details($document_reference) { $access_token = get_access_token(); // OPS API credentials (details at http://documents.epo.org/projects/babylon/eponet.nsf/0/F3ECDCC915C9BCD8C1258060003AA712/$File/ops_v3.2_documentation_-_version_1.3.16_en.pdf) $ops_url = $_ENV["OPS_URL"] . 'rest-services/published-data/publication/docdb/' . $document_reference . '/biblio'; // Set up API call $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ops_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $access_token", "Accept: application/json")); // Give back curl result $response = curl_exec($ch); curl_close($ch); if (strpos($response,"No results found") === false ) { global $output; // Turn the API response into useful Json $json = json_decode($response); // For each invention title, check if it's in the original language if (isset($json->{'ops:world-patent-data'}->{'exchange-documents'}->{'exchange-document'}->{'bibliographic-data'}->{'invention-title'})){ foreach ($json->{'ops:world-patent-data'}->{'exchange-documents'}->{'exchange-document'}->{'bibliographic-data'}->{'invention-title'} as $invention_title){ if ((isset($invention_title->{'@lang'})) && ($invention_title->{'@lang'} === 'ol')){ $output['original_title'] = $invention_title->{'$'}; } } } // For each abstract, check if it's in the original language if (isset($json->{'ops:world-patent-data'}->{'exchange-documents'}->{'exchange-document'}->{'abstract'})){ foreach ($json->{'ops:world-patent-data'}->{'exchange-documents'}->{'exchange-document'}->{'abstract'} as $abstract){ if ((isset($abstract->{'@lang'})) && ($abstract->{'@lang'} === 'ol')){ $output['original_abstract'] = $abstract->p->{'$'}; } } } return $output; } } function check_for_images($document_reference) { $access_token = get_access_token(); // OPS API credentials (details at http://documents.epo.org/projects/babylon/eponet.nsf/0/F3ECDCC915C9BCD8C1258060003AA712/$File/ops_v3.2_documentation_-_version_1.3.16_en.pdf) $ops_url = $_ENV["OPS_URL"] . 'rest-services/published-data/publication/docdb/' . $document_reference . '/images'; // Set up API call $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ops_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $access_token")); // Give back curl result $response = curl_exec($ch); curl_close($ch); if (strpos($response,"No results found") === false ) { return $response; } } function get_images($document_reference){ $access_token = get_access_token(); // OPS API credentials (details at http://documents.epo.org/projects/babylon/eponet.nsf/0/F3ECDCC915C9BCD8C1258060003AA712/$File/ops_v3.2_documentation_-_version_1.3.16_en.pdf) $ops_url = $_ENV["OPS_URL"] . 'rest-services/published-data/publication/docdb/' . $document_reference . '/images'; // Set up API call $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ops_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $access_token")); // Give back curl result $response = curl_exec($ch); curl_close($ch); if (strpos($response,"No results found") === false ) { // Turn the API response into useful XML $xml = new SimpleXMLElement($response); // Retrieve image path from that XML $drawings_url = $_ENV["OPS_URL_IMAGES"] . '3.2/rest-services/' . $xml->xpath("///ops:document-instance[@desc='Drawing']/@link")[0][0]->__toString() . '?Range=1'; // Set up API call $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $drawings_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $access_token","Accept: application/pdf")); // Give back curl result $response = curl_exec($ch); curl_close($ch); // Return the PDF response return $response; } } ?>