mirror of https://github.com/IoTcat/Sakura.git
parent
c3a0d671ed
commit
89656306f4
6 changed files with 444 additions and 232 deletions
@ -0,0 +1,177 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* 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', |
||||
)); |
||||
}); |
||||
|
||||
/** |
||||
* Image uploader response |
||||
*/ |
||||
function upload_image(WP_REST_Request $req) |
||||
{ |
||||
// 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 = $req->get_file_params(); |
||||
$image = file_get_contents($_FILES["cmt_img_file"]["tmp_name"]); |
||||
|
||||
switch (akina_option("img_upload_api")) { |
||||
case 'imgur': |
||||
$API_Request = Imgur_API($image); |
||||
break; |
||||
case 'smms': |
||||
$API_Request = SMMS_API($image); |
||||
break; |
||||
} |
||||
|
||||
$result = new WP_REST_Response($API_Request, 200); |
||||
$result->set_headers(array('Content-Type' => 'application/json', |
||||
'Cache-Control' => 'max-age=3600')); // json 缓存控制 |
||||
return $result; |
||||
} |
||||
|
||||
/** |
||||
* Imgur upload interface |
||||
*/ |
||||
function Imgur_API($image) |
||||
{ |
||||
$client_id = akina_option('imgur_client_id'); |
||||
|
||||
$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); |
||||
|
||||
if ($reply->success && $reply->status == 200) { |
||||
$status = 200; |
||||
$message = "success"; |
||||
$link = $reply->data->link; |
||||
$proxy = akina_option('cmt_image_proxy') . $link; |
||||
} else { |
||||
$status = $reply->status; |
||||
$message = $reply->data->error; |
||||
$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, |
||||
'message' => $message, |
||||
'link' => $link, |
||||
'proxy' => $proxy, |
||||
); |
||||
return $output; |
||||
} |
||||
|
||||
function SMMS_API($image) |
||||
{ |
||||
$client_id = akina_option('smms_client_id'); |
||||
|
||||
$ch = curl_init(); |
||||
curl_setopt($ch, CURLOPT_URL, 'https://sm.ms/api/v2/upload'); |
||||
curl_setopt($ch, CURLOPT_POST, true); |
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic ' . $client_id)); |
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type ' . 'multipart/form-data')); |
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, array('smfile' => $image)); |
||||
|
||||
$reply = curl_exec($ch); |
||||
curl_close($ch); |
||||
|
||||
$reply = json_decode($reply); |
||||
|
||||
if ($reply->success && $reply->code == 'success') { |
||||
$status = 200; |
||||
$message = $reply->message; |
||||
$link = $reply->data->url; |
||||
$proxy = akina_option('cmt_image_proxy') . $link; |
||||
} else { |
||||
$status = 0; // sm.ms 接口不规范,谁给提个意见?我要状态码! |
||||
$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, |
||||
'message' => $message, |
||||
'link' => $link, |
||||
'proxy' => $proxy, |
||||
); |
||||
return $output; |
||||
} |
||||
|
||||
/* |
||||
* 定制实时搜索 rest api |
||||
* @rest api接口路径:https://sakura.2heng.xin/wp-json/cache_search/v1/json/ |
||||
* @可在cache_search_json()函数末尾通过设置 HTTP header 控制 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 |
||||
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()))) . '},'; |
||||
endwhile; |
||||
wp_reset_postdata(); |
||||
|
||||
$pages = get_pages(); |
||||
foreach ($pages as $page) { |
||||
$output .= '{"type":"page","link":"' . get_page_link($page) . '","title":' . json_encode($page->post_title) . ',"comments":"' . $page->comment_count . '","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, ' ', $page->post_content))) . '},'; |
||||
} |
||||
|
||||
$tags = get_tags(); |
||||
foreach ($tags as $tag) { |
||||
$output .= '{"type":"tag","link":"' . get_term_link($tag) . '","title":' . json_encode($tag->name) . ',"comments":"","text":""},'; |
||||
} |
||||
|
||||
$categories = get_categories(); |
||||
foreach ($categories as $category) { |
||||
$output .= '{"type":"category","link":"' . get_term_link($category) . '","title":' . json_encode($category->name) . ',"comments":"","text":""},'; |
||||
} |
||||
if (akina_option('live_search_comment')) { |
||||
$comments = get_comments(); |
||||
foreach ($comments as $comment) { |
||||
$is_private = get_comment_meta($comment->comment_ID, '_private', true); |
||||
if ($is_private) { |
||||
$output .= '{"type":"comment","link":"' . get_comment_link($comment) . '","title":' . json_encode(get_the_title($comment->comment_post_ID)) . ',"comments":"","text":' . json_encode($comment->comment_author . ":" . __("The comment is private", "sakura") /*该评论为私密评论*/) . '},'; |
||||
continue; |
||||
} else { |
||||
$output .= '{"type":"comment","link":"' . get_comment_link($comment) . '","title":' . json_encode(get_the_title($comment->comment_post_ID)) . ',"comments":"","text":' . json_encode(str_replace($vowels, " ", preg_replace($regex, " ", $comment->comment_author . ":" . $comment->comment_content))) . '},'; |
||||
} |
||||
} |
||||
} |
||||
|
||||
$output = substr($output, 0, strlen($output) - 1); |
||||
|
||||
$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 缓存控制 |
||||
|
||||
return $result; |
||||
} |
After Width: | Height: | Size: 32 KiB |
@ -0,0 +1,31 @@ |
||||
<?php |
||||
|
||||
ini_set('display_errors', 1); |
||||
ini_set('display_startup_errors', 1); |
||||
error_reporting(E_ALL); |
||||
|
||||
$image = file_get_contents("test.jpg"); |
||||
|
||||
function Imgur_API($image) { |
||||
$client_id = "98cd21cdfc58130"; |
||||
|
||||
$ch = curl_init(); |
||||
curl_setopt($ch, CURLOPT_URL, 'https://api.mashiro.top/imgur-api/3/image'); |
||||
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); |
||||
var_dump($reply); |
||||
printf('<img height="180" src="%s" >', $reply->data->link); |
||||
$res = $reply->data->link; |
||||
$res = 'https://images.weserv.nl/?url='.$res; |
||||
echo $res; |
||||
printf('<img height="180" src="%s" >', $res); |
||||
} |
||||
|
||||
Imgur_API($image); |
Loading…
Reference in new issue