mirror of
				https://github.com/mashirozx/sakura.git
				synced 2025-05-29 01:49:21 +08:00 
			
		
		
		
	Merge pull request #142 from spirit1431007/pr-branch
change curl to wp_remote_post
This commit is contained in:
		
						commit
						8ffa252dcd
					
				| @ -79,7 +79,6 @@ window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)} | ||||
| </head> | ||||
| <body <?php body_class(); ?>>
 | ||||
|     <?php if(get_template_directory_uri() != get_site_url().'/wp-content/themes/Sakura') echo '<div style="position:fixed;height:100%;width:100%;top:0;left:0;font-size:20px;z-index:999999;background-color: #fff;">Plz rename the theme folder name as <span style="color:red">Sakura</span>!<br>请将主题文件夹名改为 <span style="color:red">Sakura</span>!</div>'; ?>
 | ||||
|     <?php if(!function_exists('curl_exec')) echo '<div style="position:fixed;height:100%;width:100%;top:0;left:0;font-size:20px;z-index:999999;background-color: #fff;">主题需要 PHP 的 curl 支持!请在 `php.ini` 里开启或者联系你的主机商。<br>The theme requires PHP\'s curl support! Please turn on in `php.ini` or contact your hosting provider.</div>'; ?>
 | ||||
| 		<div class="scrollbar" id="bar"></div> | ||||
| 	<section id="main-container"> | ||||
| 		<?php  | ||||
|  | ||||
							
								
								
									
										267
									
								
								inc/api.php
									
									
									
									
									
								
							
							
						
						
									
										267
									
								
								inc/api.php
									
									
									
									
									
								
							| @ -4,84 +4,77 @@ | ||||
|  * Router | ||||
|  */ | ||||
| add_action('rest_api_init', function () { | ||||
|   register_rest_route('sakura/v1', '/image/upload', array( | ||||
|       'methods' => 'POST', | ||||
|       'callback' => 'upload_image', | ||||
|   )); | ||||
|   register_rest_route('sakura/v1', '/cache_search/json', array( | ||||
|     'methods' => 'GET', | ||||
|     'callback' => 'cache_search_json', | ||||
|   )); | ||||
|     register_rest_route('sakura/v1', '/image/upload', array( | ||||
|         'methods' => 'POST', | ||||
|         'callback' => 'upload_image', | ||||
|     )); | ||||
|     register_rest_route('sakura/v1', '/cache_search/json', array( | ||||
|         'methods' => 'GET', | ||||
|         'callback' => 'cache_search_json', | ||||
|     )); | ||||
| }); | ||||
| 
 | ||||
| /** | ||||
|  * Image uploader response | ||||
|  */ | ||||
| function upload_image(WP_REST_Request $request) | ||||
| { | ||||
|   // see: https://developer.wordpress.org/rest-api/requests/
 | ||||
| function upload_image(WP_REST_Request $request) { | ||||
|     // see: https://developer.wordpress.org/rest-api/requests/
 | ||||
| 
 | ||||
|   // handle file params $file === $_FILES
 | ||||
|   /** | ||||
|    * curl \ | ||||
|    *   -F "filecomment=This is an img file" \ | ||||
|    *   -F "cmt_img_file=@screenshot.jpg" \ | ||||
|    *   https://dev.2heng.xin/wp-json/sakura/v1/image/upload | ||||
|    */ | ||||
|   // $file = $request->get_file_params();
 | ||||
|   if ( !check_ajax_referer('wp_rest', '_wpnonce', false) ) { | ||||
|     $output = array( | ||||
|       'status' => 403, | ||||
|       'success' => false, | ||||
|       'message' => 'Unauthorized client.', | ||||
|       'link' => "https://view.moezx.cc/images/2019/11/14/step04.md.png", | ||||
|       'proxy' => akina_option('cmt_image_proxy') . "https://view.moezx.cc/images/2019/11/14/step04.md.png", | ||||
|     ); | ||||
|     $result = new WP_REST_Response($output, 403); | ||||
|     // handle file params $file === $_FILES
 | ||||
|     /** | ||||
|      * curl \ | ||||
|      *   -F "filecomment=This is an img file" \ | ||||
|      *   -F "cmt_img_file=@screenshot.jpg" \ | ||||
|      *   https://dev.2heng.xin/wp-json/sakura/v1/image/upload | ||||
|      */ | ||||
|     // $file = $request->get_file_params();
 | ||||
|     if (!check_ajax_referer('wp_rest', '_wpnonce', false)) { | ||||
|         $output = array( | ||||
|             'status' => 403, | ||||
|             'success' => false, | ||||
|             'message' => 'Unauthorized client.', | ||||
|             'link' => "https://view.moezx.cc/images/2019/11/14/step04.md.png", | ||||
|             'proxy' => akina_option('cmt_image_proxy') . "https://view.moezx.cc/images/2019/11/14/step04.md.png", | ||||
|         ); | ||||
|         $result = new WP_REST_Response($output, 403); | ||||
|         $result->set_headers(array('Content-Type' => 'application/json')); | ||||
|         return $result; | ||||
|     } | ||||
| 
 | ||||
|     switch (akina_option("img_upload_api")) { | ||||
|         case 'imgur': | ||||
|             $image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]); | ||||
|             $API_Request = Imgur_API($image); | ||||
|             break; | ||||
|         case 'smms': | ||||
|             $image = $_FILES; | ||||
|             $API_Request = SMMS_API($image); | ||||
|             break; | ||||
|         case 'chevereto': | ||||
|             $image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]); | ||||
|             $API_Request = Chevereto_API($image); | ||||
|             break; | ||||
|     } | ||||
| 
 | ||||
