1. はじめに

AniRenaはアニメ、漫画、音声およびその他関連メディアに特化したトレントインデックスです。アカウントなしでトレントのブラウジングとダウンロードが可能です。トレントのアップロード、グループへの参加、またはAPIの利用にはアカウントが必要です。

上部のナビゲーションバーからサイトの主要エリアにアクセスできます:

  • ホーム — トレント一覧と検索ページ。
  • アップロード — 新しいトレントを投稿(ログインが必要)。
  • ガイド — このページ。
  • 統計 — サイト全体の統計(トレント、ピア、アップロード推移)。
  • グループ — リリースグループのディレクトリ。
  • RSS — 最新アップロードのRSSフィード(カテゴリでフィルタリング可能)。

ログイン時に右上に表示されるアカウントメニューから、プロフィールパネルを開いて設定の変更、セキュリティオプションの管理、APIキーへのアクセスができます。

2. ブラウジングと検索

ホームページにはすべてのトレントがアップロード日順に表示されます。上部の検索バーを使って結果をフィルタリングできます。

基本的な検索

検索バーに単語を入力してEnterキーを押す(または検索アイコンをクリックする)と結果が表示されます。クエリが有効な場合は関連度順に並び替えられます。

検索演算子

以下の演算子を通常のクエリと組み合わせて使用できます:

演算子効果
user:"name"user:"SubsPlease"そのユーザーがアップロードしたトレントのみを表示します。

トレント一覧でアップローダー名をクリックすると、自動的にユーザー検索が実行されます。

カテゴリとサブカテゴリ

検索バー横のグリッドアイコン(カテゴリセレクター)を使って、結果を1つのカテゴリに絞り込めます。利用可能なカテゴリ:

  • アニメ
  • マンガ/マンファ/コミック
  • 音楽
  • 文学
  • 実写
  • 画像
  • ソフトウェア
  • 成人向け
  • その他

各カテゴリにはサブカテゴリがあります(例: アニメ → RAW、字幕/音声、ミュージックビデオ)。カテゴリモーダル内で選択できます。

ソートとフィルター

トレント一覧の列ヘッダーをクリックしてその列でソート(昇順/降順)できます。利用可能なソート列: 日付、名前、サイズ、完了ダウンロード数。注: シーダーとリーチャーは Redis から取得されるリアルタイム値のため、ソートには使用できません。

言語フィルター

言語セレクター(旗アイコン)を使って、特定の言語タグが付いたトレントのみを表示できます。

RSSフィード

/rssのRSSフィードで最新アップロードを取得できます。?category=animeなどのカテゴリスラグを追加してフィードをフィルタリングできます。多くのトレントクライアントはこのURLから直接RSSの自動ダウンロードに対応しています。

3. トレントのダウンロード

トレント名をクリックして詳細パネルを開きます。そこから以下が可能です:

  • .torrentをダウンロード — .torrentファイルを直接保存します。直接URLは /torrents/{id}.torrent
  • マグネットリンク — マグネットURIプロトコルを使ってトレントクライアントに直接開きます。URLは /torrents/{id}/magnet

詳細パネルにはトレントの説明、ファイルリスト、トラッカーリスト、シーダー/リーチャー数も表示されます。

レガシーダウンロードリンク

旧AniRenaのダウンロードリンクは引き続きサポートされており、レガシーIDを使用して正しい.torrentファイルに自動的にリダイレクトされます: /dl/{old_id}

おすすめのBitTorrentクライアント

最新のBitTorrentクライアントであれば動作します。以下のクライアントは推奨されており、BitTorrent v2 / ハイブリッドトレントを完全にサポートしています:

qBittorrent ダウンロードページで「追加ダウンロードオプション」をクリックし、lt20(libtorrent 2.0)と表示されたビルドを選択してください。デフォルトのインストーラはlibtorrent 1.2を使用しており、純粋なv2トレントをサポートしていません。v2 対応
PicoTorrent BitTorrent v2をネイティブサポートする軽量Windowsクライアントです。v2 対応
BiglyBT Azureus/Vuzeベースの機能豊富なクロスプラットフォームクライアントで、v2を完全サポートしています。v2 対応

4. アカウントの作成

登録

ナビゲーションバーの「サインアップ」をクリックします。ユーザー名を選択し、メールアドレスとパスワード(最小文字数あり)を設定してください。アカウント作成前にサイトの利用規約を読み、同意する必要があります。

メール認証

