图片有些大,可能会卡.带宽小呜呜呜

起初是在群里看到有人的博客里有个链接,点进去发现可以直接获取原神的玩家信息,顿时好奇,于是去问了作者,顺便嫖到了源码一份.可惜是JS版的,我用不来,但我会PHP啊,我看了一下代码,大部分我都懂,于是就开始了(指新建文件

功能

功能很简单,输入UID并且选择服务器(官服/渠道服)然后返回JSON数据,效果大概这样,也有不带反斜杠版的和UNICODE编码版的,调两个参数就行了.

2021-12-14T13:33:07.png
看起来可能有点乱,但其实就是米游社里看到的那些,还是阉割版的.但也足够了,因为数据量还是比较大的,多起来对我来说很难处理.

返回参数:

  • avatars:包含了八个角色的基本信息,如果是自己账号的则是全部角色信息
  • stats:神瞳传送点解锁数量和宝箱成就什么的
  • city_explorations:返回空
  • world_explorations:声望和树的等级
  • homes:诚哥壶信息(我没打错

效果图

我为了测试接口的可用性就直接抄了一份,大概这样

2021-12-14T13:50:28.png
2021-12-14T13:51:04.png
2021-12-14T13:51:23.png
2021-12-14T13:51:59.png

代码

代码写的太屑了,就懒得放了.而且据原作者说,米游社更新API就可能失效,需要重新写加密.

function CatchURL($url, $headerArray)
{
    // 好麻烦啊...

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_URL, $url);
    // 获取数据和状态码,重新编码后以数组返回

    $data = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    $data = mb_convert_encoding($data, 'utf-8', 'GBK,UTF-8,ASCII');
    return ['data' => $data, 'status' => $status];
}

鸣谢

感谢戴兜 (原作者)无偿提供的源码和解答