使用 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,
]);
});
}
- 完整的命令可以见 Git 提交 github.com/xuchunyang/learn-larave...
运行效果
➜ 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%%
我加了一个简单的展示页面:
Big胆,竟然敢采集learnku,说,周末是不是你干的~
这种都是违法行为,别这么搞。
系统现在稳定了