PHP遠程獲取文章數據,再發布到自己網站!

自帶優化雙標題
自帶關鍵詞分詞
自動給文章插入圖片
自帶tag聚合
自動更新首頁緩存
配合寶塔計劃任務可以實現自動化更新
代碼:
🔒 隱藏內容:評論後查看
<?php
// token驗證
$token = md5('你的密鑰');
// echo $token;
if($_GET['token'] !== $token){
echo '非法請求';
die();
}
// 獲取遠程數據
$api = get_api('https://你的接口/e/api/juzi.php?token='.$token);
if(empty($api)){
echo json_encode(['code'=>'404','message'=>'發佈失敗,獲取內容爲空!']);die();
}
// 匹配雙標題
$api2 = getBaiduSuggestion($api['data']['title']);
if(!empty($api2)){
$api['data']['title'] .= "($api2)";
}
// 關鍵詞
$api3 = get_api("http://py.4s5.cn/jieba?title=".urlencode($api['data']['title']));
$keywords = '';
if(!empty($api3)){
$keywords = implode(',',$api3);
}
$api['data']['content'] = insertImage($api['data']['content']);
// echo $api['data']['content'];die;
// 定義數據庫連接的參數
$database = require('../application/database.php');
// 創建數據庫連接
$connection = mysqli_connect($database['hostname'], $database['username'], $database['password'], $database['database']);
// 檢查連接是否成功
if (!$connection) {
die("數據庫連接失敗: " . mysqli_connect_error());
}
// 設置字符集
mysqli_set_charset($connection, "utf8");
// 查詢數據庫中的數據
$sqlQuery = "SELECT * FROM `ey_arctype` WHERE `tempview` != ' ' AND `is_part` = 0 AND `is_del` = 0";
$result = mysqli_query($connection, $sqlQuery);
if (mysqli_num_rows($result) > 0) {
// 輸出數據
while ($row = mysqli_fetch_assoc($result)) {
$typeid[] =$row['id'];
}
} else {
die('欄目不存在!');
}
// 構建文章數據數組
$data = [
'typeid' => $typeid[mt_rand(0,(count($typeid)-1))],
'channel' => '1',
'title' => $api['data']['title'],
'litpic' => '/uploads/allimg/20241010/'.md5(mt_rand(1,106)).'.jpg',
'seo_keywords' => $keywords,
'seo_description' => mb_substr(strip_tags($api['data']['content']), 0, 160, 'utf-8'),
'attrlist_id' => 0,
'sort_order' => time(),
'add_time' => time(),
'update_time' => time()
];
// 構建文章內容數據數組
$contentData = [
'content' => $api['data']['content'],
'add_time' => time(),
'update_time' => time()
];
// 設置數據主表的文章數據
$query = "INSERT INTO `ey_archives` (`aid`, `typeid`, `channel`, `title`, `litpic`, `seo_keywords`, `seo_description`, `attrlist_id`, `sort_order`, `add_time`, `update_time`) VALUES (NULL, '{$data['typeid']}', '{$data['channel']}', '{$data['title']}', '{$data['litpic']}', '{$data['seo_keywords']}', '{$data['seo_description']}', '{$data['attrlist_id']}', '{$data['sort_order']}', '{$data['add_time']}', '{$data['update_time']}')";
// 執行插入操作,並獲取插入成功的id
$result = mysqli_query($connection, $query);
if ($result) {
$insertedId = mysqli_insert_id($connection);
// 設置數據副表的文章數據
$contentQuery = "INSERT INTO `ey_article_content` (`id`, `aid`, `content`, `add_time`, `update_time`) VALUES (NULL, '$insertedId', '{$contentData['content']}', '{$contentData['add_time']}', '{$contentData['update_time']}')";
// 執行插入操作
$contentResult = mysqli_query($connection, $contentQuery);
if ($contentResult) {
// 插入成功
echo '文章發佈成功:'.$api['data']['title'].' 欄目ID:'.$data['typeid'].'<br>';
//更新tag的關係
if(!empty($api3)){
foreach ($api3 as $v) {
// 查詢tag字段是否存在
$sql = "SELECT * FROM ey_tagindex WHERE tag = '{$v}'";
$result2 = $connection->query($sql);
if ($result2->num_rows > 0) {
$rt = mysqli_fetch_assoc($result2);
// tag字段存在,執行其他操作
// echo "tag字段【{$v}】已存在<br>";
$tagid = $rt['id'];
} else {
// tag字段不存在,插入新記錄
$tag = $v; // 要插入的tag值
// 獲取當前時間
$addTime = time(); // 當前時間
// 插入新記錄
$insertSql = "INSERT INTO `ey_tagindex` (`id`, `tag`, `typeid`, `count`, `total`, `weekcc`, `monthcc`, `weekup`, `monthup`, `is_common`, `lang`, `add_time`, `update_time`) VALUES (NULL, '$tag', '{$data['typeid']}', '0', '2', '0', '0', '$addTime', '$addTime', '0', 'cn', '$addTime', '$addTime')";
if ($connection->query($insertSql) === TRUE) {
// echo "新TAG已成功插入<br>";
} else {
echo "<br>插入新TAG失敗: " . $connection->error;
}
$tagid = mysqli_insert_id($connection);
}
// 插入tag關係
$sql = "SELECT * FROM ey_taglist WHERE aid = '{$insertedId}' and tag = '{$v}'";
$result3 = $connection->query($sql);
if ($result3->num_rows > 0) {
$rt = mysqli_fetch_assoc($result3);
// tag字段存在,執行其他操作
// echo "tag關係【{$v}】已存在<br>";
} else {
// tag關係字段不存在,插入新記錄
$tag = $v; // 要插入的tag值
$updateTime = time(); // 當前時間作爲update_time字段的值
// 構建插入SQL語句
$sql = "INSERT INTO `ey_taglist` (`tid`, `aid`, `typeid`, `tag`, `arcrank`, `lang`, `add_time`, `update_time`) VALUES ('$tagid', '{$insertedId}', '{$data['typeid']}', '$v', '0', 'cn', '$updateTime', '$updateTime') ";
// 執行插入操作
if ($connection->query($sql) === TRUE) {
} else {
echo "<br>插入新TAG關係失敗: " . $connection->error;
}
}
}
}
// 清除緩存
$cacheDIR= '../data/runtime/html/https/index/';
// print_r($cacheDIR);
$files =glob($cacheDIR . '*/*.html');
if(!empty($files)){
foreach ($files as $v){
if(unlink($v)){
}else{
echo "<br>刪除緩存文件失敗:{$v}";
}
}
}
} else {
// 插入失敗
echo '插入失敗' . mysqli_error($connection) . '<br>';
}
} else {
// 插入失敗
echo '插入失敗' . mysqli_error($connection) . '<br>';
}
// 關閉數據庫連接
mysqli_close($connection);
function get_api($durl, $cache = 0)
{
// 初始化cURL會話
$ch = curl_init();
// 設置cURL選項
curl_setopt($ch, CURLOPT_URL, $durl); // 設置請求的URL
curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 設置超時時間爲5秒
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 將結果通過變量返回,而不是直接輸出
// 獲取Referer的主機部分
$referer_host = parse_url($durl, PHP_URL_SCHEME) . '://' . parse_url($durl, PHP_URL_HOST);
curl_setopt($ch, CURLOPT_REFERER, $referer_host); // 設置Referer頭,指定來源主機部分
// 模擬瀏覽器訪問的相關選項
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.9999.999 Safari/537.36'); // 設置User-Agent頭,模擬瀏覽器
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Content-Type: application/json; charset=utf-8'
));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 執行請求並獲取響應結果
$r = curl_exec($ch);
// 關閉cURL會話
curl_close($ch);
// 解析JSON格式的響應結果,並返回解析後的數組
return json_decode($r, true);
}
function getBaiduSuggestion($title) {
// 如果$title超過7個字符,則截取前7個字符
if (mb_strlen($title, 'utf-8') > 7) {
$title = mb_substr($title, 0, 7, 'utf-8');
}
$title = urlencode($title);
$api = "https://www.baidu.com/sugrec?pre=1&p=1&ie=utf-8&prod=pc&csor=2&wd=".$title."";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $api,
CURLOPT_TIMEOUT => 5,
CURLOPT_RETURNTRANSFER => true,
]);
$r = curl_exec($ch);
curl_close($ch);
$r = json_decode($r, true);
if (!empty($r['g'])) {
$suggestions = array_column($r['g'], 'q');
$randomIndex = array_rand($suggestions);
return $suggestions[$randomIndex];
} else {
return false;
}
}
function insertImage($content) {
preg_match_all('/<\/p>/', $content, $matches, PREG_OFFSET_CAPTURE);
$content = str_replace('<h2>','<h3>',$content);
$content = str_replace('</h2>','</h3>',$content);
// 如果存在 </p> 標籤
if (!empty($matches[0])) {
$count = count($matches[0]); // </p> 標籤的數量
// 對每個匹配位置應用回調函數
$content = preg_replace_callback(
'/<\/p>/',
function($match) {
static $insertCount = 0;
$insertCount++;
// 每隔五個 </p> 插入一張圖片
if ($insertCount % 5 == 0) {
return $match[0] . '<p style="text-align:center"><img src="/uploads/allimg/20241010/'.md5(mt_rand(1,106)).'.jpg"></p>';
} else {
return $match[0];
}
},
$content,
$count - 1 // 限制替換次數爲匹配到的 </p> 標籤數量減一
);
}
return $content;
}