Translate script
							parent
							
								
									4a73375cfb
								
							
						
					
					
						commit
						23c971ca32
					
				| 
						 | 
					@ -1,32 +1,20 @@
 | 
				
			||||||
"use strict";
 | 
					"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Modules from file
 | 
					// Modules from file
 | 
				
			||||||
const { fetchGETResponse } = require("./network-helper.js");
 | 
					import { fetchGETResponse } from "./network-helper.js";
 | 
				
			||||||
const f95url = require("./constants/url.js");
 | 
					import SearchQuery from "./classes/search-query";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @public
 | 
					 * @public
 | 
				
			||||||
 * Gets the URLs of the latest updated games that match the passed parameters.
 | 
					 * Gets the URLs of the latest updated games that match the passed parameters.
 | 
				
			||||||
 * You *must* be logged.
 | 
					 * You *must* be logged.
 | 
				
			||||||
 * @param {Object} query
 | 
					 * @param {SearchQuery} query
 | 
				
			||||||
 * Query used for the search
 | 
					 * Query used for the search
 | 
				
			||||||
 * @param {Number[]} [query.tags]
 | 
					 | 
				
			||||||
 * List of tags to be included in the search. Max. 5 tags
 | 
					 | 
				
			||||||
 * @param {Number[]} [query.prefixes] 
 | 
					 | 
				
			||||||
 * List of prefixes to be included in the search.
 | 
					 | 
				
			||||||
 * @param {String} [query.sort] 
 | 
					 | 
				
			||||||
 * Sorting type between (default: `date`):
 | 
					 | 
				
			||||||
 *`date`, `likes`, `views`, `name`, `rating`
 | 
					 | 
				
			||||||
 * @param {Number} [query.date]
 | 
					 | 
				
			||||||
 * Date limit in days, to be understood as "less than".
 | 
					 | 
				
			||||||
 * Possible values:
 | 
					 | 
				
			||||||
 * `365`, `180`, `90`, `30`, `14`, `7`, `3`, `1`.
 | 
					 | 
				
			||||||
 * Use `1` to indicate "today" or set no value to indicate "anytime"
 | 
					 | 
				
			||||||
 * @param {Number} limit 
 | 
					 * @param {Number} limit 
 | 
				
			||||||
 * Maximum number of items to get. Default: 30
 | 
					 * Maximum number of items to get. Default: 30
 | 
				
			||||||
 * @returns {Promise<String[]>} URLs of the fetched games
 | 
					 * @returns {Promise<String[]>} URLs of the fetched games
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
module.exports.fetchLatest = async function(query, limit = 30) {
 | 
					export async function fetchLatest(query: SearchQuery, limit = 30): Promise<string[]> {
 | 
				
			||||||
    // Local variables
 | 
					    // Local variables
 | 
				
			||||||
    const threadURL = new URL("threads/", f95url.F95_BASE_URL).href;
 | 
					    const threadURL = new URL("threads/", f95url.F95_BASE_URL).href;
 | 
				
			||||||
    const resultURLs = [];
 | 
					    const resultURLs = [];
 | 
				
			||||||
| 
						 | 
					@ -36,7 +24,7 @@ module.exports.fetchLatest = async function(query, limit = 30) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    do {
 | 
					    do {
 | 
				
			||||||
        // Prepare the URL
 | 
					        // Prepare the URL
 | 
				
			||||||
        const url = parseLatestURL(query, page);
 | 
					        const url = query.createUrl().toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Fetch the response (application/json)
 | 
					        // Fetch the response (application/json)
 | 
				
			||||||
        const response = await fetchGETResponse(url);
 | 
					        const response = await fetchGETResponse(url);
 | 
				
			||||||
| 
						 | 
					@ -57,65 +45,4 @@ module.exports.fetchLatest = async function(query, limit = 30) {
 | 
				
			||||||
    while (fetchedResults < limit && !noMorePages);
 | 
					    while (fetchedResults < limit && !noMorePages);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return resultURLs;
 | 
					    return resultURLs;
 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * @private
 | 
					 | 
				
			||||||
 * Parse the URL with the passed parameters.
 | 
					 | 
				
			||||||
 * @param {Object} query
 | 
					 | 
				
			||||||
 * Query used for the search
 | 
					 | 
				
			||||||
 * @param {Number[]} [query.tags]
 | 
					 | 
				
			||||||
 * List of tags to be included in the search. Max. 5 tags
 | 
					 | 
				
			||||||
 * @param {Number[]} [query.prefixes] 
 | 
					 | 
				
			||||||
 * List of prefixes to be included in the search.
 | 
					 | 
				
			||||||
 * @param {String} [query.sort] 
 | 
					 | 
				
			||||||
 * Sorting type between (default: `date`):
 | 
					 | 
				
			||||||
 * `date`, `likes`, `views`, `title`, `rating`
 | 
					 | 
				
			||||||
 * @param {Number} [query.date]
 | 
					 | 
				
			||||||
 * Date limit in days, to be understood as "less than".
 | 
					 | 
				
			||||||
 * Possible values:
 | 
					 | 
				
			||||||
 * `365`, `180`, `90`, `30`, `14`, `7`, `3`, `1`.
 | 
					 | 
				
			||||||
 * Use `1` to indicate "today" or set no value to indicate "anytime"
 | 
					 | 
				
			||||||
 * @param {Number} [page]
 | 
					 | 
				
			||||||
 * Index of the page to be obtained. Default: 1.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
function parseLatestURL(query, page = 1) {
 | 
					 | 
				
			||||||
    // Create the URL
 | 
					 | 
				
			||||||
    const url = new URL("https://f95zone.to/new_latest.php");
 | 
					 | 
				
			||||||
    url.searchParams.set("cmd", "list");
 | 
					 | 
				
			||||||
    url.searchParams.set("cat", "games");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Add the parameters
 | 
					 | 
				
			||||||
    if (query.tags) {
 | 
					 | 
				
			||||||
        if (query.tags.length > 5)
 | 
					 | 
				
			||||||
            throw new Error(`Too many tags: ${query.tags.length} instead of 5`);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for(const tag of query.tags) {
 | 
					 | 
				
			||||||
            url.searchParams.append("tags[]", tag);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (query.prefixes) {
 | 
					 | 
				
			||||||
        for (const p of query.prefixes) {
 | 
					 | 
				
			||||||
            url.searchParams.append("prefixes[]", p);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if(query.sort) {
 | 
					 | 
				
			||||||
        const validSort = ["date", "likes", "views", "title", "rating"];
 | 
					 | 
				
			||||||
        if (!validSort.includes(query.sort))
 | 
					 | 
				
			||||||
            throw new Error(`Invalid sort parameter: ${query.sort}`);
 | 
					 | 
				
			||||||
        url.searchParams.set("sort", query.sort);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (query.date) {
 | 
					 | 
				
			||||||
        const validDate = [365, 180, 90, 30, 14, 7, 3, 1];
 | 
					 | 
				
			||||||
        if (!validDate.includes(query.date))
 | 
					 | 
				
			||||||
            throw new Error(`Invalid date parameter: ${query.date}`);
 | 
					 | 
				
			||||||
        url.searchParams.set("date", query.date);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (page) url.searchParams.set("page", page);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return url.toString();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue