1. תחילת העבודה

AniRena הוא אינדקס טורנטים המתמקד באנימה, מנגה, שמע ומדיה קשורה. ניתן לדפדף ולהוריד טורנטים ללא חשבון. נדרש חשבון להעלאת טורנטים, פרסום בקבוצות או שימוש ב-API.

סרגל הניווט בחלק העליון מספק גישה לאזורים הראשיים של האתר:

  • דף הבית — דף הרשימה והחיפוש של טורנטים.
  • העלאה — שלח טורנט חדש (נדרשת כניסה).
  • מדריך — דף זה.
  • סטטיסטיקות — סטטיסטיקות כלל-אתר (טורנטים, peers, העלאות לאורך זמן).
  • קבוצות — ספריית קבוצות שחרור.
  • RSS — עדכון RSS של העלאות אחרונות, ניתן לסינון לפי קטגוריה.

תפריט החשבון שלך (פינה ימנית עליונה בעת כניסה) פותח לוח פרופיל בו ניתן לשנות הגדרות, לנהל אפשרויות אבטחה ולגשת למפתח ה-API שלך.

2. גלישה וחיפוש

הדף הראשי מפרט את כל הטורנטים לפי תאריך העלאה. השתמש בסרגל החיפוש בחלק העליון לסינון תוצאות.

חיפוש בסיסי

הקלד מילים כלשהן בסרגל החיפוש ולחץ Enter (או לחץ על סמל החיפוש). התוצאות מדורגות לפי רלוונטיות כאשר שאילתה פעילה.

אופרטורי חיפוש

ניתן לשלב את האופרטורים הבאים עם שאילתה רגילה:

אופרטורדוגמהאפקט
user:"name"user:"SubsPlease"הצג רק טורנטים שהועלו על ידי אותו משתמש.

לחיצה על שם מעלה ברשימת הטורנטים מריצה אוטומטית חיפוש משתמש עבורך.

קטגוריות ותת-קטגוריות

השתמש בבורר הקטגוריות (סמל הרשת ליד סרגל החיפוש) להגבלת תוצאות לקטגוריה אחת. הקטגוריות הזמינות הן:

  • אנימה
  • מנגה/מאנהווה/קומיקס
  • שמע
  • ספרות
  • לייב אקשן
  • תמונות
  • תוכנה
  • הנטאי
  • אחר

לכל קטגוריה יש תת-קטגוריות (לדוגמה אנימה ל-RAW, Sub/Audio, קליפ מוזיקלי) ניתנות לבחירה בתוך מודל הקטגוריה.

מיון וסינון

כותרות העמודות ברשימת הטורנטים ניתנות ללחיצה למיון לפי אותה עמודה (עולה או יורד). עמודות מיון זמינות: תאריך, שם, גודל, הורדות שהושלמו. שימו לב: ה-seeders וה-leechers הם ערכים חיים המגיעים מ-Redis ולא ניתן להשתמש בהם למיון.

פילטר שפה

השתמש בבורר השפות (סמל דגל) להצגת רק טורנטים שתויגו בשפה ספציפית.

עדכון RSS

עדכון ה-RSS ב-/rss מספק את ההעלאות האחרונות. הוסף ?category=anime (או כל slug קטגוריה אחר) לסינון העדכון. רוב לקוחות הטורנט תומכים בהורדה אוטומטית דרך RSS ישירות מ-URL זה.

3. הורדת טורנטים

לחץ על כל שם טורנט לפתיחת לוח הפרטים שלו. משם ניתן:

  • הורד .torrent — שומר את קובץ ה-.torrent ישירות. כתובת ה-URL הישירה היא /torrents/{id}.torrent
  • קישור מגנטי — נפתח ישירות בלקוח הטורנט שלך דרך פרוטוקול URI מגנטי. ה-URL הוא /torrents/{id}/magnet

לוח הפרטים גם מציג את תיאור הטורנט, רשימת קבצים, רשימת trackers וספירות seeders/leechers.

קישורי הורדה ישנים

קישורי ההורדה הישנים של AniRena עדיין נתמכים ומפנים אוטומטית לקובץ ה-.torrent הנכון באמצעות המזהה הישן: /dl/{old_id}