|     $result = new WP_REST_Response($API_Request, $API_Request->status); | ||||
|     $result->set_headers(array('Content-Type' => 'application/json')); | ||||
|     return $result; | ||||
|   } | ||||
| 
 | ||||
|   switch (akina_option("img_upload_api")) { | ||||
|     case 'imgur': | ||||
|       $image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]); | ||||
|       $API_Request = Imgur_API($image); | ||||
|       break; | ||||
|     case 'smms': | ||||
|       $image = $_FILES; | ||||
|       $API_Request = SMMS_API($image); | ||||
|       break; | ||||
|     case 'chevereto': | ||||
|       $image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]); | ||||
|       $API_Request = Chevereto_API($image); | ||||
|       break; | ||||
|   } | ||||
| 
 | ||||
|   $result = new WP_REST_Response($API_Request, $API_Request->status); | ||||
|   $result->set_headers(array('Content-Type' => 'application/json')); | ||||
|   return $result; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Chevereto upload interface | ||||
|  */ | ||||
| function Chevereto_API($image) | ||||
| { | ||||
|     $fields = array( | ||||
|       'source' => base64_encode($image), | ||||
|       'key' => akina_option('chevereto_api_key') | ||||
| function Chevereto_API($image) { | ||||
|     $upload_url = akina_option('cheverto_url').'/api/1/upload'; | ||||
|     $args = array( | ||||
|         'body' => array( | ||||
|             'source' => base64_encode($image), | ||||
|             'key' => akina_option('chevereto_api_key') | ||||
|         ) | ||||
|     ); | ||||
| 
 | ||||
|     $ch = curl_init(); | ||||
|     curl_setopt($ch, CURLOPT_URL, akina_option('cheverto_url').'/api/1/upload'); | ||||
|     curl_setopt($ch, CURLOPT_POST, true); | ||||
|     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||||
|     curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); | ||||
| 
 | ||||
|     $reply = curl_exec($ch); | ||||
|     curl_close($ch); | ||||
| 
 | ||||
|     $reply = json_decode($reply); | ||||
|     $response = wp_remote_post($upload_url, $args); | ||||
|     $reply = json_decode($response["body"]); | ||||
| 
 | ||||
|     if ($reply->status_txt == 'OK' && $reply->status_code == 200) { | ||||
|         $status = 200; | ||||
| @ -109,21 +102,20 @@ function Chevereto_API($image) | ||||
| /** | ||||
|  * Imgur upload interface | ||||
|  */ | ||||
| function Imgur_API($image) | ||||
| { | ||||
| function Imgur_API($image) { | ||||
|     $client_id = akina_option('imgur_client_id'); | ||||
|     $upload_url = akina_option('imgur_upload_image_proxy'); | ||||
|     $args = array( | ||||
|         'headers' => array( | ||||
|             'Authorization' => 'Client-ID ' . $client_id | ||||
|         ), | ||||
|         'body' => array( | ||||
|             'image' => base64_encode($image) | ||||
|         ) | ||||
|     ); | ||||
| 
 | ||||
|     $ch = curl_init(); | ||||
|     curl_setopt($ch, CURLOPT_URL, akina_option('imgur_upload_image_proxy')); | ||||
|     curl_setopt($ch, CURLOPT_POST, true); | ||||
|     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||||
|     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id)); | ||||
|     curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image))); | ||||
| 
 | ||||
