# 前言

前几天接了一个别人的作业单,用 uniapp+uview 做新闻项目,然后找了一天都没有好的接口(免费的限制一天调用 50 次,我 TM 调试都不够,还 TM 要实名你敢信?)所以干脆自己写接口,做完了就分享出来吧(仅供学习,侵权联系我,马上删)

# 获取新闻列表

这个我抓到了现成的接口,所以直接用就完了

<?php
    header('Content-Type: text/html;charset=utf-8');
    header('Access-Control-Allow-Origin:*'); // * 代表允许任何网址请求
    header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE'); // 允许请求的类型
    header('Access-Control-Allow-Credentials: true'); // 设置是否允许发送 cookies
    header('Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-Requested-with, Origin'); // 设置允许自定义请求头的字段
// 定义存放数据的数组
$dataArray = array();
// 访问每个接口,并将返回的 JSON 数据合并到数组中
for ($i=1;$i<=10;$i++) {
   $urls = 'https://mini.eastday.com/ns/api/index/typenews/0010-'.$i.'.json?callback=typenews6';
   $response = file_get_contents($urls);
   $response = substr($response, 0, -1);
   $pip = 'typenews'.($i).'(';
   $response = str_replace($pip, '', $response);
   
   $jsonData = json_decode($response, true);
   for ($t=0;$t<count($jsonData);$t++){
       if(!$jsonData[$t]['img169List'][0]){
   
       }else {
           // code...
       $arr = array(
        'uk'=> $jsonData[$t]['uk'],
        "title"=> $jsonData[$t]["topic"],
        "type_zh"=> $jsonData[$t]['type_zh'],
        "source"=> $jsonData[$t]['source'],
        "show_date"=> $jsonData[$t]['show_date'],
        "img169List"=> $jsonData[$t]['img169List'][0],
        "desc"=> $jsonData[$t]['desc'],
        "page_count"=> $jsonData[$t]['page_count'],
        "leader_news"=> $jsonData[$t]['leader_news'],
        "original_source"=> $jsonData[$t]['original_source'],
        "isHot"=> $jsonData[$t]['isHot'],
        "is_hot"=> $jsonData[$t]['is_hot']
           );
       $dataArray[] = $arr;
   }
   }
   
    // 将每条数据添加到数组中
}
// 将数组转换为 JSON 格式
$jsonString = json_encode($dataArray, JSON_UNESCAPED_UNICODE);
// 输出 JSON 数据
header('Content-Type: application/json');
echo $jsonString;
?>

# 获取文章内容

这个是爬取 html 格式的内容页

<?php
// 设置响应头,允许跨域请求
header('Content-Type: text/html;charset=utf-8');
header('Access-Control-Allow-Origin: *'); // * 代表允许任何网址请求
header('Access-Control-Allow-Methods: POST,GET,OPTIONS,DELETE'); // 允许请求的类型
header('Access-Control-Allow-Credentials: true'); // 设置是否允许发送 cookies
header('Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-Requested-with, Origin'); // 设置允许自定义请求头的字段
// 获取 cid 参数
$cid = $_GET['cid'];
// 初始化 cURL
$ch = curl_init();
// 设置 cURL 选项
$url = 'https://mini.eastday.com/mobile/' . $cid . '.html';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// 检查请求是否成功
if ($response === false) {
    echo 'Failed to fetch the page.';
} else {
    // 使用 DOMDocument 解析网页内容
    $dom = new DOMDocument();
    libxml_use_internal_errors(true); // 忽略 HTML 中的错误
    $dom->loadHTML($response);
    libxml_use_internal_errors(false); // 恢复错误处理
    // 使用 getElementById 方法找到 ID 为 "content" 的元素
    $contentElement = $dom->getElementById('content');
    $titleElement = $dom->getElementById('title');
    // 将 DOM 元素转换为 HTML 字符串
    $html = $dom->saveHTML($contentElement);
    // 使用 XPath 查询获取标题和发布时间
    $xpath = new DOMXPath($dom);
    $title = $xpath->query('//div[@id="title"]//h1[@class="title"]')->item(0)->textContent;
    $publishTime = $xpath->query('//div[@id="title"]//span[@class="src"]')->item(0)->textContent;
    // 构建要输出的 JSON 数据
    $jsonArray = array(
        'content' => $html,
        'title' => $title,
        'publishTime' => $publishTime
    );
    // 将数组转换为 JSON 格式
    $jsonString = json_encode($jsonArray, JSON_UNESCAPED_UNICODE);
    // 输出 JSON 数据
    header('Content-Type: application/json');
    echo $jsonString;
}
// 关闭 cURL 资源
curl_close($ch);
?>

最后说一句小白练手作品,大佬勿喷

还有就是侵权请联系我,马上删

更新于 阅读次数