# 案件スクレイパー（Job Scraper）

## 概要

Lancers・CrowdWorks・ジモティーの案件情報をスクレイピングし、AI分析・お気に入り管理・提案文生成を行う機能。キーワード検索・除外フィルタ・予算フィルタで案件を絞り込める。

## URL一覧

| ページ | URL | 説明 |
|--------|-----|------|
| メイン | `/job-scraper` | 案件一覧・フィルタ・スクレイピング実行 |
| 詳細取得API | `/job-scraper/api/detail/{id}` | 案件詳細をスクレイピング取得 |
| AI分析API | `/job-scraper/api/ai-analyze` | 案件のAI一括分析 |
| AI詳細API | `/job-scraper/api/ai-detail/{id}` | 個別案件のAI詳細分析 |
| 提案文生成API | `/job-scraper/api/generate-proposal/{id}` | AI提案文生成 |
| お気に入りAPI | `/job-scraper/api/favorite/{id}` | お気に入りトグル |
| スクレイピング実行 | `/job-scraper/scrape-async` | 非同期スクレイピング開始 |
| 進捗確認 | `/job-scraper/scrape/progress/{jobId}` | スクレイピング進捗ポーリング |

## 主要機能

| 機能 | 説明 |
|------|------|
| キーワードスクレイピング | Lancers・CrowdWorks・ジモティーからキーワード検索で案件取得 |
| AI一括分析 | 取得した案件をClaude AIで分析しスコアリング |
| AI詳細分析 | 個別案件の詳細をAIで深掘り分析 |
| 提案文生成 | 案件に対するAI提案文を自動生成（ユーザースキル考慮） |
| お気に入り | 気になる案件をお気に入り登録 |
| 除外キーワード | 不要な案件をキーワードで非表示 |
| 予算フィルタ | 予算上限・下限で案件を絞り込み |
| 閲覧履歴 | 閲覧した案件を履歴タブで確認 |

## Artisanコマンド

```bash
# キーワード指定でスクレイピング実行
php artisan job:scrape "Laravel" --max=30

# プラットフォーム指定
php artisan job:scrape "PHP" --platform=lancers --max=20
```

## 技術構成

| レイヤー | ファイル |
|----------|----------|
| Controller | `App\Http\Controllers\Job\JobScraperController` |
| Services | `App\Services\Job\LancersScraperService` |
|  | `App\Services\Job\CrowdWorksScraperService` |
|  | `App\Services\Job\JmtyJobScraperService` |
|  | `App\Services\Job\JobAiAnalysisService` |
| Job | `App\Jobs\Job\JobScraperScrapeJob` |
| Models | `App\Models\Job\JobListing` |
|  | `App\Models\Job\JobScraperExcludeKeyword` |
| Command | `App\Console\Commands\Job\ScrapeJobListingsCommand` |
| View | `resources/views/job/scraper/index.blade.php` |
| JS | `resources/js/job/job-scraper.js` |
| CSS | `resources/css/job/job-scraper.css` |

## データベース

### テーブル

| テーブル | 説明 |
|---------|------|
| `job_listings` | 案件情報（タイトル、URL、予算、プラットフォーム、AI分析結果等） |
| `job_scraper_exclude_keywords` | 除外キーワード |

### 主要カラム（job_listings）

| カラム | 説明 |
|--------|------|
| `platform` | プラットフォーム（lancers, crowdworks, jmty） |
| `external_id` | 外部サイトのID |
| `title` | 案件タイトル |
| `budget_min` / `budget_max` | 予算範囲 |
| `work_type` | 案件タイプ |
| `ai_analysis` | AI分析結果テキスト |
| `ai_score` | AIスコア（1-100） |
| `is_favorite` | お気に入りフラグ |
| `viewed_at` | 閲覧日時 |
| `status` | ステータス（open/closed） |

## 必要な環境変数

| 変数名 | 説明 |
|--------|------|
| `ANTHROPIC_API_KEY` | Anthropic APIキー（AI分析・提案文生成に必要） |
