Hallo.
Stelle hier ein Badge Ripper geschrieben in NodeJS zu Verfügung. Geschrieben wurde es in TypeScript (nur output wird gepostet) und soweit alles Asynchron (auch das speichern).
Dependencies:
- (fs)
- request-promise
Screenshot (GIF):
https://i.imgur.com/lWHAvDB.gifv
Source:
JavaScript: badge.js
"use strict";
/**
* @author kanax
* @class Badges
* @description Badges "Downloader"
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var request_promise_1 = __importDefault(require("request-promise"));
var fs_1 = __importDefault(require("fs"));
var Badges = /** @class */ (function () {
function Badges() {
this._badgePath = 'https://www.habbo.com/gamedata/external_flash_texts/0';
this._galleryPath = 'https://images.habbo.com/c_images/album1584/{badgeName}.gif';
this._badges = [];
}
/**
* Gibt den Path zurück
* @return {string}
*/
Badges.prototype.getBadgePath = function () {
return this._badgePath;
};
/**
* Alle Badge-Namen in einem Array speichern
*/
Badges.prototype.getBadges = function () {
return __awaiter(this, void 0, void 0, function () {
var options;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
options = {
url: this._badgePath,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64)',
},
};
return [4 /*yield*/, request_promise_1.default(options)
.then(function (resp) {
_this._badges = resp.match(/(?<=badge_name_)(.*)(?==)/gm);
}).catch(function (err) {
if (err) {
console.log(err);
}
})];
case 1:
_a.sent();
return [2 /*return*/, request_promise_1.default];
}
});
});
};
/**
* Speichert alle Badges
*/
Badges.prototype.saveBadges = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
if (this._badges.length === 0) {
console.log('Es wurden keine Badges gefunden!');
return [2 /*return*/];
}
this._badges.forEach(function (badge) { return __awaiter(_this, void 0, void 0, function () {
var badgeL;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
badgeL = badge.replace(' ', '');
return [4 /*yield*/, request_promise_1.default(this._galleryPath.replace('{badgeName}', badgeL), { encoding: 'binary' })
.then(function (image) {
fs_1.default.writeFile("./badges/" + badgeL + ".gif", image, 'binary', function (err) {
if (err) {
console.log(err);
}
else {
console.log(badge + " wurde gespeichert!");
}
});
})
.catch(function (err) {
if (err) {
return;
}
})];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); });
return [2 /*return*/];
});
});
};
return Badges;
}());
exports.default = Badges;
Alles anzeigen
Badges werden im Ordner "badges" gespeichert (falls nicht vorhanden, dann erstellen).
Code hat bei mir gegammelt und man könnte noch einige Kleinigkeiten hinzufügen.
Biete keinen Support.
Mit freundlichen Grüßen
kanax