1. Для Chrome:
- chrome://extensions/ в поисковой строке.
- Если не получился первый пункт перейдите в Настройки → Дополнительные инструменты → Расширения.
- Включите Режим разработчика.
- Нажмите Загрузить распакованное расширение, выберите ПАПКУ с файлом
manifest.json
2. Для Firefox:
Я не использую Firefox, но вот что удалось найти.
- Перейдите в Настройки → Дополнения и темы.
- Включите Режим разработчика.
- Нажмите Загрузить временное расширение, выберите ФАЙЛ
manifest.json
Код расширения (manifest.json):
{
"manifest_version": 3,
"name": "Shikimori Random Anime Button",
"version": "1.0",
"description": "Adds a 'Random Anime' button to Shikimori.",
"permissions": ["scripting", "activeTab"],
"content_scripts": [
{
"matches": ["https://shikimori.one/*"],
"js": ["content.js"],
"css": ["style.css"]
}
]
}
Функция случайного аниме (content.js):
function goToRandomAnime() {
const randomPage = Math.floor(Math.random() * 30000) + 1;
fetch(`https://shikimori.one/api/animes?order=popularity&page=${randomPage}`)
.then(response => response.json())
.then(data => {
if (data.length > 0) {
const randomIndex = Math.floor(Math.random() * data.length);
const randomAnime = data[randomIndex];
window.location.href = `https://shikimori.one/animes/${randomAnime.id}`;
} else {
console.warn("Пустая страница. Повторная попытка...");
goToRandomAnime(); // повторный вызов при пустом результате
}
})
.catch(error => console.error("Ошибка при получении аниме:", error));
}
function addRandomButton() {
const header = document.querySelector("header, .top-menu");
if (header) {
const button = document.createElement("button");
button.innerText = "Случайное аниме";
button.className = "random-anime-button";
button.onclick = goToRandomAnime;
header.appendChild(button);
console.log("Кнопка 'Случайное аниме' добавлена");
} else {
console.error("Не удалось найти элемент для добавления кнопки");
}
}
window.addEventListener("load", addRandomButton);
Стили для кнопки (style.css):
.random-anime-button {
background-color: #3e3e3e;
color: white;
padding: 10px 15px;
height: 46px;
border: none;
cursor: pointer;
font-size: 14px;
transition: background-color 0.3s ease, color 0.3s ease;
margin-left: 10px;
}
.random-anime-button:hover {
background-color: #4e5257;
color: #e0e0e0;
}
@chugou, страниц аниме на сайте 1097, и так как у меня нет доступа к нет полного списка аниме выбирается случайная страница и потом с нее случайное аниме, а парсить (Парсинг — это процесс анализа и обработки данных, который позволяет извлекать информацию из различных источников, таких как веб-страницы, файлы или базы данных) мне тупо лень и это долго, поэтому 1200 с запасом тупо на будущие@chugou@Graf_NEET, а как ты посчитал, что их 1097?@Graf_NEET@chugou, 524x101@chugou@Graf_NEET, попробуй теперь открыть эту ссылку:/api/animes?order=popularity&page=1097&limit=50
@Graf_NEET,@Graf_NEET@chugou, пипец... большой запас получился@chugou@Graf_NEET, бывает@chugou, спасибо, я понял в чем проблема, на странице 20 аниме а не 50, и 50 это опечатка, так как выбирается случайный из тех что есть на 1097 странице тобишь по ссылке /api/animes?order=popularity&page=1097 ; тут отстувует &limit=50@chugou@Graf_NEET, если прям в таком виде, то /api/animes?order=popularity&page=21938, т.к. по дефолту лимит, видимо, равен 1.Ну или /api/animes?order=popularity&page=1097&limit=20, как ты предполагал.
А 50 - это максимальное количество тайтлов на страницу: /api/doc/1.0/animes/index
@Graf_NEET@chugou, я справил так что бы если выпадет невалид ссылка из 30к, то цикл повторился@chugou@Graf_NEET, тогда это лишнее, т.к. у тебя по одному тайтлу на страницу в таком варианте получается:Ну и я не шарю в JS, но, по идее, такой вызов вроде может тратить лишнюю память в стеке с учётом большого запаса по верхней границе. Циклом с условием выхода при получении нужных данных было бы проще
@Graf_NEET@Graf_NEET@ED_Sln, спасибо за совет@nikola2222, Да я злодей ха-ха-ха@And_Rey[comment=11097294], booooring….@And_Rey[comment=11097294], в половине случаев это ничего не даст, потому что у аниме последний ID сейчас - 60280, а тайтлов всего 27489.@And_Rey[comment=11097336], не была одобрена/удалена. ID присваивается на стадии создании страницы на MALе, а не после непосредственного добавления в базу.лол
@chugou@cgi-bin,А я, когда его в списке вариантов увидел, подумал, что будет работать, как в этом случае (т.е. обновляться раз в несколько дней).