Opas
1. Aloittaminen
AniRena on torrent-hakemisto, joka keskittyy animeen, mangaan, ääneen ja aiheeseen liittyvään mediaan. Voit selata ja ladata torrentteja ilman tiliä. Tili vaaditaan torrenttien lataamiseen palveluun, ryhmiin kirjoittamiseen tai API:n käyttämiseen.
Yläosan navigointipalkki tarjoaa pääsyn sivuston pääalueille:
- Etusivu — torrentien listaus- ja hakusivu.
- Lataa — lähetä uusi torrent (vaatii kirjautumisen).
- Opas — tämä sivu.
- Tilastot — koko sivuston tilastot (torrentit, vertaisverkko, lataukset ajan mittaan).
- Ryhmät — julkaisuryhmien hakemisto.
- RSS — RSS-syöte viimeisimmistä latauksista, suodatettavissa kategorian mukaan.
Tilivaikkosi (oikeassa yläkulmassa kirjautuneena) avaa profiilipaneelin, jossa voit säätää asetuksia, hallita turvallisuusvaihtoehtoja ja käyttää API-avaintasi.
2. Selaaminen ja hakeminen
Etusivu listaa kaikki torrentit latauksen päivämäärän mukaan järjestettynä. Käytä yläosan hakupalkkia suodattaaksesi tuloksia.
Perus haku
Kirjoita mitä tahansa sanoja hakupalkkiin ja paina Enter (tai napsauta hakukuvaketta). Tulokset järjestetään relevanssin mukaan, kun haku on aktiivinen.
Hakuoperaattorit
Seuraavia operaattoreita voidaan yhdistää tavalliseen hakuun:
| Operaattori | Esimerkki | Vaikutus |
|---|---|---|
user:"name" | user:"SubsPlease" | Näytä vain kyseisen käyttäjän lataamat torrentit. |
Lataajan nimen napsauttaminen torrenttilistassa suorittaa automaattisesti käyttäjähaun.
Kategoriat ja alakategoriat
Käytä kategorianvalitsinta (ristikkokuvake hakupalkin vieressä) rajoittaaksesi tulokset yhteen kategoriaan. Käytettävissä olevat kategoriat ovat:
- Anime
- Manga/Manhwa/Sarjakuva
- Ääni
- Kirjallisuus
- Live Action
- Kuvat
- Ohjelmisto
- Hentai
- Muut
Jokaisella kategorialla on alakategorioita (esim. Anime: RAW, Sub/Audio, Musiikkivideo) valittavissa kategoria-modaalissa.
Lajittelu ja suodattimet
Torrentilistan sarakeotsikot ovat napsautettavia lajitellaksesi kyseisen sarakkeen mukaan (nouseva tai laskeva). Käytettävissä olevat lajittelun sarakkeet: päivämäärä, nimi, koko, valmistuneet lataukset. Huomaa: seederit ja leecherit ovat Redisistä haettavia reaaliaikaisia arvoja, eikä niitä voi käyttää lajitteluun.
Kielisuodatin
Käytä kielenvalitsinta (lippukuvake) näyttääksesi vain tietyllä kielellä merkityt torrentit.
RSS-syöte
RSS-syöte osoitteessa /rss tarjoaa uusimmat lataukset. Lisää ?category=anime (tai mikä tahansa muu kategoriaslug) suodattaaksesi syötteen. Useimmat torrent-asiakasohjelmat tukevat RSS-automaattilatauksia suoraan tästä URL-osoitteesta.
3. Torrenttien lataaminen
Napsauta mitä tahansa torrentin nimeä avataksesi sen tietopaneelin. Sieltä voit:
- Lataa .torrent — tallentaa .torrent-tiedoston suoraan. Suora URL on
/torrents/{id}.torrent - Magneettilinkki — avautuu suoraan torrent-asiakkaassasi magneetti-URI-protokollan kautta. URL on
/torrents/{id}/magnet
Tietopaneeli näyttää myös torrentin kuvauksen, tiedostolistan, trackerlit sekä seeder/leecher-määrät.
Vanhat latauslinkit
Vanhat AniRenan latauslinkit ovat edelleen tuettuja ja ohjaavat automaattisesti oikeaan .torrent-tiedostoon käyttäen vanhaa ID:tä: /dl/{old_id}
Suositellut BitTorrent-asiakkaat
Mikä tahansa moderni BitTorrent-asiakas toimii. Alla olevat asiakkaat ovat suositeltuja ja tukevat täysin BitTorrent v2 / hybriditorrentteja:
4. Tilin luominen
Rekisteröityminen
Napsauta Rekisteröidy navigointipalkissa. Valitse käyttäjänimi, anna sähköpostiosoite ja aseta salasana (vähimmäispituus vaaditaan). Sinun on luettava ja hyväksyttävä sivuston ehdot ennen tilin luomista.
Sähköpostin aktivointi
Rekisteröitymisen jälkeen vahvistussähköposti lähetetään osoitteeseesi. Napsauta sähköpostin linkkiä aktivoidaksesi tilisi. Jos et saanut sitä, käytä Aktivoi tilisi -linkkiä kirjautumissivulla uuden koodin pyytämiseen.
Salasanan palautus
Jos unohdat salasanasi, napsauta Unohditko salasanasi kirjautumissivulla ja anna sähköpostiosoitteesi. Palautuslinkki lähetetään sinulle. Linkki on kertakäyttöinen ja vanhenee lyhyen ajan kuluttua.
5. Torrenttien lataaminen palveluun
Siirry kohtaan Lataa navigointipalkissa. Sinun on oltava kirjautuneena aktiivisella, ei-estetyllä tilillä. Lataussivulla on kaksi välilehteä:
Lataa-välilehti — lähetä olemassa oleva .torrent-tiedosto
Vedä ja pudota tai valitse .torrent-tiedosto. Latauksen jälkeen täytä kentät:
| Kenttä | Pakollinen | Kuvaus |
|---|---|---|
| Torrent-tiedosto | Kyllä | Ladattava .torrent-tiedosto. |
| Nimi | Ei | Korvaa torrentin näyttönimi. Jos jätetään tyhjäksi, käytetään torrent-tiedostoon upotettua nimeä. |
| Kategoria | Kyllä | Sisältökategoria (Anime, Manga, Ääni jne.). |
| Alakategoria | Ei | Tarkempi tyyppi kategorian sisällä (esim. RAW, Sub/Audio). |
| Kielet | Ei | Yksi tai useampi kielitagi, joka kuvaa sisältökieltä. |
| Ryhmä | Ei | Yhdistä tämä julkaisu ryhmään, jonka jäsen olet. |
| Kuvaus | Ei | Markdown-muotoinen kuvaus, joka näkyy torrentin tietosivulla (maks. 65535 merkkiä). |
| Yksityinen | Ei | Asettaa yksityislipun torrenttiin, poistaa DHT/PEX käytöstä. Hyödyllinen vain tracker -torrenteille. |
| Announce-URL | Ei | Korvaa tai lisää ensisijaisen trackerin announce-URL. |
| Lisätrackerit | Ei | Luetaan torrent-tiedostosta. Ei voi muokata latauksen aikana — käytä Luo-välilehteä, jos haluat mukauttaa trackeriluetteloa. |
| Kommentti | Ei | Korvaa tiedostoon upotettu torrentin kommenttikenttä. |
Torrentisi täytyy sisältää vähintään yksi AniRenan tracker-URL announce-listallaan (missä tahansa tierissä). Sivusto tarkistaa tämän latauksen yhteydessä ja hylkää torrentit, joissa ei ole AniRenan trackeria. Jos loit torrentin lisäämättä AniRenan trackeria ensin, lataa se palvelimelle ja lataa se sitten uudelleen sivustolta — ladattu tiedosto sisältää oikeat trackerit automaattisesti.
Luo-välilehti — rakenna uusi torrent
Luo-välilehti antaa sinulle mahdollisuuden luoda uuden .torrent-tiedoston alusta alkaen määrittämällä tiedostopolut, tracker-URL-osoitteet ja muut torrent-parametrit suoraan selaimessa. Tuloksena oleva torrent lähetetään samoilla metadatakentillä kuin yllä.
Moderointi
Lataukset tarkistetaan automaattisesti estettyjen sisältökuvioiden (nimet, tiedostonimet, kuvaukset) listaa vasten. Kiellettyä kuviota vastaavat torrentit hylätään. Myös päällekkäiset torrentit (sama info hash) hylätään.
6. Tilisi
Napsauta käyttäjänimeäsi oikeassa yläkulmassa avataksesi profiilipaneelin. Se on järjestetty tiivistettäviin osioihin:
Asetukset
Vaihda käyttöliittymän teemaa, fonttikokoa, väripalettia, käyttöliittymän kieltä ja torrentteihin liittyviä näyttöasetuksia. Muutokset tallennetaan automaattisesti.
Salasana
Syötä nykyinen salasanasi ja uusi salasana kahdesti. Vahvistuskoodi lähetetään rekisteröityyn sähköpostiosoitteeseesi, ja se on syötettävä muutoksen vahvistamiseksi. Jos kaksivaiheinen todennus on käytössä, myös TOTP-koodisi vaaditaan.
Kaksivaiheinen todennus (2FA)
Ota käyttöön TOTP-pohjainen kaksivaiheinen todennus millä tahansa todennussovelluksella (esim. Google Authenticator, Aegis, Bitwarden). Kun otat 2FA:n käyttöön:
- Skannaa QR-koodi (tai syötä salaisuus manuaalisesti) todennussovelluksessasi.
- Syötä sovelluksesi 6-numeroinen koodi vahvistaaksesi asetuksen.
- Tallenna näytetyt palautuskoodit — nämä ovat kertakäyttöisiä koodeja pääsyn palauttamiseksi, jos menetät laitteesi.
Poistaaksesi 2FA:n käytöstä, syötä nykyinen TOTP-koodisi ja vahvista.
Aktiiviset istunnot
Tarkastele kaikkia tällä hetkellä aktiivisia kirjautumisistuntoja, mukaan lukien selain, käyttöjärjestelmä, IP-osoite ja viimeksi nähty aika. Napsauta Peruuta missä tahansa istunnossa, jota et tunnista. Voit myös peruuttaa kaikki istunnot kerralla kirjautuaksesi ulos kaikista laitteista.
API-avain
Luo henkilökohtainen API-avain, jota käytetään torrenttien ohjelmalliseen lataamiseen AniRena API:n kautta. Napsauta Luo avain luodaksesi sellaisen — koko avain näytetään kerran heti luomisen jälkeen. Säilytä se turvallisesti; sitä ei näytetä kokonaan enää. Käytä Peruuta-toimintoa avaimen pysyvään mitätöintiin.
Poista tili
Tilin poistamisen pyytäminen aloittaa 30 päivän odotusajan. Tilisi poistetaan käytöstä välittömästi ja poistetaan pysyvästi 30 päivän kuluttua. Voit peruuttaa poiston milloin tahansa kyseisen ajan sisällä kirjautumalla sisään ja napsauttamalla Peruuta poisto.
7. AniRena API
AniRena tarjoaa JSON API:n, jonka avulla voit ladata torrentteja ohjelmallisesti henkilökohtaisella API-avaimella. API soveltaa samoja sääntöjä kuin web-käyttöliittymä: estotarkistukset, nopeusrajoitukset ja sivuston tilarajoitukset kaikki pätevät. Jokainen API-lataus kirjataan tarkistuslokiin.
Todennus
API käyttää kaksivaiheista todennusvirtaa. Vaihda ensin pysyvä API-avaimesi lyhytikäiseksi bearer-tokeniksi, sitten välitä kyseinen token jokaisen API-pyynnön Authorization-otsikossa.
API-avaimesi on saatavilla kohdassa Tilisi > API-avain. Pidä se salassa — kuka tahansa avaimen omistava voi hankkia bearer-tokeneja ja ladata puolestasi. Jos se vaarantuu, peruuta se välittömästi ja luo uusi.
Vaihe 1 — Hanki bearer-token
/api/v1/auth/tokenLähetä POST-pyyntö token-endpointiin API-avaimellasi Authorization-otsikossa. Pyyntörunkoa ei tarvita.
Authorization: ApiKey <your-api-key>
Token-vastaus
{
"token": "<bearer-token>",
"token_type": "Bearer",
"expires_in": 3600
}Tokenin elinaika
Bearer-tokenit pysyvät voimassa enintään 3600 sekuntia niiden myöntämishetkestä ja niitä voi käyttää uudelleen jokaisessa pyynnössä, kunnes ne vanhenevat. Kun token vanhenee, luo uusi POST /api/v1/auth/token -kutsulla. Jokainen vastaus toistaa edelleen nykyisen tokenin X-New-Token-otsakkeessa taaksepäin yhteensopivuuden vuoksi.
X-New-Token: <next-bearer-token>
Kirjautuminen yhdellä pyynnöllä (2FA:lla)
/api/v1/auth/loginTodenna käyttäjätunnuksella tai sähköpostilla ja salasanalla yhdellä pyynnöllä ja saat bearer-tunnuksen suoraan. Jos tililläsi on 2FA käytössä, sisällytä nykyinen todennussovelluksen koodi kenttään totp_code (tai palautuskoodi kenttään recovery_code). Halutessasi aseta new_api_key arvoon true luodaksesi samalla vastauksella myös aivan uuden pysyvän API-avaimen.
Pyyntörunko
{
"login": "username or email",
"password": "your-password",
"totp_code": "123456", // pakollinen, jos 2FA on käytössä (6 numeroa)
"recovery_code": "", // vaihtoehto totp_code:lle
"new_api_key": false // aseta true luodaksesi myös uuden API-avaimen
}Token-vastaus
{
"ok": true,
"token": "<bearer-token>",
"token_type": "Bearer",
"expires_in": 3600,
"api_key": "<new-api-key>" // läsnä vain, kun new_api_key oli true
}Bearer-tunnus toimii täsmälleen samoin kuin /api/v1/auth/token-päätepisteestä saatu. api_key-kenttä palautetaan vain, kun new_api_key on true — tallenna se heti, sillä se näytetään vain kerran ja korvaa aiemman avaimen.
Esimerkki — kirjaudu sisään ja (valinnaisesti) hae uusi API-avain
# pip install requests import requests BASE_URL = "https://www.anirena.com" # One request: authenticate (with 2FA if enabled) and get a bearer token. # Set new_api_key=True to also receive a brand-new permanent API key. resp = requests.post( f"{BASE_URL}/api/v1/auth/login", json={ "login": "your-username", # username or email "password": "your-password", "totp_code": "123456", # omit if 2FA is not enabled "new_api_key": True, # optional }, ) resp.raise_for_status() data = resp.json() token = data["token"] # use as: Authorization: Bearer <token> if "api_key" in data: print("New API key — store it now:", data["api_key"])
// Built-in fetch — requires Node.js 18+ const BASE_URL = "https://www.anirena.com"; // One request: authenticate (with 2FA if enabled) and get a bearer token. // Set new_api_key:true to also receive a brand-new permanent API key. const resp = await fetch(`${BASE_URL}/api/v1/auth/login`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ login: "your-username", // username or email password: "your-password", totp_code: "123456", // omit if 2FA is not enabled new_api_key: true, // optional }), }); const data = await resp.json(); const token = data.token; // use as: Authorization: Bearer <token> if (data.api_key) console.log("New API key — store it now:", data.api_key);
// Requires: curl extension (enabled by default in PHP 8+) <?php define("BASE_URL", "https://www.anirena.com"); // One request: authenticate (with 2FA if enabled) and get a bearer token. // Set new_api_key => true to also receive a brand-new permanent API key. $ch = curl_init(BASE_URL . "/api/v1/auth/login"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode([ "login" => "your-username", // username or email "password" => "your-password", "totp_code" => "123456", // omit if 2FA is not enabled "new_api_key" => true, // optional ]), CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Content-Type: application/json"], ]); $data = json_decode(curl_exec($ch), true); curl_close($ch); $token = $data["token"]; // use as: Authorization: Bearer <token> if (isset($data["api_key"])) echo "New API key — store it now: " . $data["api_key"];
// Cargo.toml: // serde_json = "1" // reqwest = { version = "0.12", features = ["blocking", "json"] } const BASE_URL: &str = "https://www.anirena.com"; fn main() { let client = reqwest::blocking::Client::new(); // One request: authenticate (with 2FA if enabled) and get a bearer token. // Set new_api_key:true to also receive a brand-new permanent API key. let data: serde_json::Value = client .post(format!("{BASE_URL}/api/v1/auth/login")) .json(&serde_json::json!({ "login": "your-username", // username or email "password": "your-password", "totp_code": "123456", // omit if 2FA is not enabled "new_api_key": true, // optional })) .send().unwrap() .json().unwrap(); let token = data["token"].as_str().unwrap(); // Authorization: Bearer <token> if let Some(key) = data["api_key"].as_str() { println!("New API key — store it now: {key}"); } }
Vaihe 2 — Lataa torrent
/api/v1/torrentsLähetä yksinkertainen JSON POST -pyyntö bearer-tokenilla Authorization-otsikossa.
Pyyntörunko
| Kenttä | Tyyppi | Pakollinen | Kuvaus |
|---|---|---|---|
torrent | string | Kyllä | .torrent-tiedoston sisältö Base64-koodattuna. |
category | string | Kyllä | Kategoriaslug: anime, manga, audio, literature, live, pictures, software, hentai, other. |
name | string | Ei | Korvaa torrentin näyttönimi. |
sub_category | string | Ei | Alakategoriaslug (esim. raw, sub-audio). Täytyy kuulua valittuun kategoriaan. |
languages | string[] | Ei | Taulukko BCP 47 -kielikoodeista (esim. en, ja). |
group_id | string | Ei | UUID ryhmästä, jonka jäsen olet, yhdistääksesi tämän julkaisun. |
description | string | Ei | Markdown-muotoinen julkaisun kuvaus (maks. 65535 merkkiä). |
comment | string | Ei | Korvaa torrentin upotettu kommenttikenttä. |
is_private | boolean | Ei | Aseta true ottaaksesi käyttöön yksityislipun torrentissa. |
comments_enabled | boolean | Ei | Salli kommentit tähän torrenttiin. Oletusarvo on true (käytössä). |
anime_id | string | Ei | UUID anime-merkinnästä, joka linkitetään tähän torrentiin. Hanki UUID GET /api/v1/anime/search-pyynnöllä. Palauttaa 400, jos UUID ei vastaa mitään tunnettua merkintää. |
announce | string | Ei | Korvaa tai lisää ensisijainen announce-URL. |
trackers | string | Ei | Lisätrackereiden URL-osoitteet uusilla riveillä erotettuina. Tyhjä rivi URL-osoitteiden välissä luo uuden trackerkerroksen. |
test | boolean | Ei | Aseta arvoksi true kuivaharjoitusta varten: pyyntö validoidaan täysin, mutta torrenttia ei tallenneta. Käytä tätä varmistaaksesi, että pakettisi on oikein ennen todellista lähettämistä. |
Kuivaharjoituksen onnistumisivastaus — 200 OK
{
"ok": true,
"test": true,
"name": "My Torrent Title",
"info_hash_v1": "aabbccddeeff...",
"info_hash_v2": null
}Käytettävissä olevat kielikoodit
abaaafaksqamarar-001anhyasavaeayazbmbaeubebnbhbibsbrbgmyyuecachcenyzhzh-HKzh-Hanszh-SGzh-TWcucvkwcocrhrcsdadvnlnl-BEdzenen-USeoeteefofjfilfifrfr-CAffgllgkadede-ATelgnguhthahehzhihohuisioigidiaieiuikgaitjajvklknkrkskkkmkirwrnkvkgkokjkukylolalvlilnltlulbmkmgmsmlmtgvmimrmhmnnanvngnendsenonbnnocorojomospipsfaplptpt-BRpaqurormrusmsgsascgdsrsr-Latnsniisdsiskslsonrsteses-419es-MXsuswsssvtltytgtatttethbotitotstntrtktwukuruguzvevivowacyfywoxhyiyozazuEsimerkkipyyntö
# pip install requests import base64, pathlib, requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://www.anirena.com" # Step 1: exchange API key for a short-lived bearer token auth = requests.post( f"{BASE_URL}/api/v1/auth/token", headers={"Authorization": f"ApiKey {API_KEY}"}, ) auth.raise_for_status() token = auth.json()["token"] # Step 2: upload — plain JSON with the bearer token torrent_b64 = base64.b64encode(pathlib.Path("file.torrent").read_bytes()).decode() resp = requests.post( f"{BASE_URL}/api/v1/torrents", json={ "torrent": torrent_b64, "category": "anime", "sub_category": "raw", "languages": ["ja"], "description": "# My Release\n\nRelease notes here.", "is_private": False, }, headers={"Authorization": f"Bearer {token}"}, ) resp.raise_for_status() data = resp.json() token = resp.headers.get("X-New-Token", token) # save for next request print(data["id"], data["name"]) # torrent UUID and title
// Built-in modules only — requires Node.js 18+ (for global fetch) const fs = require("fs"); const API_KEY = "YOUR_API_KEY"; const BASE_URL = "https://www.anirena.com"; // Step 1: exchange API key for a short-lived bearer token let authResp = await fetch(`${BASE_URL}/api/v1/auth/token`, { method: "POST", headers: { Authorization: `ApiKey ${API_KEY}` }, }); let { token } = await authResp.json(); // Step 2: upload — plain JSON with the bearer token const torrentB64 = fs.readFileSync("file.torrent").toString("base64"); const resp = await fetch(`${BASE_URL}/api/v1/torrents`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` }, body: JSON.stringify({ torrent: torrentB64, category: "anime", sub_category: "raw", languages: ["ja"], description: "# My Release\n\nRelease notes here.", is_private: false, }), }); const data = await resp.json(); token = resp.headers.get("x-new-token") ?? token; // save for next request console.log(data.id, data.name); // torrent UUID and title
// Requires: curl extension (enabled by default in PHP 8+) <?php define("API_KEY", "YOUR_API_KEY"); define("BASE_URL", "https://www.anirena.com"); // Step 1: exchange API key for a short-lived bearer token $ch = curl_init(BASE_URL . "/api/v1/auth/token"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: ApiKey " . API_KEY], ]); $token = json_decode(curl_exec($ch), true)["token"]; curl_close($ch); // Step 2: upload — plain JSON with the bearer token $torrentB64 = base64_encode(file_get_contents("file.torrent")); $respHeaders = []; $ch = curl_init(BASE_URL . "/api/v1/torrents"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode([ "torrent" => $torrentB64, "category" => "anime", "sub_category" => "raw", "languages" => ["ja"], "description" => "# My Release\n\nRelease notes here.", "is_private" => false, ]), CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADERFUNCTION => function($ch, $h) use (&$respHeaders) { $respHeaders[] = $h; return strlen($h); }, CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "Authorization: Bearer " . $token, ], ]); $data = json_decode(curl_exec($ch), true); curl_close($ch); foreach ($respHeaders as $h) { // save new token for next request if (stripos($h, "X-New-Token:") === 0) $token = trim(substr($h, strlen("X-New-Token:"))); } echo $data["id"] . " " . $data["name"]; // torrent UUID and title
// Cargo.toml: // base64 = "0.22" // serde_json = "1" // reqwest = { version = "0.12", features = ["blocking", "json"] } use base64::{engine::general_purpose::STANDARD as B64, Engine}; const API_KEY: &str = "YOUR_API_KEY"; const BASE_URL: &str = "https://www.anirena.com"; fn main() { let client = reqwest::blocking::Client::new(); // Step 1: exchange API key for a short-lived bearer token let auth: serde_json::Value = client .post(format!("{BASE_URL}/api/v1/auth/token")) .header("Authorization", format!("ApiKey {API_KEY}")) .send().unwrap().json().unwrap(); let mut token = auth["token"].as_str().unwrap().to_string(); // Step 2: upload — plain JSON with the bearer token let torrent_b64 = B64.encode(std::fs::read("file.torrent").unwrap()); let resp = client .post(format!("{BASE_URL}/api/v1/torrents")) .header("Authorization", format!("Bearer {token}")) .json(&serde_json::json!({ "torrent": torrent_b64, "category": "anime", "sub_category": "raw", "languages": ["ja"], "description": "# My Release\n\nRelease notes here.", "is_private": false })) .send().unwrap(); if let Some(t) = resp.headers().get("x-new-token") { token = t.to_str().unwrap().to_string(); // save for next request } let data: serde_json::Value = resp.json().unwrap(); println!("{} {}", data["id"], data["name"]); // torrent UUID and title }
Onnistumisvastaus — 200 OK
{
"ok": true,
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "My Torrent Title",
"info_hash_v1": "aabbccddeeff...",
"info_hash_v2": null
}Virhevastaukset
| HTTP-tila | Merkitys |
|---|---|
400 | Virheellinen pyyntörunko tai puuttuva pakollinen kenttä. |
401 | Puuttuva, vanhentunut tai jo kierrätetty bearer-token. Todenna uudelleen POST /api/v1/auth/token kautta. |
403 | Tili estetty, poistettu käytöstä tai IP estetty. |
409 | Päällekkäinen torrent — sama info hash on jo olemassa. |
422 | Torrent-tiedostoa ei voitu jäsentää tai se epäonnistui validoinnissa (estetty kuvio, virheellinen rakenne). |
429 | Nopeusraja ylitetty. Yritä uudelleen ikkunan nollautumisen jälkeen. |
503 | Sivusto on huolto- tai vain luku -tilassa. |
Nopeusrajoitus
API-lataukset ovat erillisen, konfiguroitavan nopeusrajoituksen alaisia web-käyttöliittymästä. Rajoituksen ja ikkunan asettaa sivuston ylläpitäjä. Kun nopeusrajoitus ylitetään, API palauttaa 429 Too Many Requests. Rajoitus on per API-avain.
Torrent-tiedostojen luominen torrent-builderilla
torrent-builder on avoimen lähdekoodin CLI-työkalu, joka on rakennettu libtorrent-rasterbar-kirjaston päälle ja jonka avulla voit luoda BitTorrent v1, v2 ja hybrid .torrent-tiedostoja komentorivillä. Se sopii täydellisesti AniRena upload API:n kanssa — luo tiedosto paikallisesti ja POST se sitten suoraan trackerille. cantalupo555/torrent-builder.
Rakentaminen lähdekoodista
Vaatii CMake >= 3.28.3 ja libtorrent-rasterbar >= 2.0.11. Kloonaa repositorio ja rakenna CMakella:
# Install system dependencies sudo apt-get install build-essential cmake libtorrent-rasterbar-dev # Clone & build git clone https://github.com/cantalupo555/torrent-builder.git cd torrent-builder mkdir build && cd build cmake .. && cmake --build .
# Install dependencies via Homebrew brew install cmake libtorrent-rasterbar # Clone & build git clone https://github.com/cantalupo555/torrent-builder.git cd torrent-builder mkdir build && cd build cmake .. && cmake --build .
Tärkeimmät liput
| Kenttä | Kuvaus |
|---|---|
--path | Polku pakattavaan tiedostoon tai hakemistoon (pakollinen). |
--output | Tulosteen .torrent-tiedostonimi (pakollinen). |
--version | BitTorrent-muoto — 1 = v1, 2 = v2, 3 = hybrid (oletus: 3). |
--tracker | Lisää tracker-ilmoituksen URL. Toista lippu lisätäksesi useita trackereitä. |
--comment | Upota metatietokommenttijono torrenttiin. |
--private | Aseta yksityislippu rajoittaaksesi jakelun vain luetelluille trackereille. |
--piece-size | Palan koko KB:ssa (16-32768). Jätä asettamatta automaattista valintaa varten. |
-i | Käynnistä vaiheittainen interaktiivinen määritystila. |
Täydellinen työnkulku: rakenna -> lataa
Alla olevat esimerkit rakentavat hybrid-torrentin torrent-builderilla, todentautuvat sitten AniRena API:lle ja lataavat tuloksen yhdessä skriptissä.
# pip install requests import base64, subprocess, requests API_KEY = "YOUR_API_KEY" BASE_URL = "https://www.anirena.com" # Step 1: build the torrent with torrent-builder # --version 1=v1 2=v2 3=hybrid (default) subprocess.run([ "./torrent-builder/build/torrent_builder", "--path", "/data/my_release", "--output", "my_release.torrent", "--version", "3", # hybrid "--tracker", "udp://open.tracker.gg:6969/announce", "--comment", "My Release", "--creator", "--creation-date", ], check=True) # Step 2: authenticate token = requests.post( f"{BASE_URL}/api/v1/auth/token", headers={"Authorization": f"ApiKey {API_KEY}"}, ).json()["token"] # Step 3: upload torrent_b64 = base64.b64encode(open("my_release.torrent", "rb").read()).decode() resp = requests.post( f"{BASE_URL}/api/v1/torrents", json={ "torrent": torrent_b64, "category": "anime", "sub_category": "raw", "languages": ["ja"], "comments_enabled": True, }, headers={"Authorization": f"Bearer {token}"}, ) resp.raise_for_status() data = resp.json() print(data["id"], data["name"])
// Built-in modules — Node.js 18+ const fs = require("fs"); const { execFileSync } = require("child_process"); const API_KEY = "YOUR_API_KEY"; const BASE_URL = "https://www.anirena.com"; // Step 1: build the torrent (--version 1=v1, 2=v2, 3=hybrid) execFileSync("./torrent-builder/build/torrent_builder", [ "--path", "/data/my_release", "--output", "my_release.torrent", "--version", "3", "--tracker", "udp://open.tracker.gg:6969/announce", "--comment", "My Release", "--creator", "--creation-date", ]); // Step 2: authenticate let { token } = await (await fetch(`${BASE_URL}/api/v1/auth/token`, { method: "POST", headers: { Authorization: `ApiKey ${API_KEY}` }, })).json(); // Step 3: upload const torrentB64 = fs.readFileSync("my_release.torrent").toString("base64"); const resp = await fetch(`${BASE_URL}/api/v1/torrents`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` }, body: JSON.stringify({ torrent: torrentB64, category: "anime", sub_category: "raw", languages: ["ja"], comments_enabled: true, }), }); const data = await resp.json(); console.log(data.id, data.name);
// PHP 8+ with curl and proc_open <?php define("API_KEY", "YOUR_API_KEY"); define("BASE_URL", "https://www.anirena.com"); // Step 1: build the torrent (version: 1=v1, 2=v2, 3=hybrid) exec(implode(" ", array_map("escapeshellarg", [ "./torrent-builder/build/torrent_builder", "--path", "/data/my_release", "--output", "my_release.torrent", "--version", "3", "--tracker", "udp://open.tracker.gg:6969/announce", "--comment", "My Release", "--creator", "--creation-date", ]))); // Step 2: authenticate $ch = curl_init(BASE_URL . "/api/v1/auth/token"); curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: ApiKey " . API_KEY]]); $token = json_decode(curl_exec($ch), true)["token"]; curl_close($ch); // Step 3: upload $torrentB64 = base64_encode(file_get_contents("my_release.torrent")); $respHeaders = []; $ch = curl_init(BASE_URL . "/api/v1/torrents"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode([ "torrent" => $torrentB64, "category" => "anime", "sub_category" => "raw", "languages" => ["ja"], "comments_enabled" => true, ]), CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADERFUNCTION => function($ch, $h) use (&$respHeaders) { $respHeaders[] = $h; return strlen($h); }, CURLOPT_HTTPHEADER => ["Content-Type: application/json", "Authorization: Bearer " . $token], ]); $data = json_decode(curl_exec($ch), true); curl_close($ch); echo $data["id"] . " " . $data["name"];
// Cargo.toml: // base64 = "0.22" // serde_json = "1" // reqwest = { version = "0.12", features = ["blocking", "json"] } use base64::{engine::general_purpose::STANDARD as B64, Engine}; use std::process::Command; const API_KEY: &str = "YOUR_API_KEY"; const BASE_URL: &str = "https://www.anirena.com"; fn main() { // Step 1: build the torrent (--version 1=v1, 2=v2, 3=hybrid) Command::new("./torrent-builder/build/torrent_builder") .args([ "--path", "/data/my_release", "--output", "my_release.torrent", "--version", "3", "--tracker", "udp://open.tracker.gg:6969/announce", "--comment", "My Release", "--creator", "--creation-date", ]) .status().expect("torrent_builder failed"); let client = reqwest::blocking::Client::new(); // Step 2: authenticate let auth: serde_json::Value = client .post(format!("{BASE_URL}/api/v1/auth/token")) .header("Authorization", format!("ApiKey {API_KEY}")) .send().unwrap().json().unwrap(); let token = auth["token"].as_str().unwrap().to_string(); // Step 3: upload let torrent_b64 = B64.encode(std::fs::read("my_release.torrent").unwrap()); let resp: serde_json::Value = client .post(format!("{BASE_URL}/api/v1/torrents")) .header("Authorization", format!("Bearer {token}")) .json(&serde_json::json!({ "torrent": torrent_b64, "category": "anime", "sub_category": "raw", "languages": ["ja"], "comments_enabled": true, })) .send().unwrap().json().unwrap(); println!("{} {}", resp["id"], resp["name"]); }
Torrentin metatietojen hakeminen
/api/v1/torrents/searchLähetä yksinkertainen JSON POST -pyyntö noutaaksesi torrent-listauksia samoilla haku- ja suodatusvaihtoehdoilla kuin verkkosivustolla. .torrent-tiedostoa itsessään ei palauteta — käytä normaalia latausreittiä siihen.
# pip install requests (token already obtained — see upload example) resp = requests.post( f"{BASE_URL}/api/v1/torrents/search", json={"q": "Sword Art Online", "category": "anime", "per_page": 25}, headers={"Authorization": f"Bearer {token}"}, ) resp.raise_for_status() data = resp.json() token = resp.headers.get("X-New-Token", token) # save for next request for t in data["torrents"]: print(t["title"], "-", t["magnet"])
// token already obtained — see upload example const resp = await fetch(`${BASE_URL}/api/v1/torrents/search`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` }, body: JSON.stringify({ q: "Sword Art Online", category: "anime", per_page: 25 }), }); const data = await resp.json(); token = resp.headers.get("x-new-token") ?? token; // save for next request data.torrents.forEach(t => console.log(t.title, "-", t.magnet));
// token already obtained — see upload example $respHeaders = []; $ch = curl_init(BASE_URL . "/api/v1/torrents/search"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode([ "q" => "Sword Art Online", "category" => "anime", "per_page" => 25 ]), CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADERFUNCTION => function($ch, $h) use (&$respHeaders) { $respHeaders[] = $h; return strlen($h); }, CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "Authorization: Bearer " . $token, ], ]); $data = json_decode(curl_exec($ch), true); curl_close($ch); foreach ($respHeaders as $h) { // save new token for next request if (stripos($h, "X-New-Token:") === 0) $token = trim(substr($h, strlen("X-New-Token:"))); } foreach ($data["torrents"] as $t) { echo $t["title"] . " - " . $t["magnet"] . "\n"; }
// client and token already obtained — see upload example let resp = client .post(format!("{BASE_URL}/api/v1/torrents/search")) .header("Authorization", format!("Bearer {token}")) .json(&serde_json::json!({"q": "Sword Art Online", "category": "anime", "per_page": 25})) .send().unwrap(); if let Some(t) = resp.headers().get("x-new-token") { token = t.to_str().unwrap().to_string(); // save for next request } let data: serde_json::Value = resp.json().unwrap(); for t in data["torrents"].as_array().unwrap() { println!("{} - {}", t["title"], t["magnet"]); }
Hakuparametrit
| Kenttä | Tyyppi | Pakollinen | Kuvaus |
|---|---|---|---|
q | string | Ei | Vapaan tekstin haku. Tukee group:slug, group:"Nimi", user:nimi etuliitteitä. |
category | string | Ei | Kategoriaslug (esim. "anime"). |
sub_category | string | Ei | Alakategoriaslug (esim. "raw"). |
languages | string[] | Ei | Taulukko BCP 47 -kielikoodeista (esim. en, ja). |
sort | string | Ei | Lajittelukenttä: date (oletus), size, seeders, leechers, completed, title. |
order | string | Ei | Lajittelusuunta: desc (oletus) tai asc. |
page | integer | Ei | Sivunumero, alkaen 1 (oletus 1). |
per_page | integer | Ei | Tuloksia per sivu, 1–250 (oletus 50). |
hide_adult | boolean | Ei | Sulje pois aikuisille tarkoitetun kategorian torrentit. Oletusarvo true tavallisille käyttäjille. |
show_dead | boolean | Ei | Kun false (oletus), kuolleiden torrenttien armoaikaa vanhemmat torrentit, joilla ei ole aktiivisia seedereitä, jätetään pois. Aseta true sisällyttääksesi ne. |
Vastaus
{
"total": 1234,
"page": 1,
"per_page": 50,
"total_pages": 25,
"from": 1,
"to": 50,
"torrents": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "My Release Title",
"info_hash_v1": "aabbccddeeff...",
"info_hash_v2": null,
"size_fmt": "1.4 GB",
"completed": 42,
"seeders": 10,
"leechers": 3,
"languages": ["ja", "en"],
"comment_count": 7,
"created_at": "2024-01-15 12:34",
"cat_slug": "anime",
"sub_slug": "raw",
"group_name": null,
"uploader": "username",
"magnet": "magnet:?xt=urn:btih:..."
}
]
}comment_count — Poistamattomien kommenttien määrä tässä torrentissa.
Haun nopeusrajoitus
Hakupyynnöt ovat erillisen, konfiguroitavan nopeusrajoituksen alaisia (oletus 60 pyyntöä per 60 sekuntia per API-avain). Rajoituksen ylittäminen palauttaa 429 Too Many Requests. Henkilökunnan tilit on vapautettu.
Hae torrent-tiedot
/api/v1/torrent/{id}Hakee yhden torrentin täydelliset metatiedot — mukaan lukien kentät, jotka haku-endpointti jättää pois, kuten Markdown-kuvauksen, upotetun .torrent-kommentin, tiedostoluettelon kunkin tiedoston koolla ja tracker-tasojen täydellisen rakenteen. Saatavilla olevat reaaliaikaiset seederi- ja leecheri-määrät luetaan trackerista.
Vastaus
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "My Release Title",
"info_hash_v1": "aabbccddeeff...",
"info_hash_v2": null,
"size_fmt": "1.4 GB",
"completed": 42,
"seeders": 10,
"leechers": 3,
"ext_seeders": 128,
"ext_leechers": 14,
"created_at": "2024-01-15 12:34",
"torrent_created": "2024-01-15 12:30",
"created_by_client": "mktorrent 1.1",
"cat_name": "Anime",
"cat_slug": "anime",
"sub_name": "Raw",
"sub_slug": "raw",
"group_name": null,
"group_slug": null,
"uploader": "username",
"uploader_id": "...",
"description": "# My Release\n\nRelease notes here.",
"comment": "",
"is_private": false,
"magnet": "magnet:?xt=urn:btih:...",
"languages": [
{ "code": "ja", "name": "Japanese", "country_code": "jp" }
],
"tracker_tiers": [
{ "tier": 0, "urls": ["udp://tracker.example.org:6969/announce"] }
],
"files": [
{ "path": "My Release/episode-01.mkv", "size": 1503238553 }
],
"comments_enabled": true,
"comments_locked": false,
"comment_count": 7
}seeders, leechers — Reaaliaikaiset luvut sisäisestä trackerista; molemmat raportoidaan arvoksi 0, kun tracker-säilössä ei ole merkintää tälle info-tiivisteelle tai säilö ei ole tavoitettavissa.
ext_seeders, ext_leechers — Suurin yksittäisen ulkoisen trackerin tälle torrentille raportoima seederi- ja leecheri-määrä. Samaa parveakuvaavien trackerien tiedot menevät päällekkäin, joten käytetään maksimia summan sijaan; molemmat raportoivat 0, kun millään trackerilla ei ole scrape-tietoja tälle info-tiivisteelle.
Virhevastaukset
| HTTP-tila | Merkitys |
|---|---|
400 | Torrent-tunnuksen on oltava joko 36-merkkinen yhdysmerkkejä sisältävä UUID tai 32-merkkinen pelkkä heksadesimaalimerkkijono. |
401 | Puuttuva, vanhentunut tai jo kierrätetty bearer-token. Todenna uudelleen POST /api/v1/auth/token kautta. |
404 | Torrenttia ei löytynyt. |
429 | Nopeusraja ylitetty. Yritä uudelleen ikkunan nollautumisen jälkeen. |
503 | Sivusto on huolto- tai vain luku -tilassa. |
Torrentin kommenttien hakeminen
/api/v1/torrents/{id}/commentsHae sivutetut kommentit torrentille. Kommenttien määrää per sivu hallitsee palvelimen .env-tiedoston COMMENT_PER_PAGE-asetus (oletus 20). Vain torrentit, joissa kommentit on otettu käyttöön, palauttavat tuloksia — kaikki muut palauttavat 403.
Kyselyparametrit
| Kenttä | Tyyppi | Pakollinen | Kuvaus |
|---|---|---|---|
page | integer | Ei | Sivunumero, alkaen 1 (oletus 1). |
# pip install requests (token already obtained — see upload example) TORRENT_ID = "550e8400-e29b-41d4-a716-446655440000" resp = requests.get( f"{BASE_URL}/api/v1/torrents/{TORRENT_ID}/comments", params={"page": 1}, headers={"Authorization": f"Bearer {token}"}, ) resp.raise_for_status() data = resp.json() token = resp.headers.get("X-New-Token", token) # save for next request for c in data["comments"]: print(c["username"], "-", c["body"])
// token already obtained — see upload example const TORRENT_ID = "550e8400-e29b-41d4-a716-446655440000"; const resp = await fetch(`${BASE_URL}/api/v1/torrents/${TORRENT_ID}/comments?page=1`, { headers: { Authorization: `Bearer ${token}` }, }); const data = await resp.json(); token = resp.headers.get("x-new-token") ?? token; // save for next request data.comments.forEach(c => console.log(c.username, "-", c.body));
// token already obtained — see upload example $torrentId = "550e8400-e29b-41d4-a716-446655440000"; $respHeaders = []; $ch = curl_init(BASE_URL . "/api/v1/torrents/{$torrentId}/comments?page=1"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADERFUNCTION => function($ch, $h) use (&$respHeaders) { $respHeaders[] = $h; return strlen($h); }, CURLOPT_HTTPHEADER => ["Authorization: Bearer " . $token], ]); $data = json_decode(curl_exec($ch), true); curl_close($ch); foreach ($respHeaders as $h) { // save new token for next request if (stripos($h, "X-New-Token:") === 0) $token = trim(substr($h, strlen("X-New-Token:"))); } foreach ($data["comments"] as $c) { echo $c["username"] . " - " . $c["body"] . "\n"; }
// client and token already obtained — see upload example let torrent_id = "550e8400-e29b-41d4-a716-446655440000"; let resp = client .get(format!("{BASE_URL}/api/v1/torrents/{torrent_id}/comments?page=1")) .header("Authorization", format!("Bearer {token}")) .send().unwrap(); if let Some(t) = resp.headers().get("x-new-token") { token = t.to_str().unwrap().to_string(); // save for next request } let data: serde_json::Value = resp.json().unwrap(); for c in data["comments"].as_array().unwrap() { println!("{} - {}", c["username"], c["body"]); }
Vastaus
{
"torrent_id": "550e8400-e29b-41d4-a716-446655440000",
"page": 1,
"per_page": 20,
"total": 45,
"total_pages": 3,
"comments": [
{
"id": "...",
"user_id": "...",
"username": "uploader",
"role": "user",
"author_banned": false,
"body": "Great release!",
"created_at": "2024-01-15 12:34:00",
"edited_at": null,
"edited_by_username": null,
"deleted_at": null
}
]
}Kenttä body on tyhjä merkkijono, kun kommentin tekijä on estetty tai kommentti on poistettu. Lippu author_banned osoittaa, kumpi tapaus koskee.
Virhevastaukset
| HTTP-tila | Merkitys |
|---|---|
401 | Puuttuva, vanhentunut tai jo kierrätetty bearer-token. Todenna uudelleen POST /api/v1/auth/token kautta. |
403 | Kommentit on poistettu käytöstä tässä torrentissa. |
404 | Torrenttia ei löydy. |
503 | Sivusto on huolto- tai vain luku -tilassa. |
Anime-merkintöjen haku
/api/v1/anime/search?q=<query>Etsi anime-merkintöjä otsikon perusteella niiden UUID:n saamiseksi. UUID voidaan välittää anime_id-kenttänä latauksen rungossa, jotta torrent linkitetään anime-merkintään lataushetkellä, tai käyttää PUT /api/torrents/{id}/anime-pyynnön kanssa latauksen jälkeen. Todennusta ei tarvita. Samaan nopeusrajoitukseen kuin torrent-haku (oletus 60 pyyntöä per 60 sekuntia per IP).
# pip install requests (no authentication required)
resp = requests.get(
f"{BASE_URL}/api/v1/anime/search",
params={"q": "Sword Art Online", "page": 1, "per_page": 10},
)
resp.raise_for_status()
for item in resp.json()["results"]:
print(item["id"], "-", item["title"])// No authentication required
const resp = await fetch(
`${BASE_URL}/api/v1/anime/search?q=${encodeURIComponent("Sword Art Online")}&page=1&per_page=10`
);
const data = await resp.json();
data.results.forEach(item => console.log(item.id, "-", item.title));// No authentication required
$ch = curl_init(BASE_URL . "/api/v1/anime/search?" . http_build_query([
"q" => "Sword Art Online", "page" => 1, "per_page" => 10,
]));
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
foreach ($data["results"] as $item) {
echo $item["id"] . " - " . $item["title"] . "\n";
}// No authentication required
let data: serde_json::Value = reqwest::blocking::get(
format!("{BASE_URL}/api/v1/anime/search?q=Sword+Art+Online&page=1&per_page=10")
).unwrap().json().unwrap();
for item in data["results"].as_array().unwrap() {
println!("{} - {}", item["id"], item["title"]);
}Kyselyparametrit
| Kenttä | Tyyppi | Pakollinen | Kuvaus |
|---|---|---|---|
q | string | Kyllä | Nimihakumerkkijono (pakollinen). Täsmätään otsikkoon ja synonyymeihin. |
page | integer | Ei | Sivunumero, alkaen 1 (oletus 1). |
per_page | integer | Ei | Tuloksia per sivu, 1–50 (oletus 10). |
Vastaus
{
"total": 42,
"page": 1,
"per_page": 10,
"total_pages": 5,
"results": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"title": "Sword Art Online",
"anime_type": "TV",
"episodes": 25,
"status": "FINISHED",
"season": "FALL",
"season_year": 2012,
"picture": "https://cdn.myanimelist.net/images/anime/...",
"thumbnail": "https://cdn.myanimelist.net/images/anime/...",
"duration_secs": 1440
}
]
}Ryhmien listaus ja hakeminen
/api/v1/groupsPalauttaa sivutetun listan julkisista ryhmistä (käytössä olevat ja lukitsemattomat). Vaatii Bearer-token-todennuksen.
/api/v1/groups/{id_or_slug}Palauttaa yksittäisen julkisen ryhmän numeerisen ID:n tai slugin perusteella. Palauttaa 404, jos ryhmä on poistettu käytöstä tai lukittu.
Kyselyparametrit (vain lista)
| Kenttä | Tyyppi | Pakollinen | Kuvaus |
|---|---|---|---|
q | string | Ei | Suodata ryhmänimen mukaan (valinnainen, osamerkkijono). |
page | integer | Ei | Sivunumero (oletus 1). |
per_page | integer | Ei | Tuloksia per sivu, 1–100 (oletus 20). |
sort | string | Ei | Lajittelusarake: name | slug | members | torrents | created (oletus name). |
order | string | Ei | Lajittelusuunta: asc tai desc (oletus asc). |
Vastaus (lista)
{
"total": 12,
"page": 1,
"per_page": 20,
"total_pages": 1,
"groups": [
{
"id": 1,
"name": "SubsPlease",
"slug": "subsplease",
"subdomain_slug": "subsplease",
"description": "Weekly simulcast batches.",
"owner": "admin",
"member_count": 42,
"torrent_count": 1337,
"created_at": "2024-01-15 12:34"
}
]
}Vastaus (yksittäinen)
{
"id": 1,
"name": "SubsPlease",
"slug": "subsplease",
"subdomain_slug": "subsplease",
"description": "Weekly simulcast batches.",
"owner": "admin",
"member_count": 42,
"torrent_count": 1337,
"created_at": "2024-01-15 12:34"
}Virhevastaukset
| HTTP-tila | Merkitys |
|---|---|
401 | Puuttuva, vanhentunut tai jo kierrätetty bearer-token. Todenna uudelleen POST /api/v1/auth/token kautta. |
404 | Ryhmää ei löydy tai se ei ole julkisesti saatavilla. |
429 | Nopeusraja ylitetty. Yritä uudelleen ikkunan nollautumisen jälkeen. |
503 | Sivusto on huolto- tai vain luku -tilassa. |
8. Lahjoitukset
Jos haluat tukea AniRenaa ja auttaa kattamaan palvelintensa ja palveluidensa hosting-kulut, voit lähettää lahjoituksen johonkin seuraavista kryptovaluuttalompakoista:
bc1qy2h3ddq6ak5damvnf4r5vu3ydehhxrcq8gllwn0xCbaFe03832F95F86AF2536d52710e78C63b62Cd33ucetj2XDGHQg9PVRPMxerNi7c6kX7GJkjQNg9yjwGegLbpt61yX3RjGtB1Ef8vgVz6Hr6baQsTjVkJokainen lahjoitus, suuri tai pieni, on suuresti arvostettua ja menee suoraan AniRenan ylläpitoon. Kiitos tuestasi!
9. Ohjelmisto
AniRena Player on ilmainen työpöytäsovellus, jolla voit suoratoistaa videoita suoraan tämän sivuston indeksoimista torrenteista — eikä koko latauksen valmistumista tarvitse odottaa. Liitä vain magnet-linkki tai avaa .torrent-tiedosto, ja toisto alkaa heti, kun riittävästi dataa on saatavilla.
Molemmat versiot ovat täysin itsenäisiä — kaikki riippuvuudet on paketoitu suoritettavan tiedoston sisään. Ei asennusohjelmaa eikä ajoympäristöä, lataa vain ja suorita.
Asennusohjelma (.exe). Päivittyy itsestään sovelluksessa.
Levykuva (.dmg) Apple Silicon -Maceille (M1 ja uudemmat). Päivittyy itsestään sovelluksessa.
Levykuva (.dmg) Intel-Maceille. Päivittyy itsestään sovelluksessa.
Kannettava yksittäistiedosto, ei asennusta tarvita. Ainoa Linux-muoto, joka tukee päivitystä sovelluksen sisällä.
Asennus: sudo apt install ./<file>.deb — päivittyy aptin kautta tai lataamalla uudelleen, ei sovelluksen sisällä.
Asennus: sudo dnf install ./<file>.rpm — päivittyy dnf:n kautta tai lataamalla uudelleen, ei sovelluksen sisällä.
Sivulataa 64-bittisille ARM Android-laitteille (useimmat nykyaikaiset puhelimet / tabletit). Päivittyy lataamalla uusi APK.
Vanhemmat versiot
Asenna sivulatauksella 32-bittisiin ARM Android -laitteisiin (vanhemmat puhelimet / tabletit). Päivittyy lataamalla uusi APK.