热爱生活,重新开始

标签: 友链

  • 近期博客的一些变化

    趁着这个快要放假的间隙,写下这篇文章。明天开始就要进入五一假期,很可能有一段时间不碰电脑了。

    博客方面相较于之前有了很大的变化,也尽量的简化了不必要的页面,目前就只剩下了书影、相册、友链(友圈&留言)、关于这四个页面,还想要搭建一个音乐页面,没头绪,正在思考中。

    关于书影。找了很久,才找到大发的这个插件,随着使用,愈发感到熟悉,才想起几年前使用过这个插件,为此,这段时间我也看了电影,读书也是拾了起来。它的安装至少激励了我读书的兴趣,只要空余时间,我都会在微信读书上面看书,有的书籍需要付费,正考虑买纸质版的。现在开车都把听音乐改成了听微信读书的朗读。话说,微信朗读现在好像听上了瘾,比喜马拉雅那种更令我陶醉。

    关于友链。换主题后,这个页面一直停留在我的后台,前台一直没有放出,等我其他页面整理的差不多时,就该考虑到它了,原先后台有个链接,换主题后不见了,网上一搜是因为WordPress3.5版本以后去掉了,但不是真正的去掉,是把它隐藏了,使用一段代码就把它展现了出来,我根据这个就直接调用在了页面上,就先这样吧,之后还想调用头像。留言版是博客搭建起来就存在的页面,只是它其实也没存在的必要,文章的评论代替了它,但我想,其实还是有必要的,有时候博友想联系你,告诉你一件事儿,不适合在文章底下评论,发邮件也麻烦,那么这个留言板的作用就体现出来了。关于相册,是我在中文博客微信群里听1900说的他想弄个相册页面,展现文章里的照片。我也感兴趣了,这不当时就开整了,使用的画廊插件无缝的全屏的展现了出来,但还是感觉不是我心里面想的那个意思,所以又关掉了插件,只留下了单纯的WordPress自带的相册将其展现,还在思考中。友圈,这段时间朋友圈也是非常流行,我前段时间也写了这篇文章搭建,在上网冲浪时蚁阅的最新版本的更新吸引了我,我先是自己部署了蚁阅,结果他最新版本跟官方自用的差了一大截,好吧,想要体验他的最新功能还得使用官方的,一年30,也不贵,索性就用它了,在体验它的最新功能遇到了点儿问题,蚁阅开发者也是给了我解答。我用反代让它显示在了我自己的域名之下,rss.duanxiansen.com,又把它嵌入在了友链这个页面里,订阅的是我经常看的一些博客以及回访频率较高的博客。友链、友圈以及留言版被我三合一了,我是不是聪明,哈哈哈。

    相比较上个月,我又把主题换了,目前这个主题很赞,我比较喜欢,可能会长期使用下去,至少在我研究透之前是不会跟换的,自定义真是完美。

  • 跟风利用FreshRSS实现朋友圈

    前言

    最开始我用的是阿锋的朋友圈插件,这是我第一次见把友链整合到RSS订阅把它展现出来,那会儿很好奇,就使用了阿锋的晨风自定义插件。后面看到了hexo-circle-of-friends,网上找了半天没看到WordPress上面实现的方法。后面才看到了若志的这篇文章,索性就搞了起来。

    实现步骤

    首先要搭建FreshRSS,这个教程很多,我使用的是服务器搭建,纯宝塔操作,简单不复杂。

    1、添加站点,注意:需要确认已经安装了 PHP 扩展 fileinfo(我的默认安装了)。接下来在宝塔面板创建新站点,设置好数据库与 PHP 版本。数据库我选择的是mysql,PHP版本是0。然后,删去网站根目录下默认添加创建的所有文件,确保文件夹全部清空。打开站点根目录,把 FreshRSS 源代码上传到网站根目录,域名访问开始安装。

    2、安装完成后进入设置-账户-API 管理,填写api密码提交。

    3、进入设置-认证,勾选允许 API 访问 (用于手机应用),提交。

    4、添加你的友链feed地址,我试了一下,直接输入友链域名大部分的rss地址可以自动获取,少部分不知道rss地址的可以安装浏览器插件查看或者问博主本人。

    5、不知道是不是我安装的有问题,点击添加的友链管理,会弹出502 Bad Gateway nginx。不过双击还是就进去了,可以进行删除修改等操作,凑合着用吧。

    6、在自己站点根目录下创建一个php文件,用于放FreshRSS api调用函数,例如:rss.php。访问https://你的博客域名/rss.php,显示数据已保存到JSON文件中。

    <?php
    /**
     * 获取最新订阅文章并生成JSON文件
     */
    function getAllSubscribedArticlesAndSaveToJson($user, $password)
    {
        $apiUrl = 'https://你部署FreshRSS的域名/p/api/greader.php';
        $loginUrl = $apiUrl . '/accounts/ClientLogin?Email=' . urlencode($user) . '&Passwd=' . urlencode($password);
        $loginResponse = curlRequest($loginUrl);
        if (strpos($loginResponse, 'Auth=') !== false) {
            $authToken = substr($loginResponse, strpos($loginResponse, 'Auth=') + 5);
            $articlesUrl = $apiUrl . '/reader/api/0/stream/contents/reading-list?&n=1000';
            $articlesResponse = curlRequest($articlesUrl, $authToken);
            $articles = json_decode($articlesResponse, true);
            if (isset($articles['items'])) {
                usort($articles['items'], function ($a, $b) {
                    return $b['published'] - $a['published'];
                });
                $subscriptionsUrl = $apiUrl . '/reader/api/0/subscription/list?output=json';
                $subscriptionsResponse = curlRequest($subscriptionsUrl, $authToken);
                $subscriptions = json_decode($subscriptionsResponse, true);
                if (isset($subscriptions['subscriptions'])) {
                    $subscriptionMap = array();
                    foreach ($subscriptions['subscriptions'] as $subscription) {
                        $subscriptionMap[$subscription['id']] = $subscription;
                    }
                    $formattedArticles = array();
                    foreach ($articles['items'] as $article) {
                        $desc_length = mb_strlen(strip_tags(html_entity_decode($article['summary']['content'], ENT_QUOTES, 'UTF-8')), 'UTF-8');
                        if ($desc_length > 20) {
                            $short_desc = mb_substr(strip_tags(html_entity_decode($article['summary']['content'], ENT_QUOTES, 'UTF-8')), 0, 99, 'UTF-8') . '...';
                        } else {
                            $short_desc = strip_tags(html_entity_decode($article['summary']['content'], ENT_QUOTES, 'UTF-8'));
                        }
                        
                        $formattedArticle = array(
                            'site_name' => $article['origin']['title'],
                            'title' => $article['title'],
                            'link' => $article['alternate'][0]['href'],
                            'time' => date('Y-m-d H:i', $article['published']),
                            'description' => $short_desc,
                        );
    
                        $subscriptionId = $article['origin']['streamId'];
                        if (isset($subscriptionMap[$subscriptionId])) {
                            $subscription = $subscriptionMap[$subscriptionId];
                            $iconUrl = $subscription['iconUrl'];
                            $filename = 'https://你部署FreshRSS的域名/p/'.substr($iconUrl, strrpos($iconUrl, '/') + 1);
                            $formattedArticle['icon'] = $filename;
                        }
    
                        $formattedArticles[] = $formattedArticle;
                    }
    
                    saveToJsonFile($formattedArticles);
                    return $formattedArticles;
                } else {
                    echo 'Error retrieving articles.';
                }
            } else {
                echo 'Error retrieving articles.';
            }
        } else {
            echo 'Login failed.';
        }
        return null;
    }
    function curlRequest($url, $authToken = null)
    {
        $ch = curl_init($url);
        if ($authToken) {
            $headers = array(
                'Authorization: GoogleLogin auth=' . $authToken,
            );
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
    /**
     * 将数据保存到JSON文件中
     */
    function saveToJsonFile($data)
    {
        $json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
        file_put_contents('output.json', $json);
        echo '数据已保存到JSON文件中';
    }
    
    // 调用函数并提供用户名和密码
    getAllSubscribedArticlesAndSaveToJson('这里是FreshRSS的用户名', '这里是第3步设置的api密码');

    注意:'https://你部署FreshRSS的域名/p/,没证书是http(最好带上证书,不然图标获取不到),还有后面的/p/. 新建页面,在正文里面输入简码:

    7、我是用的是添加页面使用简码将其显示出来,在子主题的funtions.php里添加以下代码:

    // 在 functions.php 中添加 shortcode 函数
    function display_articles_shortcode() {
        // 获取JSON数据
        $jsonData = file_get_contents('./output.json');
        // 将JSON数据解析为PHP数组
        $articles = json_decode($jsonData, true);
        // 对文章按时间排序(最新的排在前面)
        usort($articles, function ($a, $b) {
            return strtotime($b['time']) - strtotime($a['time']);
        });
        // 设置每页显示的文章数量
        $itemsPerPage = 30;
    
        // 生成文章列表
        ob_start(); // 开始缓存输出
        foreach (array_slice($articles, 0, $itemsPerPage) as $article) {
        ?>
            <div class="article">
                <h3>
                    <img src="<?php echo htmlspecialchars($article['icon']); ?>" alt="Icon" class="icon">
                    <a href="<?php echo htmlspecialchars($article['link']); ?>" target="_blank"><?php echo htmlspecialchars($article['title']); ?></a>
                </h3>
                <p>作者:<?php echo htmlspecialchars($article['site_name']); ?></p>
                <p><?php echo htmlspecialchars($article['description']); ?></p>
                <time><?php echo htmlspecialchars($article['time']); ?></time>
            </div>
        <?php
        }
        return ob_get_clean(); // 返回缓存的输出并清除缓存
    }
    
    // 注册简码
    add_shortcode('display_articles', 'display_articles_shortcode');

    8、可以自定义css样式让其精致的显示,这是我的css代码:

    /* Article container */
    .article {
        border: 1px solid #ccc;
        border-radius: 5px;
        padding: 15px;
        margin-bottom: 20px;
    }
    
    /* Article title */
    .article h3 {
        margin-top: 0;
    }
    
    /* Article icon */
    .icon {
        width: 50px;
        height: 50px;
        margin-right: 10px;
        border-radius: 50%;
    }
    
    /* Article metadata */
    .article p, .article time {
        margin: 5px 0;
    }
    
    /* Article time */
    .article time {
        font-style: italic;
    }
    
    /* Hover effect on article */
    .article:hover {
        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        transition: box-shadow 0.3s ease;
    }
    /* Article icon */
    .icon {
        width: 1.5em; /* 使用 em 单位可以根据标题字体大小调整图标大小 */
        height: auto; /* 自动调整高度以保持宽高比 */
        margin-right: 10px;
        vertical-align: middle; /* 垂直居中对齐 */
        border-radius: 50%;
    }
    

    9、在宝塔添加一个计划任务,定时访问执行第6步创建的php文件,以更新订阅数据。官网里说的那个自动刷新订阅源的方法,我按照官网设置了每隔30分钟刷新,不知道咋回事儿不管用,每次都要自己刷新后才更新订阅源。

    结语

    自己部署rss订阅源是一件非常有成就感的事儿,过程也是艰辛,尤其是我这种不会代码的,更是辛苦,一步一步地查看错误,幸好有GPT,帮我可以查找问题,解决问题,不至于求人。

  • 周末琐事

    周末琐事

    前言

    想想快要结婚了,啥东西都还没买,我怎么不着急呢,唉!

    以前的数据

    家里放的这个电脑上面存着我以前的数据,搜了一下,duanxiansen.xml还真有,结果导入失败,数据错误,好吧。继续再电脑上找,不放过一点儿蛛丝马迹,我还不信当初的我不会连一点儿数据不留。突然想起导出一下就会看到是什么样子的了呀,不负我望,还真有。c7c6106dc1e853ab9f1f9e381c77d284

    想把照片也上传,但是直接用FTP上传会上传原图,占内存。只好一个一个上传,反正照片就在那儿。

    网易邮箱

    翻电脑翻到了刚毕业时上班的离职情况,看起来好幼稚

    想起那会儿每天日报的的日子,要不是翻到邮件,我都快忘了,这才几年啊。

     

    吃饭

    在家的日子就是好,老爸揪的面片子杠杠的,不过是不是忘了我的饭量了,就一共三碗饭,老爸、老妈以及我一人一碗。唉,面片不够,油饼来补。葫芦炒鸡蛋、拌黄瓜、浆水面片,尤其是浆水,夏天必备呀。

    洗衣服

    正好趁着洗澡的功夫把衣服床单扔到洗衣机,这个洗衣机陪了我家好多年了,还在坚持工作,就是烘衣服时得按住,不然它会跑。

    出来转转

    晚上吃完饭出来逛逛广场,镇上的人比以前多了,学生好像少了,这几天中考,但是学生见得很少。记得我上初中时,一个年级要12个班,一个班七八十人,听我们这儿的人说,现在就剩五个班,一个班三十多人,好吧。我们镇相对于来说还是个大镇,那么学生去哪儿了,不可能少的,答案只有一个,要么去县城、要么上大城市去了。

    供桌

    其实我也不知道应该叫什么,一般北方农村的“上房”里放的桌子,以前的不行了,前段时间我妈让我看着买,我一口包揽了,结果在网上找寻无果就慌了,怎么会没有,不信邪的我拍照在网上找,还是没找到。找出来的都不太一样,要么就是南方那种供桌,单条子的,要么就是老板桌。这周回来我妈已经在我们镇上的家具店买好了。不过从始至终我都不知道这叫什么名字。

    友链

    以前加的友链自从上次数据丢失以后都没了,我只好把能记起的友链加上,剩下的我都在逛博客是查看是不是,然后再加,今天逛孙亮的博客发现我在里面,赶紧加上,哈哈。

    结尾

    吃了睡,睡了吃。主要是吃完就瞌睡,醒来之后会饿。

  • 街道快修了

    宁夏边边靠近我们的一个镇,路比我们的好多了

    上班了,从家里走的时候路都干着,一进我上班的镇上,全是小水坑,填一次烂一次,次次如此。听说前年以前路都好着,就是前年西吉(宁夏边边的一个小县城)那边修路,拉沙子的大车把我们这边的路压坏了,就成这样子了。不过听说快修了,希望快点吧,主要是街道上,一下雨就不能走了。

    1、雨下了一整天,心情有点儿不好,工作上的事儿,吐槽一下就行了,要是让同事看见了,影响不好,嗯,就是的。

    2、逛了好多博客,发现了马内这个博主,好像在批量留言申请友链,那会儿我还以为就是我收到了呢。不过他不是个人生活类独立博客,所以我就没兴趣了。

    3、回到单位才发现我忘记了一件事,把钥匙套忘记给商家寄过去了,上次买错了。都已经好几天了,明天要赶快寄过去。

    4、下班以后和同事打了会儿篮球,我们6:6,我其实不会打,凑人数,只会防守。队友发过来的球都接不住。很后悔上学那会儿应该打,那时候只知道打游戏。晚上打会儿篮球出出汗挺好,可以锻炼锻炼身体,除了爬山,就是篮球,再没有其他运动项目。

    5、油价又涨了,啥时候降到五块就好了,好怀念那会儿五块的时候(就去年的一次啥嘞,全国都降了,忘了什么原因,懵住了。)。