サインアップ後、確認メールが送信されます。メール内のリンクをクリックしてアカウントを有効化してください。受信できなかった場合は、ログインページの「アカウントを有効化する」リンクから新しいコードを申請してください。

パスワードの回復

パスワードを忘れた場合は、サインインページの「パスワードをお忘れですか」をクリックしてメールアドレスを入力してください。回復リンクが送信されます。リンクは1回限り有効で、短時間で期限切れになります。

5. トレントのアップロード

ナビゲーションバーの「アップロード」に移動します。有効かつBANされていないアカウントでログインしている必要があります。アップロードページには2つのタブがあります:

アップロードタブ — 既存の.torrentファイルを投稿

.torrentファイルをドラッグ&ドロップするか選択してください。読み込み後、各フィールドを入力します:

フィールド必須説明
トレントファイルはいアップロードする.torrentファイル。
名前いいえトレントの表示名を上書きします。空白の場合はトレントファイルに埋め込まれた名前が使用されます。
カテゴリはいコンテンツのカテゴリ(アニメ、漫画、音声など)。
サブカテゴリいいえカテゴリ内のより具体的なタイプ(例: RAW、字幕/音声)。
言語いいえコンテンツの言語を表す1つ以上の言語タグ。
グループいいえメンバーであるグループにこのリリースを関連付けます。
説明いいえトレント詳細ページに表示されるMarkdown形式の説明(最大65535文字)。
プライベートいいえトレントにプライベートフラグを設定し、DHT/PEXを無効にします。トラッカー専用トレントに有用です。
アナウンスURLいいえプライマリトラッカーのアナウンスURLを上書きまたは追加します。
追加トラッカーいいえトレントファイルから読み取られます。アップロード中は変更できません — トラッカーリストをカスタマイズするには「作成」タブを使用してください。
コメントいいえファイルに埋め込まれたトレントのコメントフィールドを上書きします。
AniRenaトラッカー要件

トレントのアナウンスリストに少なくとも1つのAniRenaトラッカーURLが含まれている必要があります(どのティアでも可)。サイトはアップロード時にこれを確認し、AniRenaトラッカーが含まれていないトレントは拒否されます。AniRenaトラッカーを追加せずにトレントを作成した場合は、アップロードしてからサイトで再ダウンロードしてください — ダウンロードされたファイルには正しいトラッカーが自動的に設定されています。

作成タブ — 新しいトレントを構築

作成タブでは、ブラウザ上でファイルパス、トラッカーURL、その他のトレントパラメータを指定して新しい.torrentをゼロから生成できます。作成されたトレントは上記と同じメタデータフィールドで送信されます。

モデレーション

アップロードは禁止コンテンツパターン(名前、ファイル名、説明)のリストに対して自動的にチェックされます。禁止パターンに一致するトレントは拒否されます。重複トレント(同一インフォハッシュ)も拒否されます。

6. アカウント設定

右上のユーザー名をクリックしてプロフィールパネルを開きます。折りたたみ可能なセクションで構成されています:

設定

UIテーマ、フォントサイズ、カラースキーム、インターフェース言語、トレント関連の表示設定を変更できます。変更は自動的に保存されます。

パスワード

現在のパスワードと新しいパスワードを2回入力します。変更を確認するために、登録済みのメールアドレスに確認コードが送信されます。二要素認証が有効な場合はTOTPコードも必要です。

二要素認証(2FA)

認証アプリ(例: Google Authenticator、Aegis、Bitwarden)を使ってTOTPベースの二要素認証を有効にできます。2FAを有効にする手順:

  1. 認証アプリでQRコードをスキャン(またはシークレットを手動入力)します。
  2. アプリに表示される6桁のコードを入力して設定を確認します。
  3. 表示されたリカバリーコードを保存してください — デバイスを紛失した際にアクセスを回復するための使い捨てコードです。

2FAを無効にするには、現在のTOTPコードを入力して確認してください。

アクティブセッション

ブラウザ、OS、IPアドレス、最終確認時刻を含む現在アクティブなすべてのログインセッションを確認できます。心当たりのないセッションの「取り消し」をクリックしてください。すべてのセッションを一度に取り消して全デバイスからログアウトすることもできます。

APIキー

AniRena APIを通じてプログラム的にトレントをアップロードするための個人APIキーを生成します。「キーを生成」をクリックして作成してください — 生成直後にフルキーが1度だけ表示されます。安全に保管してください。その後は完全な形で表示されません。「取り消し」を使ってキーを永久に無効化できます。

アカウントの削除

アカウントの削除を申請すると30日間の猶予期間が開始されます。アカウントはすぐに無効化され、30日後に完全に削除されます。その期間内であれば、ログインして「削除をキャンセル」をクリックすることでいつでも削除をキャンセルできます。

7. AniRena API

AniRenaは個人APIキーを使ってトレントをプログラム的にアップロードできるJSON APIを提供しています。APIはWebインターフェースと同じルールを適用します: BANチェック、レート制限、サイトモード制限がすべて適用されます。すべてのAPIアップロードは監査ログに記録されます。

認証

APIは2段階の認証フローを使用します。まず永続的なAPIキーを短命のBearerトークンに交換し、次にそのトークンをすべてのAPIリクエストのAuthorizationヘッダーに渡します。

APIキーはアカウント > APIキーで確認できます。秘密にしてください — キーを持つ人は誰でもBearerトークンを取得し、あなたの代わりにアップロードできます。漏洩した場合は直ちに取り消し、新しいものを生成してください。

ステップ1 — Bearerトークンを取得する
POST/api/v1/auth/token

AuthorizationヘッダーにAPIキーを含めてトークンエンドポイントにPOSTリクエストを送信します。リクエストボディは不要です。

Authorization: ApiKey <your-api-key>
トークンレスポンス
{
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600
}
トークンの有効期間

Bearer トークンは発行から最大 3600 秒間有効で、期限切れになるまで各呼び出しで再利用できます。トークンが期限切れになったら、POST /api/v1/auth/token で新しいトークンを発行してください。後方互換性のため、すべてのレスポンスは現在のトークンを X-New-Token ヘッダーで返し続けます。

X-New-Token: <next-bearer-token>
単一リクエストでのログイン(2FA対応)
POST/api/v1/auth/login

ユーザー名またはメールアドレスとパスワードを1回のリクエストで認証し、bearerトークンを直接取得します。アカウントで2FAが有効な場合は、現在の認証アプリのコードをtotp_codeに(またはリカバリーコードをrecovery_codeに)含めてください。必要に応じてnew_api_keyをtrueに設定すると、同じレスポンスで新しい永続的なAPIキーも発行されます。

リクエストボディ
{
  "login":         "username or email",
  "password":      "your-password",
  "totp_code":     "123456",   // 2FAが有効な場合は必須(6桁)
  "recovery_code": "",         // totp_codeの代替
  "new_api_key":   false       // trueにすると新しいAPIキーも発行
}
トークンレスポンス
{
  "ok":         true,
  "token":      "<bearer-token>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "api_key":    "<new-api-key>"   // new_api_keyがtrueの場合のみ存在
}

bearerトークンは‎/api/v1/auth/tokenから取得したものとまったく同じように機能します。api_keyフィールドはnew_api_keyがtrueのときのみ返されます。一度しか表示されず、以前のキーを置き換えるため、すぐに保存してください。

例 — ログインして(任意で)新しいAPIキーを取得
# 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"])

ステップ2 — トレントをアップロードする

POST/api/v1/torrents

AuthorizationヘッダーにBearerトークンを含めたシンプルなJSON POSTリクエストを送信します。

リクエストボディ
フィールド必須説明
torrentstringはい.torrentファイルのBase64エンコードされた内容。
categorystringはいカテゴリスラグ: anime, manga, audio, literature, live, pictures, software, hentai, other。
namestringいいえトレントの表示名を上書きします。
sub_categorystringいいえサブカテゴリスラグ(例: raw, sub-audio)。選択したカテゴリに属している必要があります。
languagesstring[]いいえBCP 47言語コードの配列(例: en, ja)。
group_idstringいいえこのリリースを関連付けるグループのUUID(メンバーであること)。
descriptionstringいいえMarkdown形式のリリース説明(最大65535文字)。
commentstringいいえトレントに埋め込まれたコメントフィールドを上書きします。
is_privatebooleanいいえtrueに設定するとトレントのプライベートフラグを有効にします。
comments_enabledbooleanいいえこのトレントへのコメントを許可します。デフォルトはtrue(有効)です。
anime_idstringいいえこのトレントに紐付けるアニメエントリのUUID。GET /api/v1/anime/search でUUIDを取得してください。UUIDが既知のエントリと一致しない場合は400を返します。
announcestringいいえプライマリアナウンスURLを上書きまたは追加します。
trackersstringいいえ追加のトラッカーURLの改行区切りリスト。URL間の空行で新しいティアが作成されます。
testbooleanいいえtrueに設定するとドライランを実行します。リクエストは完全に検証されますが、トレントは保存されません。実際に送信する前にデータが正しいか確認するためにお使いください。
ドライラン / テストモード アップロードリクエストに "test": true を追加すると、実際にトレントを追加せずに成功するかどうかを確認できます。すべての検証ルールが適用されます(認証、カテゴリ検索、重複検出、禁止パターン、トラッカー要件)。そのため、レスポンスは実際の送信が返す内容を正確に反映します。成功時はトークンが引き続きローテーションされます。
ドライラン成功レスポンス — 200 OK
{
  "ok":           true,
  "test":         true,
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
利用可能な言語コード
ababAbkhazian
aaaaAfar
afafAfrikaans
akakAkan
sqsqAlbanian
amamAmharic
ararArabic
ar-001ar-001Arabic (Modern Standard)
ananAragonese
hyhyArmenian
asasAssamese
avavAvaric
aeaeAvestan
ayayAymara
azazAzerbaijani
bmbmBambara
babaBashkir
eueuBasque
bebeBelarusian
bnbnBengali
bhbhBihari
bibiBislama
bsbsBosnian
brbrBreton
bgbgBulgarian
mymyBurmese
yueyueCantonese
cacaCatalan
chchChamorro
ceceChechen
nynyChichewa
zhzhChinese
zh-HKzh-HKChinese (Hong Kong)
zh-Hanszh-HansChinese (Simplified)
zh-SGzh-SGChinese (Singapore)
zh-TWzh-TWChinese Traditional
cucuChurch Slavic
cvcvChuvash
kwkwCornish
cocoCorsican
crcrCree
hrhrCroatian
cscsCzech
dadaDanish
dvdvDivehi
nlnlDutch
nl-BEnl-BEDutch (Belgian)
dzdzDzongkha
enenEnglish
en-USen-USEnglish (US)
eoeoEsperanto
etetEstonian
eeeeEwe
fofoFaroese
fjfjFijian
filfilFilipino
fifiFinnish
frfrFrench
fr-CAfr-CAFrench (Canadian)
ffffFula
glglGalician
lglgGanda
kakaGeorgian
dedeGerman
de-ATde-ATGerman (Austrian)
elelGreek
gngnGuarani
guguGujarati
hthtHaitian Creole
hahaHausa
heheHebrew
hzhzHerero
hihiHindi
hohoHiri Motu
huhuHungarian
isisIcelandic
ioioIdo
igigIgbo
ididIndonesian
iaiaInterlingua
ieieInterlingue
iuiuInuktitut
ikikInupiaq
gagaIrish
ititItalian
jajaJapanese
jvjvJavanese
klklKalaallisut
knknKannada
krkrKanuri
ksksKashmiri
kkkkKazakh
kmkmKhmer
kikiKikuyu
rwrwKinyarwanda
rnrnKirundi
kvkvKomi
kgkgKongo
kokoKorean
kjkjKuanyama
kukuKurdish
kykyKyrgyz
loloLao
lalaLatin
lvlvLatvian
liliLimburgish
lnlnLingala
ltltLithuanian
luluLuba-Katanga
lblbLuxembourgish
mkmkMacedonian
mgmgMalagasy
msmsMalay
mlmlMalayalam
mtmtMaltese
gvgvManx
mimiMaori
mrmrMarathi
mhmhMarshallese
mnmnMongolian
nanaNauru
nvnvNavajo
ngngNdonga
neneNepali
ndndNorth Ndebele
seseNorthern Sami
nonoNorwegian
nbnbNorwegian Bokmål
nnnnNorwegian Nynorsk
ococOccitan
ororOdia
ojojOjibwe
omomOromo
ososOssetic
pipiPali
pspsPashto
fafaPersian
plplPolish
ptptPortuguese
pt-BRpt-BRPortuguese (Brazil)
papaPunjabi
ququQuechua
roroRomanian
rmrmRomansh
ruruRussian
smsmSamoan
sgsgSango
sasaSanskrit
scscSardinian
gdgdScottish Gaelic
srsrSerbian
sr-Latnsr-LatnSerbian (Latin)
snsnShona
iiiiSichuan Yi
sdsdSindhi
sisiSinhala
skskSlovak
slslSlovenian
sosoSomali
nrnrSouth Ndebele
ststSouthern Sotho
esesSpanish
es-419es-419Spanish (Latin America)
es-MXes-MXSpanish (Mexico)
susuSundanese
swswSwahili
ssssSwati
svsvSwedish
tltlTagalog
tytyTahitian
tgtgTajik
tataTamil
ttttTatar
teteTelugu
ththThai
boboTibetan
titiTigrinya
totoTongan
tstsTsonga
tntnTswana
trtrTurkish
tktkTurkmen
twtwTwi
ukukUkrainian
ururUrdu
ugugUyghur
uzuzUzbek
veveVenda
viviVietnamese
vovoVolapük
wawaWalloon
cycyWelsh
fyfyWestern Frisian
wowoWolof
xhxhXhosa
yiyiYiddish
yoyoYoruba
zazaZhuang
zuzuZulu
リクエスト例
# 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
成功レスポンス — 200 OK
{
  "ok":           true,
  "id":           "550e8400-e29b-41d4-a716-446655440000",
  "name":         "My Torrent Title",
  "info_hash_v1": "aabbccddeeff...",
  "info_hash_v2": null
}
エラーレスポンス
HTTPステータス意味
400リクエストボディが無効、または必須フィールドが不足しています。
401BearerトークンがないかT期限切れか、すでにローテーションされています。POST /api/v1/auth/tokenで再認証してください。
403アカウントがBAN、無効化、またはIPがブロックされています。
409重複トレント — 同一インフォハッシュがすでに存在します。
422torrentファイルが解析できないか、バリデーションに失敗しました(禁止パターン、無効な構造)。
429レート制限を超えました。ウィンドウがリセットされた後に再試行してください。
503サイトがメンテナンスモードまたは読み取り専用モードです。

レート制限

APIアップロードはWebインターフェースとは別の設定可能なレート制限が適用されます。制限とウィンドウはサイト管理者が設定します。レート制限を超えると、APIは429 Too Many Requestsを返します。制限はAPIキーごとに適用されます。

APIキーを秘密にしてください。 あなたのアカウントに完全なアップロードアクセスを付与します。漏洩した疑いがある場合はすぐに取り消して新しいものを生成してください。

torrent-builderを使ったtorrentファイルの生成

torrent-builderはlibtorrent-rasterbar上に構築されたオープンソースのCLIツールで、コマンドラインからBitTorrent v1、v2、hybrid形式の.torrentファイルを作成できます。AniRena upload APIと完璧に組み合わせられます — ローカルでファイルを生成し、そのままPOSTでトラッカーに送信してください。 cantalupo555/torrent-builder.

ソースコードからビルド

CMake >= 3.28.3とlibtorrent-rasterbar >= 2.0.11が必要です。リポジトリをクローンしてCMakeでビルドしてください:

# 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 .
主要フラグ
フィールド説明
--pathパッケージ化するファイルまたはディレクトリのパス(必須)。
--output出力する.torrentファイル名(必須)。
--versionBitTorrent形式 — 1 = v1、2 = v2、3 = hybrid(デフォルト: 3)。
--trackerトラッカーのアナウンスURLを追加します。複数のトラッカーを追加するにはフラグを繰り返してください。
--commenttorrentにメタデータのコメント文字列を埋め込みます。
--privateプライベートフラグを設定して、配布を指定したトラッカーのみに制限します。
--piece-sizeピースサイズ(KB単位、16〜32768)。自動選択するには設定しないままにしてください。
-iステップバイステップのインタラクティブ設定モードを起動します。
エンドツーエンドのワークフロー: ビルド -> アップロード

以下の例では、torrent-builderでhybrid torrentをビルドし、AniRena APIで認証してから1つのスクリプトで結果をアップロードします。

# 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"])

torrentメタデータの検索

POST/api/v1/torrents/search

ウェブサイトで使用できるものと同じ検索・フィルタオプションでトレントリストを取得するために、シンプルなJSON POSTリクエストを送信します。.torrentファイル自体は返されません — それには通常のダウンロードルートを使用してください。

# 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"])
検索パラメータ
フィールド必須説明
qstringいいえフリーテキスト検索。group:slug、group:"Name"、user:name プレフィックスをサポート。
categorystringいいえカテゴリスラッグ(例: "anime")。
sub_categorystringいいえサブカテゴリスラッグ(例: "raw")。
languagesstring[]いいえBCP 47言語コードの配列(例: en, ja)。
sortstringいいえソートフィールド: date(デフォルト)、size、seeders、leechers、completed、title。
orderstringいいえソート方向: desc(デフォルト)またはasc。
pageintegerいいえページ番号(1から開始、デフォルト1)。
per_pageintegerいいえページあたりの結果数、1〜250(デフォルト50)。
hide_adultbooleanいいえアダルトカテゴリのtorrentを除外。一般ユーザーはデフォルトでtrue。
show_deadbooleanいいえfalse(デフォルト)の場合、デッドトレント猶予期間より古く、アクティブなシーダーがいないトレントは除外されます。含める場合は true に設定してください。
レスポンス
{
  "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 — このトレントの削除されていないコメント数。

検索レート制限

検索リクエストは別途設定可能なレート制限の対象です(デフォルト: APIキーごとに60秒で60リクエスト)。超過した場合は429 Too Many Requestsが返されます。スタッフアカウントは免除されます。

トレントの詳細を取得

GET/api/v1/torrent/{id}

単一のトレントの完全なメタデータを取得します — マークダウンの説明、埋め込まれた .torrent コメント、ファイルごとのサイズを含むファイルリスト、トラッカー階層の完全なレイアウトなど、検索エンドポイントが省略するフィールドも含まれます。利用可能な場合、シーダーとリーチャーのライブカウントはトラッカーから読み取られます。

レスポンス
{
  "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 — 内部トラッカーからのライブカウントです。トラッカーストアにこの info hash のエントリがない場合、または到達できない場合は、両方とも 0 を報告します。

ext_seeders, ext_leechers — このトレントについてスクレイプされた単一の外部トラッカーから報告されたシーダーとリーチャーの最大数。同じ swarm を追跡するトラッカーは重複するため、合計ではなく最大値が使用されます。どのトラッカーにもこの info hash のスクレイプデータがない場合、両方とも 0 を報告します。

エラーレスポンス
HTTPステータス意味
400トレント ID は、ハイフン区切りの 36 文字の UUID、または 32 文字の素の 16 進文字列である必要があります。
401BearerトークンがないかT期限切れか、すでにローテーションされています。POST /api/v1/auth/tokenで再認証してください。
404トレントが見つかりません。
429レート制限を超えました。ウィンドウがリセットされた後に再試行してください。
503サイトがメンテナンスモードまたは読み取り専用モードです。

torrentのコメントを取得する

GET/api/v1/torrents/{id}/comments

torrentのコメントをページネーションで取得します。1ページあたりのコメント数はサーバーの.envファイルのCOMMENT_PER_PAGE設定で制御されます(デフォルト20)。コメントが有効になっているtorrentのみ結果を返します — それ以外はすべて403を返します。

クエリパラメータ
フィールド必須説明
pageintegerいいえページ番号(1から開始、デフォルト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"])
レスポンス
{
  "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
    }
  ]
}

コメント投稿者がBANされているか、コメントが削除されている場合、bodyフィールドは空文字列になります。author_bannedフラグがどちらの場合かを示します。

エラーレスポンス
HTTPステータス意味
401BearerトークンがないかT期限切れか、すでにローテーションされています。POST /api/v1/auth/tokenで再認証してください。
403このtorrentではコメントが無効になっています。
404torrentが見つかりません。
503サイトがメンテナンスモードまたは読み取り専用モードです。

アニメエントリーを検索

GET/api/v1/anime/search?q=<query>

タイトルでアニメエントリを検索してUUIDを取得します。UUIDはアップロード本文のanime_idとして渡すことで、アップロード時にトレントをアニメエントリに紐付けることができます。またはアップロード後にPUT /api/torrents/{id}/animeで使用することもできます。認証は不要です。トレント検索と同じレート制限が適用されます(デフォルト:IPごとに60秒あたり60リクエスト)。

# 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"])
クエリパラメータ
フィールド必須説明
qstringはいタイトル検索文字列(必須)。タイトルと同義語に対して照合されます。
pageintegerいいえページ番号(1から開始、デフォルト1)。
per_pageintegerいいえページあたりの結果数、1〜50(デフォルト10)。
レスポンス
{
  "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
    }
  ]
}

グループの一覧と取得

GET/api/v1/groups

公開グループ(有効かつロックなし)のページ付き一覧を返します。Bearerトークン認証が必要です。

GET/api/v1/groups/{id_or_slug}

数値IDまたはスラッグで単一の公開グループを返します。グループが無効またはロックされている場合は404を返します。

クエリパラメータ(一覧のみ)
フィールド必須説明
qstringいいえグループ名でフィルタ(任意、部分文字列一致)。
pageintegerいいえページ番号(デフォルト1)。
per_pageintegerいいえページあたりの結果数、1〜100(デフォルト20)。
sortstringいいえソート列: name | slug | members | torrents | created(デフォルト name)。
orderstringいいえソート方向: asc または desc(デフォルト asc)。
レスポンス(一覧)
{
  "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"
    }
  ]
}
レスポンス(単一)
{
  "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"
}
エラーレスポンス
HTTPステータス意味
401BearerトークンがないかT期限切れか、すでにローテーションされています。POST /api/v1/auth/tokenで再認証してください。
404グループが見つからないか、公開アクセスできません。
429レート制限を超えました。ウィンドウがリセットされた後に再試行してください。
503サイトがメンテナンスモードまたは読み取り専用モードです。

8. 寄付

AniRenaを支援し、サーバーやサービスのホスティングコストを賄うためのご寄付を、以下のいずれかの暗号資産ウォレットにお送りいただけます:

Bitcoinbc1qy2h3ddq6ak5damvnf4r5vu3ydehhxrcq8gllwn
Ethereum0xCbaFe03832F95F86AF2536d52710e78C63b62Cd3
Solana3ucetj2XDGHQg9PVRPMxerNi7c6kX7GJkjQNg9yjwGeg
LitecoinLbpt61yX3RjGtB1Ef8vgVz6Hr6baQsTjVk

大小を問わず、いただいたご支援はすべて大変ありがたく、AniRenaの運営維持に直接役立てられます。ご支援ありがとうございます!

9. ソフトウェア

AniRena Player は、このサイトでインデックスされた torrent から直接ビデオをストリーミング再生できる無料のデスクトップアプリです。ダウンロードの完了を待つ必要はありません。マグネットリンクを貼り付けるか .torrent ファイルを開くだけで、十分なデータが揃い次第すぐに再生が始まります。

両方のビルドは完全に単体で動作します — すべての依存ファイルは実行ファイル内にバンドルされています。インストーラーやランタイムのセットアップは不要。ダウンロードして実行するだけです。

Windows 自動更新
  • v0.3.2 latest AniRena-Player_0.3.2_x64-setup.exe · 43.4 MB (33 ダウンロード)
以前のバージョン
  • v0.3.1 AniRena-Player_0.3.1_x64-setup.exe · 43.9 MB (64 ダウンロード)
  • v0.3.0 AniRena-Player_0.3.0_x64-setup.exe · 43.7 MB (8 ダウンロード)
  • v0.2.9 AniRena-Player_0.2.9_x64-setup.exe · 43.5 MB (6 ダウンロード)
  • v0.2.8 AniRena-Player_0.2.8_x64-setup.exe · 43.5 MB (17 ダウンロード)
  • v0.2.7 AniRena-Player_0.2.7_x64-setup.exe · 43.5 MB (19 ダウンロード)
  • v0.2.6 AniRena-Player_0.2.6_x64-setup.exe · 43.4 MB (3 ダウンロード)
  • v0.2.5 AniRena-Player_0.2.5_x64-setup.exe · 43.4 MB (8 ダウンロード)

インストーラー (.exe)。アプリ内で自動更新されます。

macOS · Apple Silicon 自動更新
  • v0.3.2 latest AniRena-Player_0.3.2_aarch64.dmg · 45.7 MB (2 ダウンロード)

ディスクイメージ (.dmg)。Apple Silicon 搭載 Mac(M1 以降)向け。アプリ内で自動更新されます。

macOS · Intel 自動更新
  • v0.3.2 latest AniRena-Player_0.3.2_x64.dmg · 45.8 MB (2 ダウンロード)

ディスクイメージ (.dmg)。Intel 搭載 Mac 向け。アプリ内で自動更新されます。

Linux · AppImage 自動更新
  • v0.3.2 latest AniRena-Player_0.3.2_amd64.AppImage · 95.1 MB (8 ダウンロード)
以前のバージョン
  • v0.3.1 AniRena-Player_0.3.1_amd64.AppImage · 138.1 MB (19 ダウンロード)
  • v0.3.0 AniRena-Player_0.3.0_amd64.AppImage · 138.0 MB (4 ダウンロード)
  • v0.2.9 AniRena-Player_0.2.9_amd64.AppImage · 137.7 MB (35 ダウンロード)
  • v0.2.8 AniRena-Player_0.2.8_amd64.AppImage · 137.6 MB (23 ダウンロード)
  • v0.2.7 AniRena-Player_0.2.7_amd64.AppImage · 137.6 MB (20 ダウンロード)
  • v0.2.5 AniRena-Player_0.2.5_amd64.AppImage · 137.6 MB (18 ダウンロード)

