使用 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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

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

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

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

系统现在稳定了

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

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