Permulaan pantas
Dapatkan kunci, sali baris, jalankan, baca JSON.
0. Dapatkan kunci
Buat akaun percuma, buka kunci API dan buat satu. Kemudian simpankannya dalam pembolehubah persekitaran:
export FNA_KEY=fna_live_...1. Cari
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"
}
]
}Tiga medan dalam respons ini perlu diperhatikan serta-merta. total ialah bilangan artikel yang sepadan, bukan bilangan yang dikembalikan — ia disekat pada 10,000 untuk kelajuan, dan total_is_lower_bound memberitahu anda apabila anda mencapai had tersebut. country_source menunjukkan bagaimana negara ditentukan, yang penting kerana kira-kira satu pertiga daripada nilai negara dalam mana-mana set data berita adalah inferens, bukan fakta. Dan crawled_at ialah cap masa yang jujur: penerbit boleh menetapkan tarikh belakang published_at, tetapi masa semakan ditetapkan oleh landasan pemprosesan.
2. Persempit carian
Penapis digabungkan dengan AND merentas parameter dan OR dalam satu parameter. Jadi country=DE,AT&lang=de dibaca sebagai "artikel berbahasa Jerman dari Jerman atau Austria". Ini meminta artikel bahasa Ukraine dari Ukraine hari ini, yang terbaru dahulu:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?country=UA&lang=uk&date=today&sort=date&size=10"3. Dapatkan teks penuh
Keputusan carian tidak termasuk teks penuh artikel secara lalai untuk mengekalkan saiz respons yang kecil. Minta secara eksplisit apabila anda telah memilih artikel yang benar-benar anda mahu:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/search?q=inflation&full_text=true&size=5"Teks penuh adalah kira-kira 2,000–4,000 aksara setiap artikel. Dua puluh artikel dengan full_text=true adalah kira-kira 40,000 token untuk model bahasa. Pilih dahulu, kemudian muat turun badan artikel. Lihat kos token.
4. Kira daripada menyenaraikan
Selalunya soalan yang berguna bukan "apakah artikelnya" tetapi "adakah apa-apa di sini, dan di mana ia". Mengira jawapan dengan kos yang lebih rendah — kira-kira 200 token berbanding beberapa ribu untuk satu halaman hasil — menjadikannya panggilan pertama yang tepat untuk agen yang memutuskan sama ada carian itu bernilai untuk dijalankan:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/stats?q=earthquake&date=7d"Respons ini memberikan jumlah mengikut negara, bahasa, zon domain, penerbit berita dan hari, dikira merentasi keseluruhan set yang sepadan, bukan hanya halaman semasa.
Dalam 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"])Dalam 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));