Я работаю в пределах клана, для которого мы отслеживаем пользователей через лист. Функции, которые мы использовали для получения имен из Steam и Bung ie, недавно перестали работать, и сделали это без какой-либо известной причины. В настоящее время все наши UrlFetches возвращают ноль, а не имена, как это было
Это наша функция для Steam
/**
* Gets the Steam profile name for the ID.
*
* @param {number} id The user's Steam id (steamID64).
* @return The profile name.
* @customfunction
*/
function STEAMNAME(id) {
// Allow empty entries in ranges.
if (id == null || !id || id == "") {
return "";
}
// Allow range inputs.
if (id.map) {
return id.map(STEAMNAME);
}
// Get cached value.
const cache = CacheService.getScriptCache();
const cacheKey = id + ".steam";
const cached = cache.get(cacheKey);
if (cached != null) {
return cached;
}
try {
const url = "https://steamcommunity.com/profiles/{id}?xml=1".replace("{id}", id);
var response = null;
try {
response = UrlFetchApp.fetch(url);
} catch (e) {
}
if (response == null) {
throw new Error("Invalid ID");
}
const content = XmlService.parse(response.getContentText());
const root = content.getRootElement();
const profile = root.getChild("steamID");
/*if (profile == null) {
throw new Error("Invalid ID");
}*/
const name = profile.getText();
// Cache timeout 30 minutes.
const CACHE_TIMEOUT = 60 * 30;
cache.put(cacheKey, name, CACHE_TIMEOUT);
return name;
} catch (e) {
throw e;
}
}
и наша функция для Bung ie API
/**
* Gets the bungie.net display name for the steam ID.
*
* @param {number} steamId The user's Steam id (steamID64).
* @return The bungie.net display name.
* @customfunction
*/
function BUNGIENETNAME(steamId) {
// Allow empty entries in ranges.
if (steamId == null || !steamId || steamId == "") {
return "";
}
// Allow range inputs.
if (steamId.map) {
return steamId.map(BUNGIENETNAME);
}
// Get cached value.
const cache = CacheService.getScriptCache();
const cacheKey = steamId + ".bungie";
const cached = cache.get(cacheKey);
if (cached != null) {
return cached;
}
const API_KEY = "<censored>";
const API_BASE = "https://www.bungie.net/Platform";
const options = {
"headers": {
"Accept": "application/json",
"X-API-Key": API_KEY
}
};
try {
var url = API_BASE + "/User/GetMembershipFromHardLinkedCredential/12/{id}".replace("{id}", steamId);
var response = null;
try {
response = UrlFetchApp.fetch(url, options);
} catch (e) {
}
if (response == null) {
throw new Error("Invalid ID");
}
var data = JSON.parse(response.getContentText()).Response;
const membershipId = data.membershipId;
const membershipType = data.membershipType;
url = API_BASE + "/User/GetMembershipsById/{id}/{type}".replace("{id}", membershipId).replace("{type}", membershipType);
response = UrlFetchApp.fetch(url, options);
data = JSON.parse(response.getContentText()).Response;
const user = data.bungieNetUser;
if (user == null || !user) {
throw new Error("No Bungie account");
}
const name = user.displayName;
// Cache timeout 120 minutes.
const CACHE_TIMEOUT = 60 * 120;
cache.put(cacheKey, name, CACHE_TIMEOUT);
return name;
} catch (e) {
throw e;
}
}