使用 Laravel 备份 Learnku 上自己的话题

周末遇到一个老旧 SQLite 的问题,想参考下之前在 Learnku 上的话题,但是网站访问不了,Google 搜索的 Cache 也没有。现在网站恢复了,想到可以备份下自己的话题,顺便还可以锻炼下 Laravel 技术。

实现思路

在个人中心的我的话题页面有话题列表,可以获得话题的URL和标题,在话题的编辑页面能找到 Markdown 源文件,这样帖子就齐活了。

  • 话题列表采用典型的 Laravel 分页,爬虫需要递归处理下分页
  • 访问编辑页面需要通过 Laravel 授权验证,需要提供本人的 laravel_session
    public function handle(): void
    {
        // https://learnku.com/users/72619/topics
        $url = $this->ask('请输入你的 learnku.com 话题列表 URL', 'https://learnku.com/users/72619/topics');

        $topics = $this->getTopics($url);

        $laravel_session = $this->ask('请输入你的 learnku.com laravel_session', '形如 eyJp...%3D');

        $this->withProgressBar($topics, function ($topic) use ($laravel_session) {
            // https://learnku.com/laravel/t/86718
            $url = $topic['url'];
            $title = $topic['title'];

            // Extract id from URL with regex
            $id = Str::match('/\d+$/', $url);

            $body = $this->getTopicBody($id, $laravel_session);

            // Save to database
            LearnkuTopic::updateOrCreate(['url' => $url], [
                'title' => $title,
                'body' => $body,
            ]);
        });
    }

运行效果

➜  learn-laravel-2024 git:(main) ✗ artisan app:import-learnku-topics

 请输入你的 learnku.com 话题列表 URL [https://learnku.com/users/72619/topics]:
 >

正在导入话题列表:https://learnku.com/users/72619/topics
话题列表导入完毕,共 30 个话题

 请输入你的 learnku.com laravel_session [形如 eyJp...%3D]:
 > eyJp...0%3D

 30/30 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%%

我加了一个简单的展示页面:

Screenshot 2024-09-03 at 17 07 09

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 4

Big胆,竟然敢采集learnku,说,周末是不是你干的~

5个月前 评论
xuchunyang (楼主) 5个月前
Summer

这种都是违法行为,别这么搞。

系统现在稳定了

5个月前 评论
xuchunyang (楼主) 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!