ポータブルな単一ファイル、インストール不要。Linux 上でアプリ内自動更新に対応する唯一の形式です。

Debian / Ubuntu
  • v0.3.2 latest AniRena-Player_0.3.2_amd64.deb · 14.2 MB (2 ダウンロード)
以前のバージョン
  • v0.3.1 AniRena-Player_0.3.1_amd64.deb · 62.5 MB (4 ダウンロード)
  • v0.3.0 AniRena-Player_0.3.0_amd64.deb · 62.4 MB (3 ダウンロード)
  • v0.2.9 AniRena-Player_0.2.9_amd64.deb · 62.1 MB (4 ダウンロード)
  • v0.2.8 AniRena-Player_0.2.8_amd64.deb · 62.0 MB (26 ダウンロード)
  • v0.2.7 AniRena-Player_0.2.7_amd64.deb · 62.0 MB (12 ダウンロード)
  • v0.2.5 AniRena-Player_0.2.5_amd64.deb · 62.0 MB (11 ダウンロード)

インストール: sudo apt install ./<file>.deb — apt または再ダウンロードで更新します(アプリ内更新には非対応)。

Fedora / RHEL
  • v0.3.2 latest AniRena-Player_0.3.2-1_x86_64.rpm · 14.2 MB (1 ダウンロード)
以前のバージョン
  • v0.3.1 AniRena-Player_0.3.1-1_x86_64.rpm · 62.5 MB (3 ダウンロード)
  • v0.3.0 AniRena-Player_0.3.0-1_x86_64.rpm · 62.4 MB (2 ダウンロード)
  • v0.2.9 AniRena-Player_0.2.9-1_x86_64.rpm · 62.1 MB (23 ダウンロード)
  • v0.2.8 AniRena-Player_0.2.8-1_x86_64.rpm · 62.0 MB (5 ダウンロード)
  • v0.2.7 AniRena-Player_0.2.7-1_x86_64.rpm · 62.0 MB (8 ダウンロード)
  • v0.2.5 AniRena-Player_0.2.5-1_x86_64.rpm · 62.0 MB (7 ダウンロード)

インストール: sudo dnf install ./<file>.rpm — dnf または再ダウンロードで更新します(アプリ内更新には非対応)。

Android · arm64
  • v0.3.2 latest AniRena-Player_0.3.2_arm64.apk · 110.3 MB (71 ダウンロード)
以前のバージョン
  • v0.3.1 AniRena-Player_0.3.1_arm64.apk · 110.3 MB (62 ダウンロード)
  • v0.3.0 AniRena-Player_0.3.0_arm64.apk · 110.1 MB (8 ダウンロード)
  • v0.2.9 AniRena-Player_0.2.9_arm64.apk · 109.1 MB (12 ダウンロード)
  • v0.2.8 AniRena-Player_0.2.8_arm64.apk · 109.1 MB (22 ダウンロード)
  • v0.2.7 AniRena-Player_0.2.7_arm64.apk · 109.0 MB (17 ダウンロード)

64ビット ARM Android デバイス(最近のスマートフォン / タブレットの大半)にサイドロードしてください。新しい APK をダウンロードして更新します。

Android · arm7
  • v0.3.2 latest AniRena-Player_0.3.2_arm7.apk · 97.9 MB (4 ダウンロード)
以前のバージョン
  • v0.3.1 AniRena-Player_0.3.1_arm7.apk · 97.8 MB (15 ダウンロード)

32ビット ARM Android デバイス(古いスマートフォン / タブレット)にサイドロードしてください。新しい APK をダウンロードして更新します。

Android · x86_64
  • v0.3.2 latest AniRena-Player_0.3.2_x86_64.apk · 114.3 MB (7 ダウンロード)
以前のバージョン
  • v0.3.1 AniRena-Player_0.3.1_x86_64.apk · 114.3 MB (12 ダウンロード)
  • v0.3.0 AniRena-Player_0.3.0_x86_64.apk · 114.1 MB (4 ダウンロード)
  • v0.2.9 AniRena-Player_0.2.9_x86_64.apk · 113.1 MB (4 ダウンロード)
  • v0.2.8 AniRena-Player_0.2.8_x86_64.apk · 113.0 MB (9 ダウンロード)
  • v0.2.7 AniRena-Player_0.2.7_x86_64.apk · 113.0 MB (11 ダウンロード)

64ビット x86 Android デバイスまたはエミュレーターにサイドロードしてください。新しい APK をダウンロードして更新します。