open-navigator / scripts /datasources /localview /README_workflow.md
jcbowyer's picture
Clean HuggingFace deployment without binary files
e59d91d
|
Raw
History Blame Contribute Delete
4.62 kB
# LocalView Scraper Scripts
Scripts for downloading and updating municipal meeting videos and transcripts from LocalView sources.
## Overview
LocalView tracks municipal government meetings across the U.S. This directory contains scrapers to:
- Download meeting videos from YouTube channels
- Extract transcripts and captions
- Update the dataset with 2025/2026 meetings
- Keep data current with ongoing meetings
## Data Sources
1. **Historical Data** (2006-2024): Harvard Dataverse
- URL: https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/NJTBEM
- Download CSV files manually and place in `data/cache/localview/`
2. **Current Data** (2025+): YouTube scraper
- Scrape specific municipal YouTube channels
- Extract captions/transcripts automatically
- Update weekly/monthly
## Scripts
### `download_dataverse_dataset.py` - Download Historical Data
Downloads the LocalView dataset from Harvard Dataverse (requires manual auth).
```bash
# Interactive download with browser authentication
python scripts/localview/download_dataverse_dataset.py
```
### `scrape_youtube_channels.py` - Scrape Current Meetings
Scrapes municipal YouTube channels for new meeting videos.
```bash
# Scrape all known channels
python scripts/localview/scrape_youtube_channels.py --update
# Scrape specific channels
python scripts/localview/scrape_youtube_channels.py --channels "UCxxxxx,UCyyyyy"
# Scrape by state
python scripts/localview/scrape_youtube_channels.py --states CA,MA,TX
```
**Features:**
- Uses YouTube Data API v3
- Downloads video metadata
- Extracts captions/transcripts
- Detects meeting type (council, planning, etc.)
- Stores in LocalView format
### `extract_transcripts.py` - Download Captions
Extracts transcripts from YouTube videos using captions.
```bash
# Extract from all videos in cache
python scripts/localview/extract_transcripts.py
# Extract from specific videos
python scripts/localview/extract_transcripts.py --video-ids "abc123,def456"
```
### `update_municipality_list.py` - Update Channel List
Updates the list of municipal YouTube channels by searching for city government channels.
```bash
# Search for new municipal channels
python scripts/localview/update_municipality_list.py --states AL,GA,IN,MA,WA,WI
```
## Setup
### 1. Install Dependencies
```bash
pip install youtube-transcript-api google-api-python-client
```
### 2. Get YouTube API Key
1. Go to: https://console.cloud.google.com/apis/credentials
2. Create a new API key
3. Enable YouTube Data API v3
4. Add to `.env`:
```bash
YOUTUBE_API_KEY=your_api_key_here
```
### 3. Download Historical Data
Visit the Harvard Dataverse and download CSV files:
- https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/NJTBEM
Save to: `data/cache/localview/`
## Output Format
All scrapers output to the LocalView standard format:
**Municipalities** (`data/cache/localview/municipalities.csv`):
```csv
municipality_name,state,county,population,website_url,youtube_channel_id
```
**Videos** (`data/cache/localview/videos_{year}.csv`):
```csv
video_id,municipality_name,meeting_date,meeting_type,video_url,platform,duration_minutes,has_captions,transcript_available
```
**Transcripts** (`data/cache/localview/transcripts/{video_id}.txt`):
- Plain text transcripts
- One file per video
- Timestamps preserved in separate JSON
## Automation
### Weekly Update Cron Job
```bash
# Add to crontab for weekly updates
0 2 * * 0 cd /home/developer/projects/open-navigator && source .venv/bin/activate && python scripts/localview/scrape_youtube_channels.py --update
```
### Manual Update
```bash
# Update all data sources
./scripts/localview/update_all.sh
```
## Integration
After scraping, load data into Open Navigator:
```bash
# Load into bronze/gold tables
python pipeline/create_events_gold_tables.py
```
## Municipality Channels
Common patterns for finding municipal YouTube channels:
- Search: "[City Name] [State] government meetings"
- URL patterns:
- youtube.com/@[cityname]gov
- youtube.com/c/[CityName]Government
- youtube.com/user/[cityname]tv
## Troubleshooting
**API Quota Exceeded:**
- YouTube API has daily quota limits
- Use `--delay` flag to slow down requests
- Consider multiple API keys for high volume
**Missing Captions:**
- Not all videos have captions enabled
- Some municipalities use third-party platforms (Granicus, Archive.org)
- Check `has_captions` field before attempting extraction
**Authentication Issues:**
- Dataverse requires JavaScript/cookies
- Download manually in browser
- Cannot automate without institutional access