最新公告
  • 欢迎您光临站长模版网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 易优cms php远程获取文章数据,定时发布文章

    正文概述 管理员   2024-04-12   23

    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;
    }

    站长模版网 » 易优cms php远程获取文章数据,定时发布文章

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    支付宝支付
    余额支付
    ×
    微信扫码支付 0 元