|     $reply = curl_exec($ch); | ||||
|     curl_close($ch); | ||||
| 
 | ||||
|     $reply = json_decode($reply); | ||||
|     $response = wp_remote_post($upload_url, $args); | ||||
|     $reply = json_decode($response["body"]); | ||||
| 
 | ||||
|     if ($reply->success && $reply->status == 200) { | ||||
|         $status = 200; | ||||
| @ -151,66 +143,66 @@ function Imgur_API($image) | ||||
| /** | ||||
|  * smms upload interface | ||||
|  */ | ||||
| function SMMS_API($image) | ||||
| { | ||||
|   $client_id = akina_option('smms_client_id'); | ||||
| function SMMS_API($image) { | ||||
|     $client_id = akina_option('smms_client_id'); | ||||
|     $upload_url = "https://sm.ms/api/v2/upload"; | ||||
|     $filename = $image['cmt_img_file']['name']; | ||||
|     $filedata = $image['cmt_img_file']['tmp_name']; | ||||
|     $Boundary = wp_generate_password(); | ||||
|     $bits = file_get_contents($filedata); | ||||
| 
 | ||||
|   $filename = $image['cmt_img_file']['name']; | ||||
|   $filedata = $image['cmt_img_file']['tmp_name']; | ||||
|   $filesize = $image['cmt_img_file']['size']; | ||||
|     $headers = array(); | ||||
|     array_push($headers, "Content-Type: multipart/form-data; boundary=$Boundary"); | ||||
|     array_push($headers, ''); | ||||
|     array_push($headers, "Authorization: Basic " . $client_id); | ||||
|     array_push($headers, ''); | ||||
|     array_push($headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97"); | ||||
|     $headers = implode("\r\n", $headers); | ||||
| 
 | ||||
|   $url = "https://sm.ms/api/v2/upload"; | ||||
|   $headers = array(); | ||||
|   array_push($headers, "Content-Type: multipart/form-data"); | ||||
|   array_push($headers, "Authorization: Basic " . $client_id); | ||||
|   array_push($headers, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97"); | ||||
|     $fields = array(); | ||||
|     array_push($fields, "--" . $Boundary); | ||||
|     array_push($fields, "Content-Disposition: form-data; name=\"smfile\"; filename=\"$filename\"");
 | ||||
|     array_push($fields, ''); | ||||
|     array_push($fields, $bits); | ||||
|     array_push($fields, ''); | ||||
|     array_push($fields, "--" . $Boundary . "--"); | ||||
|     $fields = implode("\r\n", $fields); | ||||
| 
 | ||||
|   $finfo = new \finfo(FILEINFO_MIME_TYPE); | ||||
|   $mimetype = $finfo->file($filedata); | ||||
|     $args = array( | ||||
|         'headers' => $headers, | ||||
|         'body' => $fields | ||||
|     ); | ||||
| 
 | ||||
|   $fields = array('smfile' => curl_file_create($filedata, $mimetype, $filename)); | ||||
|     $response = wp_remote_post($upload_url, $args); | ||||
|     $reply = json_decode($response["body"]); | ||||
| 
 | ||||
|   $ch = curl_init(); | ||||
|   curl_setopt($ch, CURLOPT_URL, $url); | ||||
|   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||||
|   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | ||||
|   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | ||||
|   curl_setopt($ch, CURLOPT_POST, true); | ||||
|   curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); | ||||
|   curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); | ||||
| 
 | ||||
|   $reply = curl_exec($ch); | ||||
|   curl_close($ch); | ||||
| 
 | ||||
|   $reply = json_decode($reply); | ||||
| 
 | ||||
|   if ($reply->success && $reply->code == 'success') { | ||||
|     $status = 200; | ||||
|     $success = true; | ||||
|     $message = $reply->message; | ||||
|     $link = $reply->data->url; | ||||
|     $proxy = akina_option('cmt_image_proxy') . $link; | ||||
|   } else if (preg_match("/Image upload repeated limit/i", $reply->message, $matches)) { | ||||
|     $status = 200; // sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code,并单独把 url 放进一个字段
 | ||||
|     $success = true; | ||||
|     $message = $reply->message; | ||||
|     $link = str_replace('Image upload repeated limit, this image exists at: ', '', $reply->message); | ||||
|     $proxy = akina_option('cmt_image_proxy') . $link; | ||||
|   } else { | ||||
|     $status = 400; | ||||
|     $success = false; | ||||
|     $message = $reply->message; | ||||
|     $link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif'; | ||||
|     $proxy = akina_option('cmt_image_proxy') . $link; | ||||
|   } | ||||
|   $output = array( | ||||
|     'status' => $status, | ||||
|     'success' => $success, | ||||
|     'message' => $message, | ||||
|     'link' => $link, | ||||
|     'proxy' => $proxy, | ||||
|   ); | ||||
|   return $output; | ||||
|     if ($reply->success && $reply->code == 'success') { | ||||
|         $status = 200; | ||||
|         $success = true; | ||||
|         $message = $reply->message; | ||||
|         $link = $reply->data->url; | ||||
|         $proxy = akina_option('cmt_image_proxy') . $link; | ||||
|     } else if (preg_match("/Image upload repeated limit/i", $reply->message, $matches)) { | ||||
|         $status = 200; // sm.ms 接口不规范,建议检测到重复的情况下返回标准化的 code,并单独把 url 放进一个字段
 | ||||
|         $success = true; | ||||
|         $message = $reply->message; | ||||
|         $link = str_replace('Image upload repeated limit, this image exists at: ', '', $reply->message); | ||||
|         $proxy = akina_option('cmt_image_proxy') . $link; | ||||
|     } else { | ||||
|         $status = 400; | ||||
|         $success = false; | ||||
|         $message = $reply->message; | ||||
|         $link = 'https://view.moezx.cc/images/2019/10/28/default_d_h_large.gif'; | ||||
|         $proxy = akina_option('cmt_image_proxy') . $link; | ||||
|     } | ||||
|     $output = array( | ||||
|         'status' => $status, | ||||
|         'success' => $success, | ||||
|         'message' => $message, | ||||
|         'link' => $link, | ||||
|         'proxy' => $proxy, | ||||
|     ); | ||||
|     return $output; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
| @ -218,8 +210,7 @@ function SMMS_API($image) | ||||
|  * @rest api接口路径:https://sakura.2heng.xin/wp-json/sakura/v1/cache_search/json | ||||
|  * @可在cache_search_json()函数末尾通过设置 HTTP header 控制 json 缓存时间 | ||||
|  */ | ||||
| function cache_search_json() | ||||
| { | ||||
| function cache_search_json() { | ||||
|     $vowels = array("[", "{", "]", "}", "<", ">", "\r\n", "\r", "\n", "-", "'", '"', '`', " ", ":", ";", '\\', "  ", "toc"); | ||||
|     $regex = <<<EOS | ||||
| /<\/?[a-zA-Z]+("[^"]*"|'[^']*'|[^'">])*>|begin[\S\s]*\/begin|hermit[\S\s]*\/hermit|img[\S\s]*\/img|{{.*?}}|:.*?:/m | ||||
| @ -227,7 +218,7 @@ EOS; | ||||
| 
 | ||||
|     $posts = new WP_Query('posts_per_page=-1&post_status=publish&post_type=post'); | ||||
|     while ($posts->have_posts()): $posts->the_post(); | ||||
|         $output .= '{"type":"post","link":"' . get_post_permalink() . '","title":' . json_encode(get_the_title()) . ',"comments":"' . get_comments_number('0', '1', '%') . '","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, ' ', get_the_content()))) . '},'; | ||||
|     $output .= '{"type":"post","link":"' . get_post_permalink() . '","title":' . json_encode(get_the_title()) . ',"comments":"' . get_comments_number('0', '1', '%') . '","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, ' ', get_the_content()))) . '},'; | ||||
|     endwhile; | ||||
|     wp_reset_postdata(); | ||||
| 
 | ||||
| @ -262,8 +253,12 @@ EOS; | ||||
| 
 | ||||
|     $data = '[' . $output . ']'; | ||||
|     $result = new WP_REST_Response(json_decode($data), 200); | ||||
|     $result->set_headers(array('Content-Type' => 'application/json', | ||||
|         'Cache-Control' => 'max-age=3600')); // json 缓存控制
 | ||||
|     $result->set_headers( | ||||
|         array( | ||||
|             'Content-Type' => 'application/json', | ||||
|             'Cache-Control' => 'max-age=3600'// json 缓存控制
 | ||||
|         ) | ||||
|     ); | ||||
| 
 | ||||
|     return $result; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user