Skip to main content

Schedule Methods

Schedule methods allow you to set up automated, recurring scrapes. See the MeterClient reference for complete method signatures.

Quick reference

MethodDescription
create_schedule()Create a recurring schedule
list_schedules()List all schedules
update_schedule()Modify schedule settings
delete_schedule()Delete a schedule
get_schedule_changes()Get unseen changes (pull-based)

Common workflows

Interval-based monitoring

from meter_sdk import MeterClient

client = MeterClient(api_key="sk_live_...")

# Run every hour
schedule = client.create_schedule(
    strategy_id="550e8400-e29b-41d4-a716-446655440000",
    url="https://example.com/products",
    interval_seconds=3600
)

print(f"Schedule created: {schedule['id']}")
print(f"Next run: {schedule['next_run_at']}")

Cron-based monitoring

# Daily at 9 AM
schedule = client.create_schedule(
    strategy_id="550e8400-e29b-41d4-a716-446655440000",
    url="https://example.com/products",
    cron_expression="0 9 * * *"
)

# Weekdays at 8 AM
schedule = client.create_schedule(
    strategy_id="550e8400-e29b-41d4-a716-446655440000",
    url="https://example.com/products",
    cron_expression="0 8 * * 1-5"
)

With webhook

schedule = client.create_schedule(
    strategy_id="550e8400-e29b-41d4-a716-446655440000",
    url="https://example.com/products",
    interval_seconds=3600,
    webhook_url="https://your-app.com/webhooks/meter"
)

Pull-based change detection

import time

while True:
    # Check for changes every hour
    changes = client.get_schedule_changes(
        schedule_id="880e8400-e29b-41d4-a716-446655440000",
        mark_seen=True
    )

    if changes['count'] > 0:
        print(f"Processing {changes['count']} changes")
        for change in changes['changes']:
            # Process change['results']
            update_database(change['results'])

    time.sleep(3600)

Keyword filtering

Filter results to only include items matching specific keywords:
# Filter for articles mentioning both "jfk" AND "tariff"
changes = client.get_schedule_changes(
    schedule_id="880e8400-e29b-41d4-a716-446655440000",
    filter="+jfk +tariff"
)

# Filter for articles mentioning "jfk" OR "elon"
changes = client.get_schedule_changes(
    schedule_id="880e8400-e29b-41d4-a716-446655440000",
    filter="jfk elon"
)

# Filter for articles with "jfk" but NOT "biden"
changes = client.get_schedule_changes(
    schedule_id="880e8400-e29b-41d4-a716-446655440000",
    filter="+jfk -biden"
)

# Exact phrase matching
changes = client.get_schedule_changes(
    schedule_id="880e8400-e29b-41d4-a716-446655440000",
    filter='"elon musk"'
)
The filter applies to individual items within results. Only matching items are returned. Jobs with zero matching items are excluded entirely.

Manage schedules

# List all schedules
schedules = client.list_schedules()

for schedule in schedules:
    print(f"{schedule['id']}: {schedule['enabled']}")

# Disable temporarily
client.update_schedule(schedule_id, enabled=False)

# Change interval
client.update_schedule(schedule_id, interval_seconds=7200)

# Delete
client.delete_schedule(schedule_id)

Pause and resume

# Pause during maintenance
client.update_schedule(schedule_id, enabled=False)

# Do maintenance work
regenerate_strategy()

# Resume
client.update_schedule(schedule_id, enabled=True)

See also

Need help?

Email me at [email protected]