书接上回

自建meting-api(带网易云VIP) | 锦木祈杰のblog

这次主要是折腾了一下获取专辑图片模糊的问题,还增加了一个调用次数获取

欢迎使用~

专辑图片获取

项目默认获取图片大小是90*90的,这就导致在播放器页面看到的专辑图是糊掉的

src/Meting.php 文件中,pic 方法用于获取专辑图片,它接受一个 $size 参数(默认值为90):

public function pic($id, $size = 90)

index.php 文件中,song2data 函数处理图片请求时调用了这个方法:

case 'pic':
    $data = json_decode($api->pic($id, 90))->url;
    break;

可以看到,目前图片大小被设置为90。如果您想要更改专辑图片的大小,需要修改 index.php 文件中的这一行。

以下是修改方法:

  1. 打开 index.php 文件

  2. 找到 song2data 函数中的 case 'pic': 部分

  3. 修改 $data = json_decode($api->pic($id, 90))->url; 这一行,将 90 更改为想要的尺寸

调用次数获取

关于这个加起来比较复杂

index.php 文件中添加的代码

在文件开头添加了 update_api_stats() 函数:

// API调用统计功能
function update_api_stats() {
    $stats_file = __DIR__ . '/cache/stats.json';
    
    // 初始化统计数据
    $stats = array(
        'total_calls' => 0,
        'today_calls' => 0,
        'last_call_date' => date('Y-m-d')
    );
    
    // 如果统计文件存在,读取现有数据
    if (file_exists($stats_file)) {
        $stats_data = json_decode(file_get_contents($stats_file), true);
        if ($stats_data) {
            $stats = $stats_data;
        }
    }
    
    // 检查是否是新的一天
    if ($stats['last_call_date'] != date('Y-m-d')) {
        $stats['today_calls'] = 0;
        $stats['last_call_date'] = date('Y-m-d');
    }
    
    // 更新统计计数
    $stats['total_calls']++;
    $stats['today_calls']++;
    
    // 保存统计数据
    file_put_contents($stats_file, json_encode($stats));
}

调用统计函数的位置

将统计函数调用放在参数验证之后,确保只有API调用才会触发统计:

if (!isset($_GET['type']) || !isset($_GET['id'])) {
    include __DIR__ . '/public/index.php';
    exit;
}

// 只有在API调用时才更新统计
update_api_stats();

public/index.php 文件中添加的代码

统计数据读取代码

在HTML内容中添加了PHP代码来读取统计数据:

<?php
// 读取API调用统计信息
$stats_file = __DIR__ . '/../cache/stats.json';
$total_calls = 0;
$today_calls = 0;

if (file_exists($stats_file)) {
    $stats_data = json_decode(file_get_contents($stats_file), true);
    if ($stats_data) {
        $total_calls = isset($stats_data['total_calls']) ? $stats_data['total_calls'] : 0;
        $today_calls = isset($stats_data['today_calls']) ? $stats_data['today_calls'] : 0;
        
        // 检查是否是新的一天
        if (isset($stats_data['last_call_date']) && $stats_data['last_call_date'] != date('Y-m-d')) {
            $today_calls = 0;
        }
    }
}
?>

统计数据显示代码

添加了HTML和CSS代码来显示统计信息:

<div style="background-color: #f0f8ff; padding: 10px; border-radius: 5px; margin-bottom: 20px; font-size: 14px; width: 300px;">
    <h4 style="margin: 0 0 5px 0;">API调用统计</h4>
    <p style="margin: 3px 0;">累计调用: <strong><?php echo $total_calls; ?></strong></p>
    <p style="margin: 3px 0;">今日调用: <strong><?php echo $today_calls; ?></strong></p>
</div>

数据存储

统计数据存储在 cache/stats.json 文件中,包含以下信息:

  • total_calls: 累计调用次数

  • today_calls: 今日调用次数

  • last_call_date: 最后调用日期

关于调用次数的总结

实现API调用次数统计功能主要涉及以下改动:

  1. index.php 中添加统计函数和调用逻辑

  2. public/index.php 中添加统计数据读取和显示代码

  3. 使用 cache/stats.json 文件存储统计数据

这些改动确保了:

  • 只有API调用会被统计,访问首页不会计入

  • 统计数据显示在网站首页

  • 数据持久化存储在缓存目录中

  • 每日统计数据会自动重置

收工

关于MetingApi的修改就结束了,我晚点会上传到github,我当前项目是修改于injahow/meting-api: Meting API for APlayer

该项目基于metowolf/Meting: :cake: Wow, such a powerful music API framework构建的

又水了一篇文章~,吃饭去了