Thursday, 29 April 2021
Find Google Sheets Linked to your Google Forms
from Digital Inspiration https://ift.tt/3xwC10r
Tuesday, 27 April 2021
How to Print the Function Call Flow with Stack Trace in JavaScript
The printStackTrace method of Java is useful for handling exceptions and errors during development. It tells you the exact line number in your source code and the file name where the problem occurred.
If you are working in the JavaScript / Google Apps Script world, you can use the console.trace() method to output the complete stack inside the web console ( or StackDriver logs for Google Scripts).
A better alternative is that you parse the stack property of the Error object. This contains the entire stack trace along with line numbers, column position and the function names.
function printStackTrace() {
const error = new Error();
const stack = error.stack
.split("\n")
.slice(2)
.map((line) => line.replace(/\s+at\s+/, ""))
.join("\n");
console.log(stack);
}
function three() {
console.log("Function Three!");
printStackTrace();
}
function two() {
console.log("Function Two!");
three();
}
function one() {
console.log("Function One!");
two();
}
one();The output of the printStackTrace method looks something like this. The first few lines are the program output and as you move downwards, you’ll see a list of methods which invoked the previous method.
Function One!
index.js:16 Function Two!
index.js:11 Function Three!
index.js:7 three (index.js:12:3)
two (index.js:17:3)
one (index.js:22:3)
index.js:26:3
index.js:27:3You can use the stack trace to know the exact location of the problematic code in your JavaScript app or if you simply want to print the function calling flow of your JavaScript program without even throwing an exception.
from Digital Inspiration https://ift.tt/3aIrghL
Thursday, 15 April 2021
How to Perform IP Address Lookup with Google Sheets
Websites can determine the visitor’s geographic location using their IP address and serve more relevant content. For example, a weather website may use your IP address to estimate your approximate location and provide weather forecast for your current city automatically. A currency exchange website can determine your default currency based on your country which is detected from your IP address.
There are free web IP lookup services, ip2c.org for example, that will reveal the country of your client’s IP address with a simple HTTP request. We internally use that service at Digital Inspiration to determine the payment service provider on the checkout page.
Bulk IP Lookup with Google Sheets
IP2Location is another good alternative that retrieves more detailed geolocation information for any IP address. The IP location lookup service can retrieve the client’s country, city name, region, the ISP name and more.
If you have a bulk list of IP addresses, you can use Google Sheets to estimate the corresponding geographic details for each of the addresses in few easy steps:
-
Click here to make a copy of the Google Sheet for performing IP lookups in bulk.
-
Paste the list of IP addresses in column A, one per row. The lookup service works for both IPv4 and IPv6 addresses.
-
Enter your key in cell E1. If you have a small list of IP address, use
demoas the key or get your own API key from ip2location.com. -
Click the Run button, authorize the script and watch as the geographic details and ISP names are populated in the sheet.

How IP2Location Script Works
Internally, the Google Sheet uses the IP2location web service with Google Apps Script to transform IP addresses into geographic region.
It uses the UrlFetchApp service to perform multiple HTTP requests in a single batch for improved performance. Here’s the full source code:
const ip2location = () => {
// Get all the input data from Google Sheet
const ss = SpreadsheetApp.getActiveSheet();
const data = ss.getDataRange().getDisplayValues();
// Use your own API key or use demo key
const apiKey = data[0][4] || "demo";
// Generate API URL for IP address
const getUri_ = (ipAddress) => {
const API_URL = "https://api.ip2location.com/v2";
return `${API_URL}/?ip=${ipAddress}&key=${apiKey}&package=ws4`;
};
const requests = [];
for (let r = 2; r < data.length; r++) {
const [ipAddress, countryName] = data[r];
// Only process rows where the country is blank
if (ipAddress && !countryName) {
requests.push({ url: getUri_(ipAddress), rowNumber: r + 1 });
}
}
// Make API calls in bulk using the UrlFetchApp service
UrlFetchApp.fetchAll(requests).forEach((content, i) => {
// Parse the JSON response
const { city_name, country_name, isp, response } = JSON.parse(content);
// If the response is populated, the API call failed
if (response) throw new Error(response);
// Write the response data to Google Sheet
const values = [[country_name, region_name, city_name, isp]];
ss.getRange(requests[i].rowNumber, 2, 1, 4).setValues(values);
});
// Flush all changes
SpreadsheetApp.flush();
};from Digital Inspiration https://ift.tt/3gdBrys
