跳到主要内容
知仓学习社ZHICANG

open-syllabus-api

Analyze most-taught books and texts via Open Syllabus analytics

不碰外部(只输出文字)无严重或高危命中brycewang-stanford/Auto-Empirical-Research-Skills

它会碰到什么

扫了多少1 个文本文件,6 KB
它会碰到什么不碰外部(只输出文字)
命中总数3 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

Open Syllabus API

Overview

Open Syllabus analyzes 20M+ college course syllabi from 7,000+ institutions in 140+ countries, tracking which books, articles, and media are most frequently assigned in higher education. The Explorer provides teaching frequency rankings and co-assignment patterns. Useful for curriculum research, textbook selection, and understanding disciplinary norms. Free for basic search; institutional subscription for full API access.

Explorer Interface

Web Search

# The primary interface is the web explorer:
# https://explorer.opensyllabus.org/

# Search by title, author, or field
# Filter by country, institution, discipline, year range

API Access

# API requires institutional subscription
# Base URL: https://api.opensyllabus.org/v1/

# Search titles
curl -H "Authorization: Bearer $OS_TOKEN" \
  "https://api.opensyllabus.org/v1/titles?query=republic+plato&limit=20"

# Get title details
curl -H "Authorization: Bearer $OS_TOKEN" \
  "https://api.opensyllabus.org/v1/titles/12345"

# Co-assignment analysis
curl -H "Authorization: Bearer $OS_TOKEN" \
  "https://api.opensyllabus.org/v1/titles/12345/co-assigned?limit=20"

# Rankings by field
curl -H "Authorization: Bearer $OS_TOKEN" \
  "https://api.opensyllabus.org/v1/rankings?field=Economics&limit=50"

Query Parameters

| Parameter | Description | Example |

|-----------|-------------|---------|

| query | Search text | query=machine+learning |

| field | Academic discipline | field=Computer Science |

| country | Country filter | country=US |

| institution | Institution filter | institution=Harvard |

| year_from | Start year | year_from=2020 |

| year_to | End year | year_to=2026 |

| limit | Results per page | limit=50 |

Key Metrics

| Metric | Description |

|--------|-------------|

| Teaching Score | 0-100 normalized frequency of syllabi appearances |

| Count | Raw number of syllabi featuring the title |

| Rank | Position in overall or field-specific ranking |

| Co-assignment | Titles frequently taught alongside this one |

Python Usage

import requests

BASE_URL = "https://api.opensyllabus.org/v1"


def search_titles(query: str, field: str = None,
                  country: str = None,
                  limit: int = 20, token: str = "") -> list:
    """Search Open Syllabus for assigned titles."""
    headers = {"Authorization": f"Bearer {token}"} if token else {}
    params = {"query": query, "limit": limit}
    if field:
        params["field"] = field
    if country:
        params["country"] = country

    resp = requests.get(
        f"{BASE_URL}/titles",
        headers=headers,
        params=params,
    )
    resp.raise_for_status()
    data = resp.json()

    results = []
    for item in data.get("results", []):
        results.append({
            "title": item.get("title"),
            "authors": item.get("authors"),
            "teaching_score": item.get("teaching_score"),
            "count": item.get("appearance_count"),
            "rank": item.get("rank"),
            "top_fields": item.get("top_fields", []),
        })
    return results


def get_co_assigned(title_id: int, limit: int = 20,
                    token: str = "") -> list:
    """Get titles frequently co-assigned with a given title."""
    headers = {"Authorization": f"Bearer {token}"} if token else {}
    resp = requests.get(
        f"{BASE_URL}/titles/{title_id}/co-assigned",
        headers=headers,
        params={"limit": limit},
    )
    resp.raise_for_status()
    return resp.json().get("results", [])


def get_field_rankings(field: str, limit: int = 50,
                       token: str = "") -> list:
    """Get most-taught titles in a field."""
    headers = {"Authorization": f"Bearer {token}"} if token else {}
    resp = requests.get(
        f"{BASE_URL}/rankings",
        headers=headers,
        params={"field": field, "limit": limit},
    )
    resp.raise_for_status()
    return resp.json().get("results", [])


# Example: find most-taught economics texts
# results = search_titles("microeconomics", field="Economics")
# for r in results:
#     print(f"#{r['rank']} {r['title']} — {r['authors']}")
#     print(f"  Teaching Score: {r['teaching_score']} "
#           f"({r['count']} syllabi)")

Top Assigned Works (Examples)

| Rank | Title | Author | Field |

|------|-------|--------|-------|

| 1 | The Elements of Style | Strunk & White | Writing |

| 2 | The Republic | Plato | Philosophy |

| 3 | A Manual for Writers | Turabian | Writing |

| ~10 | Thinking, Fast and Slow | Kahneman | Psychology |

| ~50 | Introduction to Algorithms | CLRS | CS |

Use Cases

  1. Curriculum design: Find canonical texts in a discipline
  2. Textbook market research: Identify widely adopted materials
  3. Teaching trends: Track changes in assigned readings over time
  4. Interdisciplinary mapping: Discover texts bridging fields
  5. Academic publishing: Understand teaching impact vs. citation impact

References

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。