はじめに
こんにちは、エンジニアのkeitaMaxです。
前回の記事でスクレイピングすることができました。
前回の記事
今回はスクレイピングを定期的に実行できるようにしたいと思います。
スケジューリング作成
src/app/routes
フォルダのconsole.php
ファイルに以下の記述をします。
Schedule::command('roach:run Laraveldocsspider')->everyFiveSeconds();
確認
以下コマンドで確認します。
php artisan schedule:list
root@1460808f039b:/app# php artisan schedule:list
0 * * * * php artisan inspire ........................................................................ Next Due: 43 minutes from now
* * * * * 5s php artisan roach:run Laraveldocsspider ..................................................... Next Due: 2 seconds from now
root@1460808f039b:/app#
しっかりと5秒ごとに実行されるようにcronに記述されていることがわかります。
通常、ローカル開発マシンにスケジューラの cron エントリを追加することはありません。代わりに、Artisan コマンドを使用できますschedule:work。このコマンドはフォアグラウンドで実行され、コマンドを終了するまで 1 分ごとにスケジューラを呼び出します。
(引用:https://laravel.com/docs/11.x/scheduling)
スケジューラをローカルで実行するには以下コマンドを実行するとできます。
php artisan schedule:work
実行されるとlaravel.logに吐き出されるので以下コマンドで実行されているかを確認します。
tail -f storage/logs/laravel.log
実行してから数秒経つと以下のように出力されます。
[2024-07-03 08:21:00] local.INFO: Run starting
[2024-07-03 08:21:00] local.INFO: Dispatching request {"uri":"https://roach-php.dev/docs/spiders"}
[2024-07-03 08:21:01] local.INFO: Item scraped {"title":"Spiders","subtitle":"Basic Concepts"}
[2024-07-03 08:21:01] local.INFO: Run statistics {"duration":"00:00:00","requests.sent":1,"requests.dropped":0,"items.scraped":1,"items.dropped":0}
[2024-07-03 08:21:01] local.INFO: Run finished
[2024-07-03 08:21:05] local.INFO: Run starting
[2024-07-03 08:21:05] local.INFO: Dispatching request {"uri":"https://roach-php.dev/docs/spiders"}
[2024-07-03 08:21:06] local.INFO: Item scraped {"title":"Spiders","subtitle":"Basic Concepts"}
[2024-07-03 08:21:06] local.INFO: Run statistics {"duration":"00:00:00","requests.sent":1,"requests.dropped":0,"items.scraped":1,"items.dropped":0}
これで5秒に一回実行されているのを確認できました。
おわりに
この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。
最後まで読んでいただきありがとうございました!
参考