* 开源项目:APlayer
*
* @package APlayerAtBottom
* @author 小太
* @version 1.1.1
* @link https://713.moe/
*/
class APlayerAtBottom_Plugin implements Typecho_Plugin_Interface
{
/**
* 激活插件方法,如果激活失败,直接抛出异常
*
* @access public
* @return void
* @throws Typecho_Plugin_Exception
*/
public static function activate(){
Typecho_Plugin::factory('Widget_Archive')->footer = array('APlayerAtBottom_Plugin', 'footer');
Typecho_Plugin::factory('Widget_Archive')->header = array('APlayerAtBottom_Plugin', 'header');
return '启用成功ヾ(≧▽≦*)o,请设置您您的歌单ID~';
}
/**
* 禁用插件方法,如果禁用失败,直接抛出异常
*
* @static
* @access public
* @return void
* @throws Typecho_Plugin_Exception
*/
public static function deactivate(){
unlink(__DIR__ .'/settings.json'); //删除settings.json
return '禁用成功!插件已经停用啦(;´д`)ゞ';
}
/**
* 获取插件配置面板
*
* @access public
* @param Typecho_Widget_Helper_Form $form 配置面板
* @return void
*/
public static function config(Typecho_Widget_Helper_Form $form){
//输出后台设置页面样式
echo ('');
//定义此插件版本
$version = '1.1.1';
//GithubAPI内容获取UA设定
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)');
//从GithubAPI拉取最新内容
$arr = json_decode(@file_get_contents('https://api.github.com/repos/satosouta/APlayerAtBottom/releases/latest'), true);
//定义最新版本号
if(empty($arr['tag_name'])){
$new_version = '获取失败!';
}else{
$new_version = $arr['tag_name'];
}
//判断版本是否过时
if($new_version === '获取失败!'){
$version_tips = '获取失败!请自行前往github获取更新!';
$new_version_out = '获取失败!';
}elseif($version < $new_version) {
$version_tips = '该插件有新版本 => 点击下载';
$new_version_out = ''.$new_version.'';
}elseif($version > $new_version){
$version_tips = '你怎么回事,怎么还比最新版本高了?';
$new_version_out = ''.$new_version.'';
}elseif($version = $new_version){
$version_tips = '您的插件为最新版本,无需更新!';
$new_version_out = $new_version;
}
//输出版本信息
$public_section = new Typecho_Widget_Helper_Layout('div', array('class=' => 'typecho-page-title'));
$public_section->html('
本插件目前版本:'.$version.' | 最新版本:'.$new_version_out.'('.$version_tips.')
');
$form->addItem($public_section);
//设置内容
$aplayer = new Typecho_Widget_Helper_Form_Element_Radio('aplayer', array ('0' => '本地', '1' => 'jsDelivr(推荐)', '2' => '我已经安装了APlayer的CSS&JS或者相关的插件'), '0','APlayer 静态资源加载', '防止APlayer版本不同导致问题,若您没有安装相关插件或者自行添加CSS/JS,您只需要选择前面两个选项中的一个即可');
$form->addInput($aplayer);
$id = new Typecho_Widget_Helper_Form_Element_Text('id', null, '4907097519', _t('歌单id'), '这里填写你的 网易云音乐 或 QQ音乐 歌单ID,请不要填写成为UserID');
$form->addInput($id);
$autoplay = new Typecho_Widget_Helper_Form_Element_Radio('autoplay', array ('0' => '启用', '1' => '禁用'), '1','自动播放', 'PS:部分主题或浏览器可能不支持此项。');
$form->addInput($autoplay);
$lrc = new Typecho_Widget_Helper_Form_Element_Radio('lrc', array ('0' => '启用', '1' => '禁用'), '0','歌词显示', '选择是否开启歌词显示');
$form->addInput($lrc);
$order = new Typecho_Widget_Helper_Form_Element_Radio('order', array ('0' => '列表顺序', '1' => '随机播放'), '0','音频循环顺序', '选择你的音乐播放方式~');
$form->addInput($order);
$theme = new Typecho_Widget_Helper_Form_Element_Text('theme', null, '#3498db', _t('主题颜色'), '这里填写十六进制颜色代码,作为进度条和音量条的主题颜色');
$form->addInput($theme);
$volume = new Typecho_Widget_Helper_Form_Element_Text('volume', null, '0.7', _t('默认音量'), '这里填写不大于1的数字作为默认音量
PS:播放器会记忆用户设置,用户手动设置音量后默认音量即失效');
$form->addInput($volume);
$hide = new Typecho_Widget_Helper_Form_Element_Radio('hide', array ('0' => '否', '1' => '是'), '0','是否默认收起播放器', '选择“是”后则会默认收起播放器');
$form->addInput($hide);
$cachetime = new Typecho_Widget_Helper_Form_Element_Text('cachetime', null, '86400', _t('缓存时间(秒)'), '这里填写自动缓存的时间,默认为24小时');
$form->addInput($cachetime);
$server = new Typecho_Widget_Helper_Form_Element_Radio('server', array ('0' => '网易云音乐', '1' => 'QQ音乐'), '0','选择音乐来源', '您可以选择使用网易云音乐或者QQ音乐的歌单');
$form->addInput($server);
$netease = new Typecho_Widget_Helper_Form_Element_Radio('netease', array ('0' => '自定义API', '1' => 'Shota\'s API', '2' => 'O\'s API', '3' => '犬\'s API' ,'4' => 'Meto API'), '1','网易云音乐解析服务器选择', '您可以自行选择音乐歌单解析服务器');
$form->addInput($netease);
$tencent = new Typecho_Widget_Helper_Form_Element_Radio('tencent', array ('0' => '自定义API', '1' => 'Meto API'), '1','QQ音乐解析服务器选择', '您可以自行选择音乐歌单解析服务器');
$form->addInput($tencent);
$api = new Typecho_Widget_Helper_Form_Element_Text('iapi', null, null, _t('自定义API'), '若您上一个设置选择了自定义API,请您按照下面的方式填写,若没有选择则可以空着
示例:https://api.713.moe/netease?type=playlist&id=');
$form->addInput($api);
}
/**
* 个人用户的配置面板
*
* @access public
* @param Typecho_Widget_Helper_Form $form
* @return void
*/
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
/**
* 插件实现方法
*
* @access public
* @return void
*/
public static function render(){}
public static function header(){
//获取参数
$config = Typecho_Widget::widget('Widget_Options')->plugin('APlayerAtBottom');
$aplayer = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> aplayer;
$id = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> id;
$autoplay = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> autoplay;
$theme = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> theme;
$volume = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> volume;
$lrc = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> lrc;
$order = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> order;
$hide = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> hide;
$cachetime = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> cachetime;
$server = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> server;
$netease = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> netease;
$tencent = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> tencent;
$api = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> api;
//静态文件设置
if($aplayer === '0') {
echo '';
}elseif($aplayer === '1'){
echo '';
}
//展开设定
if($hide === '1'){
echo '';
}
//判断是否打开歌词
if($lrc === '0') {
$lrc_out = 3;
}else{
$lrc_out = 0;
}
//判断是否打开自动播放
if($autoplay === '0') {
$autoplay_out = 'true';
}else{
$autoplay_out = 'false';
}
//判断歌曲播放方式
if($order === '0') {
$order_out = 'list';
}else{
$order_out = 'random';
}
//判断设置的API
if($server === '0'){
if($netease === '0'){
$api_out = $api;
$apid = '0';
}elseif($netease === '1'){
$api_out = 'https://api.9jojo.cn/netease/?type=playlist&id=';
$apid = '1';
}elseif($netease === '2'){
$api_out = 'https://api.ohmyga.cn/netease/?use=1&type=playlist&id=';
$apid = '2';
}elseif($netease === '3'){
$api_out = 'https://api.fczbl.vip/163/?&type=playlist&id=';
$apid = '3';
}elseif($netease === '4'){
$api_out = 'https://api.i-meto.com/meting/api?server=netease&type=playlist&id=';
$apid = '4';
}
}elseif($server === '1'){
if($tencent === '0'){
$api_out = $api;
$apid = '0';
}elseif($tencent === '1'){
$api_out = "https://api.i-meto.com/meting/api?server=tencent&type=playlist&id=";
$apid = '1';
}
}
//更新方法
if (file_exists(__DIR__ .'/settings.json') == false) {
$data = [
'last_update' => time(),
'settings' => [],
'data' => []
];
$data['settings'] = [
'id' => $id,
'lrc' => $lrc_out,
'autoplay' => $autoplay_out,
'theme' => $theme,
'volume' => $volume,
'order' => $order_out,
'server' => $server,
'api' => $apid
];
$data['data'] = @file_get_contents($api_out.$id."&rand=".mt_rand(0,999999));
file_put_contents(__DIR__ .'/settings.json',json_encode($data));
}else{
$decode = json_decode(file_get_contents(__DIR__ .'/settings.json'), true);
$oldserver = $decode['settings']['server'];
$oldapi = $decode['settings']['api'];
$olddata = $decode['data'];
//检测缓存是否过期
if ((time() - $data['last_update']) < $cachetime) {
$data = [
'last_update' => time(),
'settings' => [],
'data' => []
];
$data['settings'] = [
'id' => $id,
'lrc' => $lrc_out,
'autoplay' => $autoplay_out,
'theme' => $theme,
'volume' => $volume,
'order' => $order_out,
'server' => $server,
'api' => $apid
];
$data['data'] = @file_get_contents($api_out.$id."&rand=".mt_rand(0,999999));
file_put_contents(__DIR__ .'/settings.json',json_encode($data));
}else{
//若缓存不过期则重新获取设置内容以防用户设置更新
$data = [
'last_update' => $decode['last_update'],
'settings' => [],
'data' => []
];
$data['settings'] = [
'id' => $id,
'lrc' => $lrc_out,
'autoplay' => $autoplay_out,
'theme' => $theme,
'volume' => $volume,
'order' => $order_out,
'server' => $server,
'api' => $apid
];
if($api != $oldapi || $server != $oldserver){
$data['data'] = @file_get_contents($api_out.$id."&rand=".mt_rand(0,999999));
}else{
$data['data'] = $olddata;
}
file_put_contents(__DIR__ .'/settings.json',json_encode($data));
}
}
}
public static function footer(){
//获取参数
$config = Typecho_Widget::widget('Widget_Options')->plugin('APlayerAtBottom');
$aplayer = Typecho_Widget::widget('Widget_Options') -> Plugin('APlayerAtBottom') -> aplayer;
//构建播放器
echo '';
//静态文件设置
if($aplayer === '0'){
echo '';
}elseif($aplayer === '1') {
echo '';
}
//输出配置js
echo '';
}
}
?>