समझिए
1. API क्या है?
एक URL जो वेब पेज की जगह डेटा (आमतौर पर JSON) लौटाता है। विनिमय दर, मौसम, शेयर भाव, आपका अपना ERP या दुकान की वेबसाइट — अगर उसका API है, तो Sheets उससे डेटा खींच सकती है।
2. पहला फ़ेच
यह उदाहरण Frankfurter इस्तेमाल करता है, एक मुफ़्त विनिमय-दर API जिसे key नहीं चाहिए (पता बदले तो उसकी वेबसाइट देखें):
function getUsdInr() {
const url = 'https://api.frankfurter.app/latest?from=USD&to=INR';
const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
if (res.getResponseCode() !== 200) {
throw new Error('API error ' + res.getResponseCode() + ': ' + res.getContentText());
}
const json = JSON.parse(res.getContentText());
// json looks like: { amount: 1, base: "USD", date: "2026-09-30", rates: { INR: 83.9 } }
Logger.log(json.rates.INR);
return json;
}
muteHttpExceptions: true— 4xx/5xx पर क्रैश न हो; कोड हम खुद जाँचते हैं।JSON.parseटेक्स्ट को JavaScript ऑब्जेक्ट में बदलता है जिसे डॉट से पढ़ सकते हैं।
3. इसे इतिहास लॉग के रूप में शीट में लिखें
function logRate() {
const json = getUsdInr();
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Rates')
|| SpreadsheetApp.getActiveSpreadsheet().insertSheet('Rates');
if (sh.getLastRow() === 0) sh.appendRow(['Fetched at', 'Rate date', 'USD→INR']);
sh.appendRow([new Date(), json.date, json.rates.INR]);
}
logRate पर रोज़ाना टाइम ट्रिगर (लेसन 4) लगाएँ, और रेट का इतिहास अपने आप बनता जाएगा। Insert → Chart से चार्ट बनाएँ।
4. लिस्ट लौटाने वाले API
कई API ऑब्जेक्ट का array लौटाते हैं। setValues के लिए उसे रो में बदलें:
// items = [{ id: 1, name: 'Laptop', price: 55000 }, { id: 2, name: 'Mobile', price: 18000 }]
const rows = items.map(o => [o.id, o.name, o.price]);
sh.getRange(2, 1, rows.length, 3).setValues(rows);
5. API key और headers
ज़्यादातर असली API को key चाहिए। इसे स्क्रिप्ट में कभी सीधे न लिखें (एडिट एक्सेस वाला कोई भी देख सकता है)। Script Properties में रखें:
Project Settings ⚙️ → Script Properties → API_KEY = आपकी key जोड़ें। फिर:
const key = PropertiesService.getScriptProperties().getProperty('API_KEY');
const res = UrlFetchApp.fetch('https://api.example.com/v1/products', {
method: 'get',
headers: { Authorization: 'Bearer ' + key },
muteHttpExceptions: true
});
डेटा भेजना (POST):
UrlFetchApp.fetch('https://api.example.com/v1/orders', {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({ product: 'P101', qty: 2 }),
headers: { Authorization: 'Bearer ' + key },
muteHttpExceptions: true
});
6. API के साथ शिष्टता
- API की rate limit और उपयोग की शर्तें देखें।
- हर रो के लिए लूप में API कॉल न करें; एक बार फ़ेच करें और मेमोरी में प्रोसेस करें।
- कुछ मिनटों में दोबारा इस्तेमाल होने वाले नतीजे cache करें:
const cache = CacheService.getScriptCache();
let text = cache.get('usdinr');
if (!text) {
text = UrlFetchApp.fetch(url).getContentText();
cache.put('usdinr', text, 600); // 10 minutes
}
- Apps Script में UrlFetch का रोज़ का कोटा भी है (रोज़ हज़ारों कॉल — batch करने पर शायद ही समस्या)।
7. Custom function के रूप में
Custom functions (लेसन 3) के अंदर UrlFetchApp की अनुमति है:
/** @customfunction */
function FXRATE(from, to) {
const res = UrlFetchApp.fetch(`https://api.frankfurter.app/latest?from=${from}&to=${to}`);
return JSON.parse(res.getContentText()).rates[to];
}
=FXRATE("USD","INR")। ध्यान दें, आर्ग्युमेंट बदले बिना यह अपने आप रिफ़्रेश नहीं होगा — नियमित अपडेट के लिए ट्रिगर इस्तेमाल करें।
आम गलतियाँ
API key सीधे कोड में लिखना। response code न जाँचना, फिर एरर पेज पर JSON.parse का फ़ेल होना। हर रो के लिए एक बार API कॉल। custom function से खुद रिफ़्रेश होने की उम्मीद।