A search interface for data from the Politics of Patents case study (part of Copim WP6): this parses data from the archive of RTF files and provides additional data from the European Patent Office API. https://patents.copim.ac.uk
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

158 lines
5.3KB

  1. <?php
  2. # @name: ops_api.php
  3. # @version: 0.1
  4. # @creation_date: 2021-09-24
  5. # @license: The MIT License <https://opensource.org/licenses/MIT>
  6. # @author: Simon Bowie <ad7588@coventry.ac.uk>
  7. # @purpose: Performs functions against the European Patent Office's Open Patent Services (OPS) API
  8. # @acknowledgements:
  9. # OPS documented at https://www.epo.org/searching-for-patents/data/web-services/ops.html
  10. # OPS RESTful API specification at http://documents.epo.org/projects/babylon/eponet.nsf/0/F3ECDCC915C9BCD8C1258060003AA712/$File/ops_v3.2_documentation_-_version_1.3.16_en.pdf
  11. # OPS API functions list at https://developers.epo.org/ops-v3-2/apis
  12. function get_access_token() {
  13. // 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)
  14. $ops_url = $_ENV["OPS_URL"] . '3.2/auth/accesstoken';
  15. $auth = base64_encode($_ENV["CONSUMER_KEY"] . ":" . $_ENV["CONSUMER_SECRET"]);
  16. // Set up API call
  17. $ch = curl_init();
  18. curl_setopt($ch, CURLOPT_URL, $ops_url);
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  20. curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic $auth","Content-Type: application/x-www-form-urlencoded"));
  21. curl_setopt($ch, CURLOPT_POSTFIELDS, 'grant_type=client_credentials');
  22. curl_setopt($ch, CURLOPT_POST, true);
  23. // Give back curl result
  24. $response = curl_exec($ch);
  25. curl_close($ch);
  26. // Turn the API response into useful Json
  27. $json = json_decode($response);
  28. $access_token = $json->access_token;
  29. return $access_token;
  30. }
  31. function get_publication_details($document_reference) {
  32. $access_token = get_access_token();
  33. // 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)
  34. $ops_url = $_ENV["OPS_URL"] . 'rest-services/published-data/publication/docdb/' . $document_reference . '/biblio';
  35. // Set up API call
  36. $ch = curl_init();
  37. curl_setopt($ch, CURLOPT_URL, $ops_url);
  38. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  39. curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $access_token", "Accept: application/json"));
  40. // Give back curl result
  41. $response = curl_exec($ch);
  42. curl_close($ch);
  43. if (strpos($response,"No results found") === false ) {
  44. global $output;
  45. // Turn the API response into useful Json
  46. $json = json_decode($response);
  47. // For each invention title, check if it's in the original language
  48. foreach ($json->{'ops:world-patent-data'}->{'exchange-documents'}->{'exchange-document'}->{'bibliographic-data'}->{'invention-title'} as $invention_title){
  49. if ((isset($invention_title->{'@lang'})) && ($invention_title->{'@lang'} === 'ol')){
  50. $output['original_title'] = $invention_title->{'$'};
  51. }
  52. }
  53. // For each abstract, check if it's in the original language
  54. foreach ($json->{'ops:world-patent-data'}->{'exchange-documents'}->{'exchange-document'}->{'abstract'} as $abstract){
  55. if ((isset($abstract->{'@lang'})) && ($abstract->{'@lang'} === 'ol')){
  56. $output['original_abstract'] = $abstract->p->{'$'};
  57. }
  58. }
  59. return $output;
  60. }
  61. }
  62. function check_for_images($document_reference) {
  63. $access_token = get_access_token();
  64. // 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)
  65. $ops_url = $_ENV["OPS_URL"] . 'rest-services/published-data/publication/docdb/' . $document_reference . '/images';
  66. // Set up API call
  67. $ch = curl_init();
  68. curl_setopt($ch, CURLOPT_URL, $ops_url);
  69. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  70. curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $access_token"));
  71. // Give back curl result
  72. $response = curl_exec($ch);
  73. curl_close($ch);
  74. if (strpos($response,"No results found") === false ) {
  75. return $response;
  76. }
  77. }
  78. function get_images($document_reference){
  79. $access_token = get_access_token();
  80. // 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)
  81. $ops_url = $_ENV["OPS_URL"] . 'rest-services/published-data/publication/docdb/' . $document_reference . '/images';
  82. // Set up API call
  83. $ch = curl_init();
  84. curl_setopt($ch, CURLOPT_URL, $ops_url);
  85. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  86. curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $access_token"));
  87. // Give back curl result
  88. $response = curl_exec($ch);
  89. curl_close($ch);
  90. if (strpos($response,"No results found") === false ) {
  91. // Turn the API response into useful XML
  92. $xml = new SimpleXMLElement($response);
  93. // Retrieve image path from that XML
  94. $drawings_url = $_ENV["OPS_URL_IMAGES"] . '3.2/rest-services/' . $xml->xpath("///ops:document-instance[@desc='Drawing']/@link")[0][0]->__toString() . '?Range=1';
  95. // Set up API call
  96. $ch = curl_init();
  97. curl_setopt($ch, CURLOPT_URL, $drawings_url);
  98. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  99. curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $access_token","Accept: application/pdf"));
  100. // Give back curl result
  101. $response = curl_exec($ch);
  102. curl_close($ch);
  103. // Return the PDF response
  104. return $response;
  105. }
  106. }
  107. ?>