mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-18 13:38:22 +03:00
Fix chrome extension user fetcher
This commit is contained in:
@@ -4,7 +4,7 @@ import { db } from "../databases/databases";
|
|||||||
import { Request, Response } from "express";
|
import { Request, Response } from "express";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { Logger } from "../utils/logger";
|
import { Logger } from "../utils/logger";
|
||||||
import { getCWSUsers } from "../utils/getCWSUsers";
|
import { getCWSUsers, getChromeUsers } from "../utils/getCWSUsers";
|
||||||
|
|
||||||
// A cache of the number of chrome web store users
|
// A cache of the number of chrome web store users
|
||||||
let chromeUsersCache = 0;
|
let chromeUsersCache = 0;
|
||||||
@@ -79,27 +79,4 @@ function updateExtensionUsers() {
|
|||||||
getChromeUsers(chromeExtensionUrl)
|
getChromeUsers(chromeExtensionUrl)
|
||||||
.then(res => chromeUsersCache = res)
|
.then(res => chromeUsersCache = res)
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
/* istanbul ignore next */
|
|
||||||
function getChromeUsers(chromeExtensionUrl: string): Promise<number> {
|
|
||||||
return axios.get(chromeExtensionUrl)
|
|
||||||
.then(res => {
|
|
||||||
const body = res.data;
|
|
||||||
// 2021-01-05
|
|
||||||
// [...]<span><meta itemprop="interactionCount" content="UserDownloads:100.000+"/><meta itemprop="opera[...]
|
|
||||||
const matchingString = '"UserDownloads:';
|
|
||||||
const matchingStringLen = matchingString.length;
|
|
||||||
const userDownloadsStartIndex = body.indexOf(matchingString);
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (userDownloadsStartIndex >= 0) {
|
|
||||||
const closingQuoteIndex = body.indexOf('"', userDownloadsStartIndex + matchingStringLen);
|
|
||||||
const userDownloadsStr = body.substr(userDownloadsStartIndex + matchingStringLen, closingQuoteIndex - userDownloadsStartIndex).replace(",", "").replace(".", "");
|
|
||||||
return parseInt(userDownloadsStr);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(/* istanbul ignore next */ () => {
|
|
||||||
Logger.debug(`Failing to connect to ${chromeExtensionUrl}`);
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ import { config } from "../config";
|
|||||||
import { Request, Response } from "express";
|
import { Request, Response } from "express";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { Logger } from "../utils/logger";
|
import { Logger } from "../utils/logger";
|
||||||
import { getCWSUsers } from "../utils/getCWSUsers";
|
import { getCWSUsers, getChromeUsers } from "../utils/getCWSUsers";
|
||||||
|
|
||||||
// A cache of the number of chrome web store users
|
// A cache of the number of chrome web store users
|
||||||
let chromeUsersCache = 0;
|
let chromeUsersCache = 0;
|
||||||
@@ -97,29 +97,4 @@ function updateExtensionUsers() {
|
|||||||
getChromeUsers(chromeExtensionUrl)
|
getChromeUsers(chromeExtensionUrl)
|
||||||
.then(res => chromeUsersCache = res)
|
.then(res => chromeUsersCache = res)
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
/* istanbul ignore next */
|
|
||||||
function getChromeUsers(chromeExtensionUrl: string): Promise<number> {
|
|
||||||
return axios.get(chromeExtensionUrl)
|
|
||||||
.then(res => {
|
|
||||||
const body = res.data;
|
|
||||||
// 2021-01-05
|
|
||||||
// [...]<span><meta itemprop="interactionCount" content="UserDownloads:100.000+"/><meta itemprop="opera[...]
|
|
||||||
const matchingString = '"UserDownloads:';
|
|
||||||
const matchingStringLen = matchingString.length;
|
|
||||||
const userDownloadsStartIndex = body.indexOf(matchingString);
|
|
||||||
/* istanbul ignore else */
|
|
||||||
if (userDownloadsStartIndex >= 0) {
|
|
||||||
const closingQuoteIndex = body.indexOf('"', userDownloadsStartIndex + matchingStringLen);
|
|
||||||
const userDownloadsStr = body.substr(userDownloadsStartIndex + matchingStringLen, closingQuoteIndex - userDownloadsStartIndex).replace(",", "").replace(".", "");
|
|
||||||
return parseInt(userDownloadsStr);
|
|
||||||
} else {
|
|
||||||
lastUserCountCheck = 0;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(/* istanbul ignore next */ () => {
|
|
||||||
Logger.debug(`Failing to connect to ${chromeExtensionUrl}`);
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@ import axios from "axios";
|
|||||||
import { Logger } from "../utils/logger";
|
import { Logger } from "../utils/logger";
|
||||||
|
|
||||||
export const getCWSUsers = (extID: string): Promise<number | undefined> =>
|
export const getCWSUsers = (extID: string): Promise<number | undefined> =>
|
||||||
|
|
||||||
axios.post(`https://chrome.google.com/webstore/ajax/detail?pv=20210820&id=${extID}`)
|
axios.post(`https://chrome.google.com/webstore/ajax/detail?pv=20210820&id=${extID}`)
|
||||||
.then(res => res.data.split("\n")[2])
|
.then(res => res.data.split("\n")[2])
|
||||||
.then(data => JSON.parse(data))
|
.then(data => JSON.parse(data))
|
||||||
@@ -10,4 +11,22 @@ export const getCWSUsers = (extID: string): Promise<number | undefined> =>
|
|||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
Logger.error(`Error getting chrome users - ${err}`);
|
Logger.error(`Error getting chrome users - ${err}`);
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/* istanbul ignore next */
|
||||||
|
export function getChromeUsers(chromeExtensionUrl: string): Promise<number> {
|
||||||
|
return axios.get(chromeExtensionUrl)
|
||||||
|
.then(res => {
|
||||||
|
const body = res.data;
|
||||||
|
// 2024-02-09
|
||||||
|
// >20,000 users<
|
||||||
|
const match = body.match(/>([\d,]+) users</)?.[1];
|
||||||
|
if (match) {
|
||||||
|
return parseInt(match.replace(/,/g, ""));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(/* istanbul ignore next */ () => {
|
||||||
|
Logger.debug(`Failing to connect to ${chromeExtensionUrl}`);
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user