成品URL
用法
直接使用Markdown语法插入
Eg:
核心代码
1.获取Pixiv Ranking(由于rank界面不需要登录所以不用担心nsfw)
<?php
namespace App\Http\Controllers;
use GuzzleHttp\Client;
use App\Http\Requests\PixivRequest;
class PixivController extends Controller
{
public function show(PixivRequest $request)
{
$client = new Client();
$response = $client->request('GET', 'https://www.pixiv.net/ranking.php', [
'headers' => [
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cache-Control' => 'max-age=0',
'Sec-Ch-Ua' => '"Microsoft Edge";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
'Sec-Ch-Ua-Mobile' => '?0',
'Sec-Ch-Ua-Platform' => '"Windows"',
'Sec-Fetch-Dest' => 'document',
'Sec-Fetch-Mode' => 'navigate',
'Sec-Fetch-Site' => 'same-origin',
'Sec-Fetch-User' => '?1',
'Upgrade-Insecure-Requests' => '1'
],
'referrer' => 'https://www.pixiv.net/ranking.php',
'referrerPolicy' => 'strict-origin-when-cross-origin',
'body' => null,
'mode' => 'cors',
'credentials' => 'include'
]);
$body = $response->getBody();
// 这里你可以处理响应体
// 获取响应体
$body = (string) $response->getBody();
// 创建一个新的DOMDocument实例
$dom = new \DOMDocument();
// 由于HTML可能不是完全有效的,我们禁用错误报告
libxml_use_internal_errors(true);
// 加载HTML到DOMDocument
$dom->loadHTML($body);
// 创建一个新的XPath实例
$xpath = new \DOMXPath($dom);
// 使用XPath查询搜索所有的img元素
$imgs = $xpath->query('//img');
// 创建一个数组来存储匹配的图片URL
$srcs = [];
// 遍历所有的img元素
foreach ($imgs as $img) {
$src = $img->getAttribute('data-src');
// 检查src属性是否匹配我们的模式
if (preg_match('/https:\/\/i\.pximg\.net/', $src)) {
// 将匹配的图片URL添加到数组中
$srcs[] = $src;
}
}
// 将数组中的每个值封装到一个数组中
$values = array_map(function ($src) {
//更换为镜像站点
$src = str_replace('/240x480', '/768x1200_80', $src);
$src = str_replace('i.pximg.net', 'i.pixiv.re', $src);
return ['value' => $src];
}, $srcs);
// 将字符串封装到一个数组中,并返回一个JSON响应
return response()->json($values);
}
}
2.创建新的controller用于返回random图片url
<?php
namespace App\Http\Controllers;
use Illuminate\Http\ImageRequest;
use GuzzleHttp\Client;
class ImageController extends Controller
{
public function show()
{
//rand吐回50个value
$random = rand(0, 49);
$client = new Client();
$response = $client->request('GET', 'https://zkg.me/api/pixivrank');
$data = json_decode($response->getBody(), true);
$image_url = $data[$random]['value'];
//使用header节省自身服务器资源
return redirect($image_url);
}
}