クイックスタート
キーを取得し、行をコピーして実行し、JSONを読み取る。
0。APIキーの取得
無料アカウントを作成し、APIキーを開いて1つ作成してください。その後、環境変数に格納してください:
export FNA_KEY=fna_live_...1。検索
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=climate+summit&size=2"{
"took_ms": 41,
"total": 1284,
"total_is_lower_bound": false,
"size": 2,
"offset": 0,
"results": [
{
"id": "9c1f8a4b2d3e5f6071829304a5b6c7d8",
"url": "https://example-news.com/world/climate-summit-opens",
"title": "Climate summit opens with a call for binding targets",
"description": "Delegates from 190 countries gathered on Monday ...",
"published_at": "2026-08-17T09:12:00Z",
"crawled_at": "2026-08-17T10:48:31Z",
"host": "example-news.com",
"sitename": "Example News",
"country": "GB",
"country_source": "cctld",
"lang": "en",
"tld": "com"
}
]
}そのレスポンスのうち、3つのフィールドはすぐに注目する価値があります。totalは返された記事数ではなく、一致した記事数です。速度のために10,000に制限されており、total_is_lower_boundはその制限に達したかどうかを示します。country_sourceは国の判定方法を表しており、これは重要です。なぜなら、ニュースデータセットの国の値の約3分の1は事実ではなく推測によるものだからです。そしてcrawled_atは誠実なタイムスタンプです。出版社はpublished_atを遡って設定できますが、クロール時間はパイプラインによって付与されます。
2。検索条件の絞り込み
フィルターは、パラメータ間ではANDで、1つのパラメータ内ではORで結合されます。つまりcountry=DE,AT&lang=deは「ドイツ語の記事で、ドイツまたはオーストリアから」という意味になります。これは、ウクライナ語の記事で、ウクライナから、最新順に今日のものを検索します:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?country=UA&lang=uk&date=today&sort=date&size=10"3。記事本文の取得
レスポンスを小さく保つため、記事本文はデフォルトで検索結果に含まれません。実際に必要な記事を選んだ後に、明示的にリクエストしてください。
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=inflation&full_text=true&size=5"記事の本文は、1記事あたり約2,000~4,000文字です。full_text=trueで20記事取得すると、言語モデルでは約40,000トークンになります。まず検索して、その後本文を取得してください。トークンコストをご覧ください。
4。一覧表示ではなく件数取得
多くの場合、有用な質問は「記事は何ですか」ではなく「ここに何らかの記事が存在するか、そしてそれはどこにあるか」です。結果ページ数個に対して数千トークンかかるところを約200トークンで回答数をカウントすることで、検索を実行する価値があるかどうかを判断するエージェントにとって適切な最初の呼び出しとなります:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/stats?q=earthquake&date=7d"レスポンスには、一致する全セット全体に対して計算された、国、言語、ドメインゾーンの各カウント、出版社、日付ごとのカウントが含まれます。
Pythonの場合
import os, requests
HEADERS = {"Authorization": "Bearer " + os.environ["FNA_KEY"]}
r = requests.get("https://freenewsapi.ai/v1/search", headers=HEADERS, params={
"q": "semiconductor export controls",
"date": "7d",
"lang": "en",
"size": 20,
"sort": "relevance",
})
for a in r.json()["results"]:
print(a["published_at"], a["host"], a["title"])JavaScriptの場合
const url = new URL("https://freenewsapi.ai/v1/search");
url.search = new URLSearchParams({ q: "central bank", date: "24h", size: "20" });
const { results } = await (await fetch(url, { headers: { Authorization: `Bearer ${FNA_KEY}` } })).json();
results.forEach(a => console.log(a.published_at, a.host, a.title));