MCP Goodnews

by VectorInstitute
Verified
"""Pydantic BaseModels for NewsAPI.org Response Objects. This uses the top-headlines API — see https://newsapi.org/docs/endpoints/top-headlines """ import os import httpx from pydantic import BaseModel, ConfigDict, Field from pydantic.alias_generators import to_camel class ArticleSource(BaseModel): model_config = ConfigDict(populate_by_name=True) id_: str | None = Field(alias="id") name: str | None class Article(BaseModel): model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True) source: ArticleSource author: str | None title: str | None description: str | None url: str | None url_to_image: str | None published_at: str | None content: str | None class NewsAPIResponse(BaseModel): model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True) status: str total_results: int articles: list[Article] async def get_top_headlines(category: str) -> list[Article]: async with httpx.AsyncClient() as client: response = await client.get( "https://newsapi.org/v2/top-headlines", params={ "apiKey": os.environ.get("NEWS_API_KEY"), "language": "en", "category": category, }, ) response_json = response.json() news_api_response_obj = NewsAPIResponse.model_validate(response_json) return news_api_response_obj.articles