לקוחות BitTorrent מומלצים

כל לקוח BitTorrent מודרני עובד. הלקוחות להלן מומלצים ותומכים באופן מלא ב-BitTorrent v2 / torrent היברידיים:

qBittorrent בדף ההורדה, לחץ על אפשרויות הורדה נוספות ובחר את הגרסה המסומנת lt20 (libtorrent 2.0). תוכנית ההתקנה המוגדרת כברירת מחדל משתמשת ב-libtorrent 1.2 שאינה תומכת ב-torrent v2 טהור.v2 נתמך
PicoTorrent לקוח Windows קל משקל עם תמיכה מקורית ב-BitTorrent v2 מהקופסה.v2 נתמך
BiglyBT לקוח חוצה-פלטפורמות עשיר בתכונות המבוסס על Azureus/Vuze עם תמיכה מלאה ב-v2.v2 נתמך

4. יצירת חשבון

הרשמה

לחץ על הרשמה בסרגל הניווט. בחר שם משתמש, ספק כתובת אימייל והגדר סיסמה (אורך מינימלי נאכף). עליך לקרוא ולקבל את תנאי האתר לפני יצירת החשבון שלך.

אימות אימייל

לאחר ההרשמה, נשלח אימייל אימות לכתובתך. לחץ על הקישור באימייל כדי להפעיל את חשבונך. אם לא קיבלת, השתמש בקישור הפעל את חשבונך בדף הכניסה לבקשת קוד חדש.

שחזור סיסמה

אם שכחת את הסיסמה, לחץ על שכחת סיסמה בדף הכניסה והזן את כתובת האימייל שלך. קישור שחזור יישלח אליך. הקישור הוא לשימוש חד-פעמי ופג תוקף לאחר זמן קצר.

5. העלאת טורנטים

נווט אל העלאה בסרגל הניווט. עליך להיות מחובר עם חשבון פעיל ולא חסום. לדף ההעלאה יש שתי לשוניות:

לשונית העלאה — שלח קובץ .torrent קיים

גרור-ושחרר או בחר קובץ .torrent. לאחר טעינה, מלא את השדות:

שדהחובהתיאור
קובץ טורנטכןקובץ ה-.torrent להעלאה.
שםלאעקוף את שם התצוגה של הטורנט. אם נשאר ריק, נעשה שימוש בשם המוטמע בקובץ הטורנט.
קטגוריהכןקטגוריית התוכן (אנימה, מנגה, שמע, וכו').
תת-קטגוריהלאסוג ספציפי יותר בתוך הקטגוריה (לדוגמה RAW, Sub/Audio).
שפותלאתג שפה אחד או יותר המתאר את שפת התוכן.
קבוצהלאשייך שחרור זה לקבוצה שאתה חבר בה.
תיאורלאתיאור מעוצב ב-Markdown המוצג בדף פרטי הטורנט (מקסימום 65535 תווים).
פרטילאמגדיר את דגל הפרטי בטורנט, מבטל DHT/PEX. שימושי לטורנטים של tracker בלבד.
כתובת URL של Announceלאעקוף או הוסף את ה-announce URL הראשי של ה-tracker.
Trackers נוספיםלאנקרא מקובץ הטורנט. לא ניתן לשינוי בעת ההעלאה — השתמש בכרטיסיית יצירה אם ברצונך להתאים אישית את רשימת ה-Trackers.
הערהלאעקוף את שדה ההערה של הטורנט המוטמע בקובץ.
דרישת Tracker של AniRena

הטורנט שלך חייב לכלול לפחות כתובת URL אחת של Tracker של AniRena ברשימת ה-Announce שלו (בכל tier). האתר בודק זאת בעת ההעלאה ויסרב לטורנטים שאינם כוללים Tracker של AniRena. אם יצרת את הטורנט מבלי להוסיף תחילה את ה-Tracker של AniRena, העלה אותו ואז הורד אותו מחדש מהאתר — הקובץ שיורד יכלול אוטומטית את ה-Trackers הנכונים.

לשונית יצירה — בנה טורנט חדש

לשונית היצירה מאפשרת לך ליצור .torrent חדש מאפס על ידי ציון נתיבי קבצים, כתובות URL של tracker ופרמטרי טורנט אחרים ישירות בדפדפן. הטורנט המתקבל נשלח עם אותם שדות מטא-נתונים כמו לעיל.

מודרציה

ההעלאות נבדקות אוטומטית מול רשימת תבניות תוכן חסומות (שמות, שמות קבצים, תיאורים). טורנטים שתואמים תבנית חסומה יידחו. טורנטים כפולים (אותו info hash) גם נדחים.

6. החשבון שלך

לחץ על שם המשתמש שלך בפינה הימנית העליונה לפתיחת לוח הפרופיל. הוא מאורגן בחלקים שניתן לכווץ:

הגדרות

שנה את ערכת הנושא של ה-UI, גודל הגופן, ערכת הצבעים, שפת הממשק והעדפות התצוגה הקשורות לטורנטים. השינויים נשמרים אוטומטית.

סיסמה

הזן את הסיסמה הנוכחית שלך ואת הסיסמה החדשה פעמיים. קוד אימות נשלח לכתובת האימייל הרשומה שלך ויש להזינו לאישור השינוי. אם אימות דו-שלבי מופעל, גם קוד ה-TOTP שלך נדרש.

אימות דו-שלבי (2FA)

הפעל אימות דו-שלבי מבוסס TOTP באמצעות כל אפליקציית מאמת (לדוגמה Google Authenticator, Aegis, Bitwarden). בעת הפעלת 2FA:

  1. סרוק את קוד ה-QR (או הזן את הסוד ידנית) באפליקציית המאמת שלך.
  2. הזן את הקוד בן 6 הספרות המוצג באפליקציה שלך לאישור ההגדרה.
  3. שמור את קודי השחזור המוצגים — אלו הם קודים חד-פעמיים לשחזור הגישה אם תאבד את המכשיר שלך.

כדי להשבית 2FA, הזן את קוד ה-TOTP הנוכחי שלך ואשר.

סשנים פעילים

הצג את כל סשני הכניסה הפעילים כרגע כולל דפדפן, מערכת הפעלה, כתובת IP ושעת הפעילות האחרונה. לחץ על בטל בכל סשן שאינך מכיר. ניתן גם לבטל את כל הסשנים בבת אחת לניתוק מכל המכשירים.

מפתח API

צור מפתח API אישי המשמש להעלאת טורנטים בצורה תכנותית דרך API של AniRena. לחץ על צור מפתח ליצירת אחד — המפתח המלא מוצג פעם אחת מיד לאחר היצירה. אחסן אותו בבטחה; הוא לא יוצג שוב במלואו. השתמש ב'בטל' לביטול המפתח לצמיתות.

מחק חשבון

בקשת מחיקת חשבון מתחילה תקופת חסד של 30 יום. חשבונך מושבת מיד ונמחק לצמיתות לאחר 30 יום. ניתן לבטל את המחיקה בכל עת בתוך חלון זה על ידי כניסה ולחיצה על בטל מחיקה.

7. API של AniRena

AniRena מספק API JSON המאפשר העלאת טורנטים בצורה תכנותית באמצעות מפתח API אישי. ה-API מחיל את אותן כללים כמו ממשק האינטרנט: בדיקות חסימה, מגבלות קצב והגבלות מצב אתר חלים. כל העלאת API מתועדת ביומן הביקורת.

אימות

ה-API משתמש בתהליך אימות דו-שלבי. תחילה החלף את מפתח ה-API הקבוע שלך ב-Bearer Token קצר מועד, ולאחר מכן העבר את ה-Token הזה בכותרת Authorization של כל בקשת API.

מפתח ה-API שלך זמין תחת החשבון שלך > מפתח API. שמור עליו בסוד — כל מי שיש לו את המפתח יכול לקבל Bearer Tokens ולהעלות בשמך. אם נפרץ, בטל אותו מיד וצור חדש.

שלב 1 — קבל Bearer Token
POST/api/v1/auth/token

שלח בקשת POST לנקודת הקצה של ה-Token עם מפתח ה-API שלך בכותרת Authorization. אין צורך בגוף בקשה.

Authorization: ApiKey <your-api-key>
תגובת ה-Token
{
  "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>
התחברות בבקשה אחת (עם אימות דו-שלבי)
POST/api/v1/auth/login

התחברו עם שם המשתמש או האימייל והסיסמה בבקשה אחת וקבלו אסימון Bearer ישירות. אם באשבון שלכם מופעל אימות דו-שלבי, כללו את קוד המאמת הנוכחי ב-totp_code (או קוד שחזור ב-recovery_code). באופן אופציונלי הגדירו את new_api_key ל-true כדי ליצור גם מפתח API קבוע חדש לחלוטין באותה תגובה.

גוף הבקשה
{
  "login":         "username or email",
  "password":      "your-password",
  "totp_code":     "123456",   // נדרש אם אימות דו-שלבי מופעל (6 ספרות)
  "recovery_code": "",         // חלופה ל-totp_code
  "new_api_key":   false       // הגדירו true כדי ליצור גם מפתח API חדש
}
תגובת ה-Token
{
  "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 — העלה Torrent

POST/api/v1/torrents

שלח בקשת POST JSON פשוטה עם Bearer Token בכותרת Authorization.

גוף הבקשה
שדהסוגחובהתיאור
torrentstringכןתוכן קובץ ה-.torrent מקודד ב-Base64.
categorystringכןSlug קטגוריה: anime, manga, audio, literature, live, pictures, software, hentai, other.
namestringלאעקוף את שם התצוגה של הטורנט.
sub_categorystringלאSlug תת-קטגוריה (לדוגמה raw, sub-audio). חייב להשתייך לקטגוריה שנבחרה.
languagesstring[]לאמערך של קודי שפה BCP 47 (לדוגמה en, ja).
group_idstringלאUUID של קבוצה שאתה חבר בה לשיוך שחרור זה אליה.
descriptionstringלאתיאור שחרור מעוצב ב-Markdown (מקסימום 65535 תווים).
commentstringלאעקוף את שדה ההערה המוטמע של הטורנט.
is_privatebooleanלאהגדר ל-true כדי להפעיל את דגל הפרטי בטורנט.
comments_enabledbooleanלאאפשר תגובות לטורנט זה. ברירת המחדל היא true (מופעל).
anime_idstringלאUUID של רשומת אנימה לקישור לטורנט זה. קבל את ה-UUID דרך GET /api/v1/anime/search. מחזיר 400 אם ה-UUID אינו תואם לאף רשומה מוכרת.
announcestringלאעקוף או הוסף את ה-announce URL הראשי.
trackersstringלארשימת כתובות URL של tracker נוספות מופרדות בשורה חדשה. שורה ריקה בין URLs יוצרת שכבת tracker חדשה.
testbooleanלאהגדר ל-true לביצוע ריצת בדיקה: הבקשה מאומתת במלואה אך הטורנט אינו נשמר. השתמש בזה לאימות שהנתונים שלך נכונים לפני השליחה האמיתית.
ריצת בדיקה / מצב בדיקה הוסף "test": true לכל בקשת העלאה כדי לבדוק אם היא תצליח מבלי להוסיף את הטורנט בפועל. כל כללי האימות חלים — אימות זהות, חיפוש קטגוריה, זיהוי כפילויות, דפוסים אסורים, דרישות Tracker — כך שהתגובה משקפת בדיוק מה תחזיר שליחה אמיתית. הטוקן עדיין מתחלף בהצלחה.
תגובת הצלחה לריצת בדיקה — 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 Token חסר, פג תוקף או כבר סובב. אמת מחדש דרך POST /api/v1/auth/token.
403חשבון חסום, מושבת או IP חסום.
409טורנט כפול — אותו info hash כבר קיים.
422קובץ הטורנט לא ניתן לניתוח או נכשל באימות (תבנית חסומה, מבנה לא תקין).
429מגבלת קצב חרגה. נסה שוב לאחר איפוס החלון.
503האתר במצב תחזוקה או קריאה בלבד.

מגבלת קצב

העלאות API כפופות למגבלת קצב ניתנת להגדרה נפרדת מממשק האינטרנט. המגבלה והחלון מוגדרים על ידי מנהל האתר. כאשר מגבלת הקצב חרגה, ה-API מחזיר 429 Too Many Requests. המגבלה היא לפי מפתח API.

שמור את מפתח ה-API שלך בסוד. הוא מעניק גישת העלאה מלאה תחת חשבונך. בטל וצור מחדש מיד אם אתה חושד שנחשף.

יצירת קבצי טורנט עם torrent-builder

torrent-builder הוא כלי CLI בקוד פתוח הבנוי על libtorrent-rasterbar המאפשר ליצור קבצי .torrent של BitTorrent v1, v2 ו-hybrid משורת הפקודה. הוא משתלב בצורה מושלמת עם 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 הפלט (חובה).
--versionפורמט BitTorrent — 1 = v1, 2 = v2, 3 = hybrid (ברירת מחדל: 3).
--trackerהוסף URL הכרזה של טראקר. חזור על הדגל להוספת מספר טראקרים.
--commentהטמע מחרוזת הערת מטא-נתונים בטורנט.
--privateהגדר את דגל הפרטיות להגבלת ההפצה לטראקרים המפורטים בלבד.
--piece-sizeגודל חלק ב-KB (16-32768). השאר ללא הגדרה לבחירה אוטומטית.
-iהפעל מצב תצורה אינטראקטיבי שלב אחר שלב.
זרימת עבודה מקצה לקצה: בנייה -> העלאה

הדוגמאות שלהלן בונות טורנט hybrid עם torrent-builder, מאמתות לאחר מכן מול AniRena API ומעלות את התוצאה בסקריפט אחד.

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

חיפוש מטא-נתוני טורנט

POST/api/v1/torrents/search

שלח בקשת POST JSON פשוטה לאחזור רשימות Torrent עם אותן אפשרויות החיפוש והסינון הזמינות באתר. קובץ ה-.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:"שם", user:שם.
categorystringלאSlug קטגוריה (לדוגמה "anime").
sub_categorystringלאSlug תת-קטגוריה (לדוגמה "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לאהסתר טורנטים מקטגוריית מבוגרים. ברירת המחדל היא 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 — מספר התגובות שלא נמחקו בטורנט זה.

מגבלת קצב חיפוש

בקשות חיפוש כפופות למגבלת קצב ניתנת להגדרה נפרדת (ברירת מחדל 60 בקשות לכל 60 שניות לפי מפתח API). חריגה מהמגבלה מחזירה 429 Too Many Requests. חשבונות צוות פטורים.

קבל פרטי טורנט

GET/api/v1/torrent/{id}

שליפת המטא-נתונים המלאים של טורנט יחיד — כולל שדות שנקודת קצה של החיפוש משמיטה כגון תיאור Markdown, הערת .torrent מוטמעת, רשימת קבצים עם גודל לכל קובץ ומבנה מלא של שכבות הטראקרים. ספירות חיות של seeders ו-leechers נקראות מהטראקר כאשר הן זמינות.

תגובה
{
  "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 — ספירות חיות מהטראקר הפנימי; שניהם מדווחים על 0 כאשר במאגר הטראקר אין רשומה ל-info hash זה או שהוא לא נגיש.

ext_seeders, ext_leechers — מספר הזורעים והיונקים הגבוה ביותר שמדווח על ידי כל טראקר חיצוני בודד שנסרק עבור טורנט זה. טראקרים העוקבים אחר אותו נחיל חופפים, ולכן משתמשים במקסימום במקום בסכום; שניהם מדווחים על 0 כאשר אין לאף טראקר נתוני סריקה עבור info hash זה.

תגובות שגיאה
סטטוס HTTPמשמעות
400מזהה הטורנט חייב להיות UUID של 36 תווים עם מקפים או מחרוזת הקסדצימלית נטו של 32 תווים.
401Bearer Token חסר, פג תוקף או כבר סובב. אמת מחדש דרך POST /api/v1/auth/token.
404הטורנט לא נמצא.
429מגבלת קצב חרגה. נסה שוב לאחר איפוס החלון.
503האתר במצב תחזוקה או קריאה בלבד.

אחזור תגובות טורנט

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

אחזר תגובות מוחלקות לטורנט. מספר התגובות לעמוד נשלט על ידי הגדרת COMMENT_PER_PAGE בקובץ ה-.env של השרת (ברירת מחדל 20). רק טורנטים עם תגובות מופעלות יחזירו תוצאות — כל השאר מחזירים 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
    }
  ]
}

שדה ה-body הוא מחרוזת ריקה כאשר מחבר התגובה חסום או שהתגובה נמחקה. דגל ה-author_banned מציין איזה מקרה חל.

תגובות שגיאה
סטטוס HTTPמשמעות
401Bearer Token חסר, פג תוקף או כבר סובב. אמת מחדש דרך POST /api/v1/auth/token.
403תגובות מושבתות לטורנט זה.
404הטורנט לא נמצא.
503האתר במצב תחזוקה או קריאה בלבד.

חיפוש ערכי אנימה

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

חפש רשומות אנימה לפי כותרת כדי לקבל את ה-UUID שלהן. ניתן להעביר את ה-UUID כ-anime_id בגוף ההעלאה כדי לקשר טורנט לרשומת אנימה בזמן ההעלאה, או להשתמש בו עם PUT /api/torrents/{id}/anime לאחר ההעלאה. לא נדרשת אימות. כפוף לאותה הגבלת קצב כמו חיפוש טורנט (ברירת מחדל 60 בקשות ב-60 שניות לכל 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"])
פרמטרי שאילתה
שדהסוגחובהתיאור
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 token.

GET/api/v1/groups/{id_or_slug}

מחזיר קבוצה ציבורית בודדת לפי מזהה מספרי או slug. מחזיר 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 Token חסר, פג תוקף או כבר סובב. אמת מחדש דרך POST /api/v1/auth/token.
404הקבוצה לא נמצאה או אינה נגישה לציבור.
429מגבלת קצב חרגה. נסה שוב לאחר איפוס החלון.
503האתר במצב תחזוקה או קריאה בלבד.

8. תרומות

אם ברצונך לתמוך ב-AniRena ולסייע בכיסוי עלויות אירוח השרתים והשירותים שלנו, אתה מוזמן לשלוח תרומה לאחד מארנקי הקריפטו הבאים:

Bitcoinbc1qy2h3ddq6ak5damvnf4r5vu3ydehhxrcq8gllwn
Ethereum0xCbaFe03832F95F86AF2536d52710e78C63b62Cd3
Solana3ucetj2XDGHQg9PVRPMxerNi7c6kX7GJkjQNg9yjwGeg
LitecoinLbpt61yX3RjGtB1Ef8vgVz6Hr6baQsTjVk

כל תרומה, גדולה כקטנה, מוערכת מאוד ומיועדת ישירות להמשך פעילות AniRena. תודה על תמיכתך!

9. תוכנה

‏AniRena Player היא אפליקציית שולחן עבודה חינמית שמאפשרת לך להזרים וידאו ישירות מטורנטים המאונדקסים באתר זה — מבלי להמתין לסיום ההורדה המלאה. פשוט הדבק קישור מגנט או פתח קובץ ‎.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) למחשבי Mac עם Apple Silicon (M1 ואילך). מתעדכן בעצמו בתוך האפליקציה.

macOS · Intel עדכון אוטומטי

קובץ דיסק (.dmg) למחשבי Mac עם Intel. מתעדכן בעצמו בתוך האפליקציה.

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.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 הורדות)

התקנה ידנית במכשירי Android ARM 64-ביט (רוב הטלפונים / הטאבלטים המודרניים). מתעדכן על ידי הורדת APK חדש.

Android · arm7
גרסאות ישנות
  • v0.3.1 AniRena-Player_0.3.1_arm7.apk · 97.8 MB (15 הורדות)

התקן ידנית במכשירי Android מסוג ARM 32 סיביות (טלפונים / טאבלטים ישנים יותר). מתעדכן על ידי הורדת 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 הורדות)

התקנה ידנית במכשירי Android x86 64-ביט או באמולטורים. מתעדכן על ידי הורדת APK חדש.