Created
June 18, 2020 11:27
-
-
Save httpspace/b86b64bac9e9603ee38cb8a58c5d696c to your computer and use it in GitHub Desktop.
wxx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Schedule; | |
use \Medoo\Medoo as Medoo; | |
use Httpspace\Medoos as Medoos; | |
use Httpspace\Fastimage as FastImage; | |
use App\Model\Imgur; | |
class Wow | |
{ | |
public static $cacheimg = []; | |
public static $from_site = 1; | |
// case "1": | |
// class_return = "擷取中"; | |
// break; | |
// case "2": | |
// class_return = "處理中"; | |
// break; | |
// case "3": | |
// class_return = "刪除"; | |
// break; | |
// case "4": | |
// class_return = "處理完成"; | |
// break; | |
// case "5": | |
// class_return = "處理失敗"; | |
// break; | |
// case "6": | |
// class_return = "暫不處理"; | |
// break; | |
// case "7": | |
// class_return = "已轉移"; | |
// break; | |
//步驟一蒐集 | |
public static function getList() | |
{ | |
$type = [ | |
'en', | |
'ja', | |
'es', | |
'id', | |
'fr', | |
'it', | |
'nl', | |
'pt', | |
'ms', | |
'hi', | |
'te', | |
'ar', | |
'th', | |
'hu', | |
'ru', | |
'ro', | |
'bn', | |
'ia', | |
'vi', | |
'tr', | |
'pl', | |
'sv', | |
'el', | |
'cs', | |
'tl', | |
]; | |
$rand_lan = $type[rand(0, count($type) - 1)]; | |
// $rand_lan = 'ja'; | |
$url = "https://api.wowwquiz.com/v5/quiz_recent_list.php?page=0&size=500&lang={$rand_lan}"; | |
$result = httpGet($url, true); | |
show($url); | |
if ($result['code'] == 4000 && isset($result['data']) && $result['data'] !== false) { | |
foreach ($result['data'] as $k => $v) { | |
$insert = [ | |
'title' => $v['title'], | |
'locale' => $rand_lan, | |
'cover_img' => $v['preview'], | |
'from_id' => $v['id'], | |
'from_url' => $v['link'], | |
'mode' => 2, | |
'status' => 1, | |
'from_site' => self::$from_site, | |
'created_at' => date('Y-m-d H:i:s') | |
]; | |
self::save($insert); | |
} | |
} | |
show(Medoos::log()); | |
} | |
public static function save($data) | |
{ | |
$find_id = Medoos::get('games_copy', 'from_id', ['from_id' => $data['from_id']]); | |
if (!$find_id) { | |
Medoos::insert('games_copy', $data); | |
} | |
} | |
//處理步驟二 | |
public static function parse($id = false) | |
{ | |
if ($id) { | |
$parse = Medoos::get('games_copy', '*', ['id' => $id]); | |
} else { | |
$parse = Medoos::get('games_copy', '*', ['status' => 1]); | |
} | |
$from_id = $parse['from_id']; | |
$id = $parse['id']; | |
$url = "https://api.wowwquiz.com/v5/quiz_info.php?id={$from_id}"; | |
// echo $url; | |
$result = httpGet($url, true); | |
if ($result['code'] == 4000) { | |
$update = [ | |
'result_origin[JSON]' => $result, | |
'status' => 2 | |
]; | |
} else { | |
//資料錯誤 | |
$update = ['status' => 5]; | |
} | |
// show($result); | |
Medoos::update("games_copy", $update, ['id' => $id]); | |
show(Medoos::log()); | |
} | |
//處理步驟三 | |
public static function trans($id = null) | |
{ | |
if ($id) { | |
$data = Medoos::get('games_copy', ['id', 'result_origin[JSON]'], [ | |
'id' => $id, | |
]); | |
} else { | |
$data = Medoos::get('games_copy', ['id', 'result_origin[JSON]'], [ | |
'status' => 2, | |
]); | |
} | |
if (!$data) exit('無資料'); | |
//$FB_INPUT_TEXT | |
// showx($data); | |
$id = $data['id']; | |
if (!$data['result_origin']) exit('無資料塗層'); | |
$layers = $data['result_origin']['data']['layers']; | |
$can_trans = self::is_multiple_img($layers); | |
if (!$can_trans) { | |
echo "系統不支援"; | |
$update = ['status' => 6]; | |
Medoos::update("games_copy", $update, ['id' => $id]); | |
return; | |
} | |
echo '是否進行:'; | |
show($can_trans); | |
show($layers); | |
echo '<br />'; | |
$layers_trans = self::trans_data($layers); | |
if (empty($layers_trans)) { | |
Medoos::update('games_copy', ['result[JSON]' => $layers_trans, 'status' => 6], ['id' => $data['id']]); | |
} else { | |
Medoos::update('games_copy', ['result[JSON]' => $layers_trans, 'status' => 4], ['id' => $data['id']]); | |
} | |
show($layers_trans); | |
show(Medoos::log()); | |
} | |
//處理方法 | |
public static function trans_data($layers) | |
{ | |
// showx($layers); | |
$common_layer = []; | |
$common_txt_layer = []; | |
$common_multi_layer = []; | |
$callFastImage = false; | |
$vals = []; | |
$width = 0; | |
$height = 0; | |
$r_key = -1; | |
foreach ($layers as $lk => $layer) { | |
if ($layer['rnd'] == 1) { | |
foreach ($layer['elements'] as $k => $elements) { | |
if (!isset($elements['data'])) break; | |
if (strpos($elements['data'], 'wowwquiz.com/images') !== false) { | |
// show($layer['elements']); | |
// showx(count($layer['elements'])); | |
if (count($layer['elements']) == 1) { | |
if (!$callFastImage) { | |
$image = new FastImage($elements['data']); | |
list($width, $height) = $image->getSize(); | |
$callFastImage = true; | |
} | |
if ($layer['id'] <= 2) { | |
$common_layer[] = [ | |
"type" => "img", | |
"name" => "圖層-底圖", | |
"active" => false, | |
"display" => ($lk == 1) ? false : true, | |
"type" => "img", | |
"config" => [ | |
"image" => $elements['data'], | |
"x" => 0, | |
"y" => 0, | |
"width" => $width, | |
"height" => $height | |
] | |
]; | |
} else { | |
$common_txt_layer[] = [ | |
"type" => "img", | |
"name" => "圖層-固定結果圖", | |
"active" => false, | |
"display" => true, | |
"type" => "img", | |
"config" => [ | |
"image" => $elements['data'], | |
"x" => 0, | |
"y" => 0, | |
"width" => $width, | |
"height" => $height | |
] | |
]; | |
} | |
} | |
} else if ($elements['data'] == '$CUSTOM_PIC' && isset($elements['cus_pic'])) { | |
$common_layer[] = [ | |
"type" => "img", | |
"name" => "圖層-底圖", | |
"active" => false, | |
"display" => true, | |
"type" => "img", | |
"config" => [ | |
"image" => $elements['cus_pic'], | |
"x" => 0, | |
"y" => 0, | |
"width" => $width, | |
"height" => $height | |
] | |
]; | |
} | |
if (strpos($elements['data'], 'wowwquiz.com/images') !== false) { | |
if (count($layer['elements']) > 1) { | |
$common_multi_layer[] = [ | |
"type" => "img", | |
"name" => "圖層-結果圖" . $k, | |
"active" => false, | |
"display" => true, | |
"type" => "img", | |
"config" => [ | |
"image" => $elements['data'], | |
"x" => 0, | |
"y" => 0, | |
"width" => $width, | |
"height" => $height | |
] | |
]; | |
} | |
} | |
if ($layer['data'] == '' && isset($elements['font'])) { | |
if (count($layer['elements']) == 1) { | |
$layer_name = (strpos($elements['data'], '$FB_USER_NAME') === false) ? '變數圖層' : '圖層-姓名'; | |
$common_txt_layer[] = [ | |
"type" => "txt", | |
"name" => $layer_name, | |
"active" => false, | |
"display" => true, | |
"config" => [ | |
"color" => $elements['color'], | |
"size" => $elements['size'], | |
"x" => (int) $elements['x'] + 10, | |
"y" => (int) $elements['y'] + 25, | |
"opacity" => "1", | |
"textAlign" => $elements['align'], | |
"words" => str_replace('$FB_USER_NAME', '{{姓名}}', $elements['data']) | |
] | |
]; | |
} else { | |
$now_data = str_replace('$FB_USER_NAME', '{{姓名}}', $elements['data']); | |
if ($k == 0) { | |
$layer_name = (strpos($elements['data'], '$FB_USER_NAME') === false) ? '變數圖層' : '圖層-姓名'; | |
$r_key = $r_key + 1; | |
$r_val = "{{變數" . ($r_key + 1) . "}}"; | |
$vals[$r_key] = [ | |
"key" => $r_key + 1, | |
"type" => 1, | |
"before" => $r_val, | |
"after" => [$now_data] | |
]; | |
$common_txt_layer[] = [ | |
"type" => "txt", | |
"name" => $layer_name, | |
"active" => false, | |
"display" => true, | |
"config" => [ | |
"color" => $elements['color'], | |
"size" => $elements['size'], | |
"x" => (int) $elements['x'] + 10, | |
"y" => (int) $elements['y'] + 25, | |
"opacity" => "1", | |
"textAlign" => $elements['align'], | |
"words" => $r_val | |
] | |
]; | |
} else { | |
$vals[$r_key]["after"][] = $now_data; | |
} | |
} | |
} | |
// "type": "txt", | |
// "name": "新圖層-文字", | |
// "active": false, | |
// "display": true, | |
// "config": { | |
// "color": "#000000", | |
// "size": "30", | |
// "x": "276", | |
// "y": "223", | |
// "opacity": "1", | |
// "textAlign": "left", | |
// "words": "{{姓名}}:" | |
} | |
} | |
if ($layer['rnd'] == 0) { | |
foreach ($layer['elements'] as $k => $elements) { | |
if (!isset($elements['data'])) break; | |
if ($layer['data'] == '' && isset($elements['font'])) { | |
$layer_name = (strpos($elements['data'], '$FB_USER_NAME') === false) ? '變數圖層' : '圖層-姓名'; | |
$common_txt_layer[] = [ | |
"type" => "txt", | |
"name" => $layer_name, | |
"active" => false, | |
"display" => true, | |
"config" => [ | |
"color" => $elements['color'], | |
"size" => $elements['size'], | |
"x" => (int) $elements['x'] + 10, | |
"y" => (int) $elements['y'] + 25, | |
"opacity" => "1", | |
"textAlign" => $elements['align'], | |
"words" => str_replace('$FB_USER_NAME', '{{姓名}}', $elements['data']) | |
] | |
]; | |
} | |
} | |
} | |
} | |
$mylayer = []; | |
$mylayer_base = [ | |
"config" => [ | |
"width" => $width, | |
"height" => $height | |
], | |
"val" => $vals | |
]; | |
foreach ($common_multi_layer as $k => $v) { | |
$mylayer[$k] = $mylayer_base; | |
$mylayer[$k]['layer'] = array_reverse(array_merge($common_layer, [$v], $common_txt_layer)); | |
$mylayer[$k]['image'] = $v['config']['image']; | |
// showx($v); | |
// showx($mylayer[$k]['layer']); | |
// $mylayer[$k]['layer'] = $common_layer; | |
} | |
// show($common_layer); | |
// echo "txt----"; | |
// show($common_txt_layer); | |
// echo "x----"; | |
// show($common_multi_layer); | |
// echo "----"; | |
return $mylayer = $mylayer; | |
} | |
//如果是多圖隨機的組合不適用系統 放棄 | |
public static function is_multiple_img($layers) | |
{ | |
$rand_img_set = 0; | |
$ok = true; | |
foreach ($layers as $key => $layer) { | |
if ($layer['rnd'] == 1) { | |
// echo 'layer at:'; | |
// show($layer); | |
// rnd | |
foreach ($layer['elements'] as $k => $elements) { | |
if (isset($elements['buddle'])) { | |
$ok = false; | |
break; | |
} | |
if (!isset($elements['data'])) break; | |
if (strpos($elements['data'], 'wowwquiz.com/images') !== false) { | |
// show($layer['elements']); | |
// echo '$images'; | |
if (count($layer['elements']) > 1) { | |
$rand_img_set++; | |
break; | |
} | |
} | |
if ($elements['data'] == '$CUSTOM_PIC') { | |
//目前無法處理題型 | |
// echo '$CUSTOM_PIC'; | |
if (count($layer['elements']) > 1) { | |
$rand_img_set++; | |
break; | |
} | |
if ($elements['x'] !== 0 || $elements['x'] !== 0) { | |
$ok = false; | |
break; | |
} | |
// $rand_img_set++; | |
} | |
// show($elements); | |
// break; | |
} | |
} | |
} | |
echo '多圖組:'; | |
show($rand_img_set); | |
echo '是否支援:'; | |
show($ok); | |
if ((int) $rand_img_set > 1) { | |
return false; | |
} | |
if (!$ok) { | |
return false; | |
} | |
return true; | |
} | |
//轉圖片 | |
public static function toLocalImg($id = false) | |
{ | |
try { | |
if ($id) { | |
$log = false; | |
$data = Medoos::get('games_copy', ['id', 'cover_img', 'cover_img_cache', 'result[JSON]'], [ | |
'id' => $id | |
]); | |
} else { | |
$log = false; | |
$data = Medoos::get('games_copy', ['id', 'cover_img', 'cover_img_cache', 'result[JSON]'], [ | |
'status' => 4 | |
]); | |
$id = $data['id']; | |
} | |
// showx($data); | |
// if (strpos($data['cover_img'], 'app-files.funfunquiz.com') === false) { | |
$data['cover_img'] = self::imgApi($data['cover_img']); | |
$data['cover_img_cache'] = Imgur::upload(strtotime('now'), $data['cover_img'], 'url'); | |
foreach ($data['result'] as $key => $val) { | |
$data['result'][$key]['image'] = self::imgApi($val['image']); | |
// show($data['result']); | |
foreach ($val['layer'] as $k => $v) { | |
if ($v['type'] == 'img') { | |
$data['result'][$key]['layer'][$k]['config']['image'] = self::imgApi($v['config']['image']); | |
} | |
} | |
} | |
$update = [ | |
'cover_img' => $data['cover_img'], | |
'cover_img_cache' => $data['cover_img_cache'], | |
'result[JSON]' => $data['result'], | |
]; | |
Medoos::update('games_copy', $update, [ | |
'id' => $id | |
]); | |
// } | |
Medoos::init(); | |
$insert = $data = Medoos::get('games_copy', [ | |
"locale", | |
"title", | |
"cover_img", | |
"mode", | |
"cover_img_cache", | |
"result", | |
"type", | |
], [ | |
'id' => $id | |
]); | |
// show($insert); | |
$insert['account_id'] = 10; | |
$insert['created_source'] = 2; | |
$insert['created_at'] = date('Y-m-d H:i:s'); | |
Medoos::insert('games', $insert); | |
$update = [ | |
'status' => 7, | |
'to_id' => Medoos::id(), | |
]; | |
Medoos::update('games_copy', $update, [ | |
'id' => $id | |
]); | |
if ($log) { | |
show(Medoos::log()); | |
} | |
return true; | |
} catch (\Exception $e) { | |
return false; | |
} | |
} | |
public static function imgApi($url) | |
{ | |
if (isset(static::$cacheimg[$url])) return static::$cacheimg[$url]; | |
$data = httpGet("https://app-files.funfunquiz.com/api/grab_img.php?url={$url}", true); | |
if ($data['status']) { | |
static::$cacheimg[$url] = $data['url']; | |
return $data['url']; | |
} | |
return false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment