PluginProbe
Translation with DeepL API / 1.0
Translation with DeepL API v1.0
trunk 0.1.20180323 1.0 1.2.5.1 1.5.2.5 1.7.5 2.4.3.12 2.4.3.9 2.4.5
wpdeepl / client / deeplapi.class.php

deeplapi.class.php in Translation with DeepL API 1.0, at client/deeplapi.class.php

294 lines 7.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 abstract class DeepLApi extends DeepLData {
4 protected $endPoint = '';
5 private $endPointURL = false;
6 protected $authKey = '';
7 protected $log = false;
8 protected $headers = array();
9
10 protected $cache_dir = false;
11
12 protected $request = array();
13 protected $uniqid = false;
14 protected $cache_file = false;
15 protected $response = false;
16 public $cache_prefix = false;
17 protected $cache_id = false;
18
19 public $allow_cache = true;
20 public $response_type = 'fresh';
21 public $request_cache_file = '';
22 public $response_cache_file = '';
23
24 public $start_microtime = 0;
25 public $end_microtime = 0;
26 public $request_microtime = 0;
27
28 const TIMEOUT = 15;
29
30 public function __construct( $languages = array(), $log = false ) {
31 $this->authKey = DeepLConfiguration::getAPIKey();
32 //$this->request['auth_key'] = $auth_key;
33 $this->log = $log;
34
35 $this->languages = DeepLConfiguration::DefaultsAllLanguages();
36
37 if( defined( 'DOING_CRON' ) && DOING_CRON ) {
38 $this->doing_cron = true;
39 }
40 else {
41 $this->doing_cron = false;
42 }
43
44 $this->instance = $this;
45
46 $this->cache_dir = $this->getCacheDirectory();
47 }
48
49 public function wasItCached() {
50 return $this->response_type === 'cache';
51 }
52
53 public function getTimeElapsed() {
54 return $this->request_microtime;
55 }
56
57 protected function buildQuery( $mode = 'POST' ) {
58 $args = array();
59 if( count( $this->headers ) )
60 $args['headers'] = $this->headers;
61
62 $request = array( 'auth_key' => $this->authKey );
63 if( $this->request ) {
64 foreach( $this->request as $key => $value ) {
65 $request[$key] = $value;
66 }
67 }
68
69 if( $mode == 'POST' ) {
70 // fixed in 0.3 by schalipp https://wordpress.org/support/topic/translate-button-not-doing-anything/#post-10825822
71 // modified in 1.0 to send all strings in one request
72
73 $bits = array();
74 foreach( $request as $key => $value ) {
75 if( is_array( $value ) ) {
76 foreach( $value as $sub_key => $sub_value ) {
77 $bits[] = "$key=$sub_value";
78 }
79 }
80 else {
81 $bits[] = "$key=$value";
82 }
83 }
84
85 $args['body'] = implode( '&', $bits );
86 //$args['body'] = http_build_query( $request );
87 }
88 else {
89 $args['query'] = http_build_query( $request );
90 }
91
92 $args['timeout'] = self::TIMEOUT;
93
94 $this->final_request = $args;
95 $this->saveRequest();
96 return $args;
97 }
98
99 public function getRequestUniqueID() {
100 if( $this->cache_id ) {
101 $this->uniqid = $this->cache_id;
102 }
103 elseif( !$this->uniqid ) {
104 $this->uniqid = microtime();
105 }
106 return $this->uniqid;
107 }
108
109 public function isValidRequest() {
110 return true;
111 }
112
113 /*
114 protected function maybeLimitRequestSize() {
115 }
116 */
117 protected function saveRequest() {
118 if( isset( $this->request_cache_file ) ) {
119 file_put_contents( $this->request_cache_file, json_encode( $this->final_request ) );
120 }
121 }
122 protected function doRequest( $mode = 'POST' ) {
123 if( $mode == 'GET' ) {
124 $response = $this->doGETRequest();
125 }
126 else {
127 $response = $this->doPOSTRequest();
128 }
129
130 return $response;
131 }
132
133 static function getInstance() {
134 return $this->instance;
135 }
136
137 protected function setCacheID( $idstring ) {
138 $this->cache_id = $idstring;
139 }
140
141 public function setCachePrefix( $prefix = '' ) {
142 if( !empty( $prefix ) ) {
143 $this->cache_prefix = $prefix;
144 }
145 else {
146 $this->cache_prefix = '';
147 }
148 }
149
150 public function getCacheFile( $type ) {
151 if( $type == 'response' ) {
152 return $this->response_cache_file;
153 }
154 elseif( $type == 'request' ) {
155 return $this->request_cache_file;
156 }
157 }
158
159 public function setCacheNames() {
160 $cache_name = '';
161 if( !empty( $this->cache_prefix ) ) {
162 $cache_name .= $this->cache_prefix .'-';
163 }
164 $cache_name .= $this->cache_id;
165 $this->request_cache_file = trailingslashit( $this->cache_dir ) . $cache_name . '-request';
166 $this->response_cache_file = trailingslashit( $this->cache_dir ) . $cache_name . '-response';
167 }
168
169 public function request() {
170 if( $this->allow_cache )
171 $this->uniqid = $this->getRequestUniqueID();
172
173 $this->setCacheNames();
174 //plouf( $this ); die( 'opzirjizerj' );
175
176 if( $this->isCacheValid( $this->response_cache_file ) ) {
177 $this->response_type = 'cache';
178 $this->why_no_cache = false;
179 $this->result = file_get_contents( $this->response_cache_file );
180 //echo "\nIS CACHE"; //plouf( $this->result );
181 }
182 else {
183 $this->start_microtime = microtime( true );
184 //echo "\nIS FRESH";
185 $this->response_type = 'fresh';
186
187 if( $this->http_mode == 'GET' ) {
188 $response = $this->doRequest( 'GET' );
189 }
190 else {
191 $response = $this->doRequest( 'POST' );
192 }
193
194 $this->end_microtime = microtime( true );
195 $this->request_microtime = $this->end_microtime - $this->start_microtime;
196
197 if( $response['response']['code'] > 299 ) {
198 return new WP_Error( 'deeplerror', implode( ' : ', $response['response'] ) );
199 }
200
201 if( array_key_exists( 'body', $response ) && strlen( $response['body'] ) )
202 $this->result = $response['body'];
203 else
204 $this->result = false;
205
206 if( $this->result ) {
207 //echo " putting " . strlen( serialize( $this->result ) ) ." in "
208 file_put_contents( $this->response_cache_file, $this->result );
209 }
210 }
211
212 if( $this->result ) {
213 $this->result = json_decode( $this->result );
214 $this->result = ( array ) $this->result;
215 $this->result['response_type'] = $this->response_type;
216 if( $this->why_no_cache ) {
217 $this->result['why_no_cache'] = $this->why_no_cache;
218 }
219 return $this->result;
220 }
221 else {
222 return $this->response['response']['message'];
223 }
224 }
225
226 public function getRequestTime( $result_in_milliseconds = false ) {
227 if( !$this->request_microtime ) {
228 return false;
229 }
230
231 if( $result_in_milliseconds ) {
232 return floatval( $this->request_microtime );
233 }
234 else {
235 return floatval( $this->request_microtime/1000 );
236 }
237 }
238
239 public function getEndPointURL() {
240 if( !$this->endPointURL ) {
241 if( $this->endPoint === '' ) {
242 $this->endPointURL = DEEPL_API_URL;
243 }
244 else {
245 $this->endPointURL = trailingslashit( DEEPL_API_URL ) . $this->endPoint;
246 }
247 }
248
249 return $this->endPointURL;
250 }
251 /*
252 * send a POST request
253 *
254 * @since 0.1
255 */
256 public function doPOSTRequest( $args = array() ) {
257 $this->headers['Content-Type'] = 'application/x-www-form-urlencoded';
258 // $this->headers['Content-Length'] = strlen( $this->request['text'] );
259 $args = $this->buildQuery( 'POST' );
260
261 //plouf( $args, "ARGS POSTS" ); plouf( $this ); //die( 'ok izpepiezrir' );
262
263 $response = wp_remote_post( $this->getEndPointURL(), $args );
264
265 if ( is_wp_error( $response ) ) {
266 $this->response = $response->get_error_message();
267 plouf( $args, $this->getEndPointURL() );
268 die( 'do post requestijezpoirer' );
269 } else {
270 $this->response = $response;
271 }
272 return $response;
273 }
274
275 /*
276 * send a GET request
277 *
278 * @since 0.1
279 */
280 public function doGETRequest() {
281 $args = $this->buildQuery( 'GET' );
282 $url = $this->getEndPointURL() . '?' . $args['query'];
283 unset( $args['query'] );
284
285 //plouf( $args, "ARGS GET" ); die( 'ok' );
286 $response = wp_remote_get( $url, $args );
287 if ( is_wp_error( $response ) ) {
288 $this->response = $response->get_error_message();
289 } else {
290 $this->response = $response;
291 }
292 return $response;
293 }
294 }