কুইকস্টার্ট
একটি কী পান, লাইনটি কপি করুন, এটি রান করুন, JSON পড়ুন।
0। একটি কী পান
ফ্রি অ্যাকাউন্ট তৈরি করুন, API কী খুলুন এবং একটি তৈরি করুন। তারপর এটি একটি পরিবেশ চলক (environment variable) হিসেবে সংরক্ষণ করুন:
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"
}
]
}সেই প্রতিক্রিয়ার তিনটি ফিল্ড সরাসরি লক্ষ্য করার মতো। total হলো কতগুলো আর্টিকেল মিলেছে, কতগুলো ফেরত দেওয়া হয়েছে তা নয় — গতির জন্য এটি 10,000 পর্যন্ত সীমাবদ্ধ, এবং total_is_lower_bound আপনাকে জানায় যখন আপনি সেই সীমায় পৌঁছেছেন। country_source বলে দেয় দেশ কীভাবে নির্ধারণ করা হয়েছে, যা গুরুত্বপূর্ণ কারণ যেকোনো নিউজ ডেটাসেটে দেশের প্রায় এক তৃতীয়াংশ মান তথ্যসূত্র নয়, বরং অনুমান। আর crawled_at হলো সৎ টাইমস্ট্যাম্প: পাবলিশাররা published_at পেছিয়ে দিনতে পারেন, কিন্তু ক্রল টাইম পাইপলাইন দ্বারা নির্ধারিত হয়।
2। এটি সংকীর্ণ করুন
ফিল্টারগুলো প্যারামিটারের মধ্যে AND এবং একটি প্যারামিটারের মধ্যে 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"প্রতিটি আর্টিকেলের সম্পূর্ণ টেক্সট প্রায় 2,000–4,000 অক্ষরের। full_text=true টি আর্টিকেলের জন্য একটি ল্যাঙ্গুয়েজ মডেলের জন্য প্রায় 40,000 টোকেন প্রয়োজন। প্রথমে সিলেক্ট করুন, তারপর বডি ফেচ করুন। টোকেন খরচ দেখুন।
4। গণনা করুন, তালিকাভুক্তি নয়
প্রায়শই উপযোগী প্রশ্নটি হলো "আর্টিকেলগুলো কী" নয়, বরং "এখানে কিছু আছে কি না, এবং সেটি কোথায়"। ফলাফলের একটি পৃষ্ঠার জন্য কয়েক হাজার টোকেনের বিপরীতে মাত্র 200 টোকেন খরচ করে উত্তর গণনা করা, যা এজেন্টের জন্য একটি সার্চ চালানোর মূল্যবান কিনা তা সিদ্ধান্ত নেওয়ার জন্য সঠিক প্রথম কল করে তোলে:
curl -H "Authorization: Bearer $FNA_KEY" "https://freenewsapi.ai/v1/stats?q=earthquake&date=7d"প্রতিক্রিয়াটি আপনাকে দেশ, ভাষা, ডোমেইন জোন, নিউজ পাবলিশার এবং দিনভিত্তিক গণনা প্রদান করে, যা সম্পূর্ণ মিলে যাওয়া সেটের ওপর ভিত্তি করে গণনা করা হয়, বর্তমান পৃষ্ঠার ওপর নয়।
পাইথনে
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"])জাভাস্ক্রিপ্টে
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));