Pika-aloitus
Hanki avain, kopioi rivi, suorita se, lue JSON.
0. Hanki avain
Luo ilmainen tili, avaa API-avaimet ja luo yksi. Säilytä se sitten ympäristömuuttujassa:
export FNA_KEY=fna_live_...1. Etsi
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"
}
]
}Kolme kenttää vastauksessa ovat heti huomionarvoisia. total kertoo, kuinka monta artikkelia vastasi hakua, ei kuinka monta palautettiin — se on rajoitettu arvoon 10,000 nopeuden vuoksi, ja total_is_lower_bound kertoo, milloin raja ylitetään. country_source kertoo, miten maa on määritetty, mikä on tärkeää, koska noin kolmasosa maakoodeista missä tahansa uutisaineistossa on arvioita eikä faktoja. Ja crawled_at on rehellinen aikaleima: julkaisijat voivat päivämäärätä published_at taaksepäin, mutta keräysaika määritetään putkiston toimesta.
2. Rajaa hakua
Suodattimet yhdistyvät AND-ehtona eri parametrien välillä ja OR-ehtona yhden parametrin sisällä. Esimerkiksi country=DE,AT&lang=de tarkoittaa "saksankielisiä artikkeleita Saksasta tai Itävallassa". Tämä hakee tämän päivän ukrainankielisiä artikkeleita Ukrainasta uusimmista alkaen:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?country=UA&lang=uk&date=today&sort=date&size=10"3. Hanki koko teksti
Hakutuloksissa artikkelin sisältö jätetään oletuksena pois, jotta vastaukset pysyvät pieninä. Pyydä sisältöä erikseen, kun olet valinnut ne artikkelit, joita todella tarvitset:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=inflation&full_text=true&size=5"Koko artikkelin teksti on noin 2,000–4,000 merkkiä per artikkeli. Kaksikymmentä artikkelia, joissa on full_text=true, vastaa noin 40,000 tokenia kielimallille. Valitse ensin, hae sitten artikkelien sisällöt. Katso token-kustannukset.
4. Laske sen sijaan, että luettaisiin
Usein hyödyllinen kysymys ei ole "mitkä artikkelit ovat kyseessä", vaan "onko täällä mitään ollenkaan, ja missä se on". Vastauksien laskeminen maksaa murto-osan kustannuksista — noin 200 tokenia verrattuna useisiin tuhansiin tulossivua kohden — mikä tekee siitä oikean ensimmäisen kutsun agentille, joka päättää, onko haku kannattavaa suorittaa:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/stats?q=earthquake&date=7d"Vastauksessa näkyvät laskurit maan, kielen, verkkotunnetun alueen, uutistoimiston ja päivän mukaan. Laskurit perustuvat koko osumajoukkoon, ei vain nykyiseen sivuun.
Pythonilla
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"])JavaScriptillä
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));