您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Script for extracting app information and downloading from Cafe Bazaar
当前为
- // ==UserScript==
- // @name Cafe Bazaar Downloader
- // @namespace http://your-namespace.com
- // @version 1.0
- // @description Script for extracting app information and downloading from Cafe Bazaar
- // @author https://t.me/TheErfon
- // @match https://cafebazaar.ir/*
- // @grant none
- // @license CC BY-NC-ND 4.0
- // @licenseURL https://github.com/Rainman69/CafeBazaar-Downloader/blob/main/LICENSE
- // ==/UserScript==
- (function() {
- 'use strict';
- function extractPackageName(url) {
- const regex = /https:\/\/cafebazaar\.ir\/app\/(?:\?id=)?([\w.-]+)/;
- const match = url.match(regex);
- if (match) {
- const packageName = match[1];
- return packageName;
- } else {
- console.error("Invalid URL format: " + url);
- throw new Error("Invalid URL format");
- }
- }
- function callDownloadApi(packageName, sdk, retry = true) {
- const payload = {
- "properties": {
- "language": 2,
- "clientVersionCode": 1100301,
- "androidClientInfo": {
- "sdkVersion": sdk,
- "cpu": "x86,armeabi-v7a,armeabi"
- },
- "clientVersion": "11.3.1",
- "isKidsEnabled": false
- },
- "singleRequest": {
- "appDownloadInfoRequest": {
- "downloadStatus": 1,
- "packageName": packageName,
- "referrers": []
- }
- }
- };
- return fetch("https://api.cafebazaar.ir/rest-v1/process/AppDownloadInfoRequest", {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify(payload)
- })
- .then(response => {
- if (response.ok) {
- return response.json();
- } else {
- console.error("API request failed for package: " + packageName);
- if (retry && sdk !== 25) {
- console.log("Retrying with SDK version 25 for package: " + packageName);
- return callDownloadApi(packageName, 25, false);
- } else {
- console.error("Abnormal API response for package: " + packageName);
- throw new Error("Abnormal API response. Check your request and try again.");
- }
- }
- })
- .then(data => handleResponse(data));
- }
- function handleResponse(data) {
- const appInfo = data.singleReply.appDownloadInfoReply;
- if (!appInfo) {
- console.error("Response does not include expected data");
- throw new Error("Response does not include expected data");
- }
- const downloadUrls = appInfo.fullPathUrls || [];
- if (!downloadUrls.length) {
- console.error("Download URLs are empty");
- throw new Error("Download URLs are empty");
- }
- const fileSize = parseInt(appInfo.packageSize, 10) / 1024 / 1024;
- const versionCode = appInfo.versionCode || 0;
- return {
- downloadLink: downloadUrls[downloadUrls.length - 1],
- fileSize,
- versionCode
- };
- }
- function main() {
- try {
- const currentUrl = window.location.href;
- console.log("Current URL: " + currentUrl);
- const packageName = extractPackageName(currentUrl);
- callDownloadApi(packageName, 33)
- .then(downloadInfo => {
- const { downloadLink, fileSize, versionCode } = downloadInfo;
- console.log("App information retrieved successfully for package: " + packageName);
- console.log("Download link: " + downloadLink);
- console.log("File size: " + fileSize.toFixed(2) + " MB");
- console.log("Version: " + versionCode);
- // Perform the download automatically
- window.location.href = downloadLink;
- })
- .catch(error => {
- console.error("An error occurred: " + error.message);
- });
- } catch (error) {
- console.error("An error occurred: " + error.message);
- }
- }
- main();
- })();