HTML 77.2%
TypeScript 10.5%
Python 9.6%
JavaScript 2.5%
1"""Microsoft Research — RSS feed (blog posts and publication announcements) → ANNOUNCEMENT events.23Items categorised as publications (category "Publication" or a /research/publication/ URL) additionally become `paper` entities4(title, authors, date, abstract, URL). Blog posts stay events only; release-like posts are queued for LLM extraction.5"""6from __future__ import annotations78import re910from aiatlas.registry import org_ref11from aiatlas.sdk.connector import BaseConnector, Parsed, RunContext12from aiatlas.sdk.extract.feeds import FeedItem13from aiatlas.sdk.facts import EntityRef, Facts, Target14from aiatlas.sdk.fetch import FetchResult1516from ._common import announcement_events1718FEED = "https://www.microsoft.com/en-us/research/feed/"192021class MicrosoftResearchConnector(BaseConnector):22 name = "microsoft_research"23 label = "Microsoft Research — blog & publications feed"24 description = "Microsoft Research RSS feed: research blog posts (events) and publications (paper entities)."25 source_key = "microsoft.com/research"26 version = "1"27 parser_version = "1"28 interval_seconds = 720029 min_interval_seconds = 360030 rate_per_min = 1031 tier = 132 priority = 133 expected_min_records = 134 concurrency = 13536 async def discover(self, ctx: RunContext) -> list[Target]:37 return [Target(url=FEED, doc_type="feed", key="feed", min_bytes=1000)]3839 async def extract(self, ctx: RunContext, target: Target, res: FetchResult, parsed: Parsed) -> Facts:40 facts = Facts()41 org = org_ref("microsoft")42 facts.entities.append(org)43 if parsed.kind != "feed":44 return facts45 announcement_events(facts, org, parsed.feed_items, source_name="microsoft.com/research", max_follow=10)46 for it in parsed.feed_items:47 if is_publication(it):48 paper_entity(facts, org, it)49 facts.document_title, facts.document_entity = "Microsoft Research feed", org50 return facts515253def is_publication(it: FeedItem) -> bool:54 cats = {c.lower() for c in it.categories}55 return "publication" in cats or "publications" in cats or "/research/publication/" in it.url565758def paper_entity(facts: Facts, org: EntityRef, it: FeedItem) -> EntityRef:59 paper = facts.entity("paper", it.title, identifiers={"url": it.url}, organization=org)60 facts.claim(paper, "published_at", it.published_at.date().isoformat() if it.published_at else None)61 facts.claim(paper, "abstract", (it.summary or "")[:2000] or None)62 authors = [a.strip() for chunk in it.authors for a in re.split(r",|\band\b", chunk) if a.strip()]63 facts.claim(paper, "authors", authors or None)64 facts.claim(paper, "paper_url", it.url)65 facts.relate(paper, "published_by", org)66 return paper676869CONNECTORS = [MicrosoftResearchConnector]70