fx Google Apps Script for Sheets
ENहिन्दी

UrlFetchApp — API से लाइव डेटा खींचना

⏱ 15 min

आप क्या सीखेंगे

  • API क्या है?
  • पहला फ़ेच
  • इसे इतिहास लॉग के रूप में शीट में लिखें

समझिए

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 से खुद रिफ़्रेश होने की उम्मीद।

अभ्यास

medium"Rates" शीट बनाएँ जो रोज़ 9 बजे USD→INR और EUR→INR लॉग करे। पिछले 30 दिनों का चार्ट जोड़ें। फिर ऐसी जाँच जोड़ें जो आपको ईमेल करे (लेसन 5) अगर आज का USD रेट कल से 1% से ज़्यादा बदला।
दोनों rates fetch और validate करके Rates में [date, usdInr, eurInr] जोड़ें। पिछले positive USD rate से Math.abs(current/previous-1) > 0.01 जाँचें। 83 से 84 लगभग 1.205% है, alert आए; 83 से 83.5 पर नहीं। अंतिम 30 rows का chart बनाएँ। HTTP/JSON error पर नकली rates न जोड़ें।

प्रश्नोत्तरी

muteHttpExceptions: true क्या करता है?
एरर throw करने की जगह एरर response लौटाता है, ताकि आप कोड जाँच सकें
API key कहाँ रखनी चाहिए?
Script Properties में
कौन-सा फ़ंक्शन JSON टेक्स्ट को ऑब्जेक्ट में बदलता है?
JSON.parse
UrlFetchApp — API से लाइव डेटा खींचना · हिंदी | ExcelWalaa