crawl_config.json 11.8 KB
{
  "version": "1.0.0",
  "agent": "story-architect",
  "taskId": "T-mnwkukzg",
  "respect_robots_txt": true,
  "global_rate_limits": {
    "default_request_interval_sec": 2.5,
    "max_concurrent_requests_per_domain": 1,
    "max_retries": 3,
    "retry_backoff_sec": [2, 5, 10]
  },
  "user_agents": [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
  ],
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
    "Accept-Encoding": "gzip, deflate, br",
    "DNT": "1",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1"
  },
  "sources": [
    {
      "id": "bbc-writersroom",
      "name": "BBC Writersroom Script Library",
      "base_url": "https://www.bbc.co.uk/writersroom/scripts",
      "homepage": "https://www.bbc.co.uk/writersroom",
      "authority": "very_high",
      "category": "screenplay_archive",
      "rate_limits": {
        "request_interval_sec": 2.5,
        "max_requests_per_minute": 20
      },
      "crawl_rules": {
        "entry_points": [
          "https://www.bbc.co.uk/writersroom/scripts"
        ],
        "allowed_patterns": [
          "^https://www\\.bbc\\.co\\.uk/writersroom/scripts(?:/.*)?$",
          "^https://www\\.bbc\\.co\\.uk/writersroom/(?:tv|radio|film|childrens)/(?:.*)?$"
        ],
        "blocked_patterns": [
          "\\?.*redirect=",
          "/search\\?",
          "/user/"
        ],
        "follow_links": true,
        "max_depth": 3,
        "file_types": ["pdf"],
        "file_patterns": [
          "\\.pdf$"
        ]
      },
      "parsing_rules": {
        "title": ["h1", ".script-title", "title"],
        "writer": [".script-writer", "[data-writer]", ".author"],
        "genre": [".script-genre", ".genre"],
        "summary": [".script-synopsis", ".synopsis", "meta[name='description']@content"],
        "script_url": ["a[href$='.pdf']@href"],
        "release_year": [".script-year", ".year"]
      },
      "notes": "Official BBC resource. Static HTML with direct PDF links. No login required. Quarterly updates."
    },
    {
      "id": "simplyscripts",
      "name": "SimplyScripts",
      "base_url": "https://simplyscripts.com",
      "homepage": "https://simplyscripts.com",
      "authority": "high",
      "category": "screenplay_archive",
      "rate_limits": {
        "request_interval_sec": 3.0,
        "max_requests_per_minute": 15
      },
      "crawl_rules": {
        "entry_points": [
          "https://www.simplyscripts.com/wga_top_101_scripts.html",
          "https://simplyscripts.com/oscar-screenplays-96.html"
        ],
        "allowed_patterns": [
          "^https://(www\\.)?simplyscripts\\.com/.*\\.(html|htm|pdf|txt)$",
          "^https://(www\\.)?simplyscripts\\.com/.+"
        ],
        "blocked_patterns": [
          "\\?.*search=",
          "/cgi-bin/",
          "/ads/"
        ],
        "follow_links": true,
        "max_depth": 2,
        "file_types": ["pdf", "txt", "html"],
        "file_patterns": [
          "\\.(pdf|txt|html?)$"
        ]
      },
      "parsing_rules": {
        "title": ["title", "h1", "h2", "h3"],
        "writer": ["b:contains('Written by') + *", ".writer", "p:contains('Written by')"],
        "script_url": ["a[href$='.pdf']@href", "a[href$='.txt']@href"],
        "genre": ["p:contains('Genre')", ".genre"]
      },
      "notes": "Long-running aggregator. Mix of PDF and plain-text. Annual batch crawl recommended during awards season."
    },
    {
      "id": "studiobinder",
      "name": "StudioBinder Screenplay Database",
      "base_url": "https://www.studiobinder.com",
      "homepage": "https://www.studiobinder.com",
      "authority": "high",
      "category": "screenplay_archive_education",
      "rate_limits": {
        "request_interval_sec": 2.0,
        "max_requests_per_minute": 25
      },
      "crawl_rules": {
        "entry_points": [
          "https://www.studiobinder.com/blog/best-free-movie-scripts-online/",
          "https://www.studiobinder.com/blog/save-the-cat-beat-sheet/"
        ],
        "allowed_patterns": [
          "^https://www\\.studiobinder\\.com/blog/.+"
        ],
        "blocked_patterns": [
          "/shop/",
          "/checkout/",
          "/account/",
          "\\?.*utm_"
        ],
        "follow_links": false,
        "max_depth": 1,
        "file_types": ["pdf"],
        "file_patterns": [
          "\\.pdf$"
        ]
      },
      "parsing_rules": {
        "title": ["h1.entry-title", "h1", "title"],
        "script_url": ["a[href$='.pdf']@href"],
        "movie_title": [".script-title", "h3", "h4"],
        "year": [".script-year"],
        "description": ["meta[name='description']@content", ".entry-content p"]
      },
      "notes": "Curated lists with clean HTML. PDFs may be on CDN. Do not recurse deeply; article pages are the primary target."
    },
    {
      "id": "tvtropes",
      "name": "TV Tropes Archetype Database",
      "base_url": "https://tvtropes.org",
      "homepage": "https://tvtropes.org",
      "authority": "medium_high",
      "category": "archetype_database",
      "rate_limits": {
        "request_interval_sec": 5.0,
        "max_requests_per_minute": 10,
        "daily_max_requests": 500
      },
      "crawl_rules": {
        "entry_points": [
          "https://tvtropes.org/pmwiki/pmwiki.php/Main/ArchetypalCharacter",
          "https://tvtropes.org/pmwiki/pmwiki.php/Main/DeconstructedCharacterArchetype",
          "https://tvtropes.org/pmwiki/pmwiki.php/Main/TheHerosJourney",
          "https://tvtropes.org/pmwiki/pmwiki.php/Main/ThreeActStructure"
        ],
        "allowed_patterns": [
          "^https://tvtropes\\.org/pmwiki/pmwiki\\.php/Main/.+$"
        ],
        "blocked_patterns": [
          "/pmwiki/pmwiki.php/Trivia/",
          "/pmwiki/pmwiki.php/WMG/",
          "/pmwiki/pmwiki.php/YMMV/",
          "/pmwiki/pmwiki.php/Fridge/",
          "/forum/",
          "/reviews/"
        ],
        "follow_links": true,
        "max_depth": 2,
        "file_types": ["html"],
        "file_patterns": [
          "\\.html?$"
        ]
      },
      "parsing_rules": {
        "title": ["h1", "title"],
        "trope_description": [".trope-description", "#main-article p", ".article-content p"],
        "examples": [".folder-label", "ul li"],
        "related_tropes": ["a[href^='/pmwiki/pmwiki.php/Main/']@href"]
      },
      "notes": "Heavy anti-bot protections. Use conservative rate limits. Focus on Main/ namespace pages only. Do not mirror the entire site."
    },
    {
      "id": "reedsy-stc",
      "name": "Reedsy Save the Cat! Beat Sheet Guide",
      "base_url": "https://reedsy.com",
      "homepage": "https://reedsy.com",
      "authority": "very_high",
      "category": "story_structure_education",
      "rate_limits": {
        "request_interval_sec": 2.0,
        "max_requests_per_minute": 25
      },
      "crawl_rules": {
        "entry_points": [
          "https://reedsy.com/blog/guide/story-structure/save-the-cat-beat-sheet/"
        ],
        "allowed_patterns": [
          "^https://reedsy\\.com/blog/guide/story-structure/.+$"
        ],
        "blocked_patterns": [
          "/marketplace/",
          "/login/",
          "/signup/",
          "\\?.*utm_"
        ],
        "follow_links": false,
        "max_depth": 1,
        "file_types": ["html"],
        "file_patterns": []
      },
      "parsing_rules": {
        "title": ["h1", "title"],
        "beat_name": ["h2", "h3"],
        "beat_description": ["h2 + p", "h3 + p", ".blog-post-content p"],
        "page_ranges": ["p:contains('page')", "td"]
      },
      "notes": "Educational article with detailed STC explanations. Single-page target. No deep crawling needed."
    },
    {
      "id": "finaldraft-beats",
      "name": "Final Draft Blog — Beat Sheet Essentials",
      "base_url": "https://www.finaldraft.com",
      "homepage": "https://www.finaldraft.com",
      "authority": "very_high",
      "category": "story_structure_education",
      "rate_limits": {
        "request_interval_sec": 2.5,
        "max_requests_per_minute": 20
      },
      "crawl_rules": {
        "entry_points": [
          "https://www.finaldraft.com/blog/what-is-a-beat-sheet-an-essential-screenwriting-tool-explained"
        ],
        "allowed_patterns": [
          "^https://www\\.finaldraft\\.com/blog/.+$"
        ],
        "blocked_patterns": [
          "/store/",
          "/cart/",
          "/account/",
          "\\?.*utm_"
        ],
        "follow_links": false,
        "max_depth": 1,
        "file_types": ["html"],
        "file_patterns": []
      },
      "parsing_rules": {
        "title": ["h1", "title"],
        "section_heading": ["h2", "h3"],
        "content": [".blog-content p", "article p"]
      },
      "notes": "Industry-standard software vendor. Single high-value article target."
    },
    {
      "id": "chinese-short-drama-news",
      "name": "Chinese Short Drama Craft News Aggregator",
      "base_url": "https://news.qq.com",
      "homepage": "https://news.qq.com",
      "authority": "medium",
      "category": "short_drama_craft",
      "rate_limits": {
        "request_interval_sec": 2.0,
        "max_requests_per_minute": 25
      },
      "crawl_rules": {
        "entry_points": [
          "https://news.qq.com/rain/a/20250815A06YPK00",
          "https://www.thepaper.cn/newsDetail_forward_31407239",
          "https://kandian.sina.com.cn/article_3840084769_e4e30b2101902lc1q.html"
        ],
        "allowed_patterns": [
          "^https://news\\.qq\\.com/.+$",
          "^https://www\\.thepaper\\.cn/.+$",
          "^https://kandian\\.sina\\.com\\.cn/.+$"
        ],
        "blocked_patterns": [
          "/video/",
          "/live/",
          "\\?.*ad=",
          "\\?.*utm_"
        ],
        "follow_links": false,
        "max_depth": 1,
        "file_types": ["html"],
        "file_patterns": []
      },
      "parsing_rules": {
        "title": ["h1", "title"],
        "author": [".author", ".article-author", ".post_author"],
        "publish_time": ["time", ".publish-time", ".post_time"],
        "content": [".content-article p", "#content p", ".article-content p"],
        "tags": [".tag", ".keywords"]
      },
      "notes": "Practitioner interviews and hook/reversal formulas for Douyin/Kuaishou. Article pages only; no recursion."
    },
    {
      "id": "chinese-structure-guides",
      "name": "Chinese Story Structure Guides (Sohu / Douban / WeChat)",
      "base_url": "https://www.sohu.com",
      "homepage": "https://www.sohu.com",
      "authority": "medium",
      "category": "story_structure_education",
      "rate_limits": {
        "request_interval_sec": 2.0,
        "max_requests_per_minute": 25
      },
      "crawl_rules": {
        "entry_points": [
          "https://www.sohu.com/a/282558444_285386",
          "https://m.douban.com/book/review/13511605/",
          "https://m.douban.com/book/review/13382062/",
          "https://www.douban.com/group/topic/160393993/"
        ],
        "allowed_patterns": [
          "^https://www\\.sohu\\.com/a/.+$",
          "^https://m\\.douban\\.com/.+$",
          "^https://www\\.douban\\.com/.+$"
        ],
        "blocked_patterns": [
          "/search?",
          "/login",
          "/register"
        ],
        "follow_links": false,
        "max_depth": 1,
        "file_types": ["html"],
        "file_patterns": []
      },
      "parsing_rules": {
        "title": ["h1", "title"],
        "content": ["article p", ".rich-content p", ".topic-content p"],
        "author": [".author-name", ".user-info"]
      },
      "notes": "Fan translations and practitioner summaries of Save the Cat! and Three-Act Structure in Chinese. WeChat pages may require handling MP redirect query strings."
    }
  ]
}