Slay the Spire 2 (STS2) المطورون
ابنِ أدوات وبوتات ومحتوى ببيانات Spire Codex. كل شيء مجاني ومفتوح.
أداة التلميحات
أضف تلميحات تظهر عند التمرير على طريقة Wowhead للبطاقات والآثار والجرعات إلى أي موقع. وسم script واحد وبلا أي اعتماديات.
التثبيت
<script src="https://spire-codex.com/widget/spire-codex-tooltip.js"></script>الصيغة
[[Strike]]تلميح بطاقة (النوع الافتراضي)[[card:Bash]]بطاقة (صريح)[[relic:Burning Blood]]أثر[[potion:Fire Potion]]جرعة[[character:Ironclad]]الشخصية[[monster:Jaw Worm]]وحش[[power:Strength]]قدرة[[event:Neow]]حدث[[encounter:Lagavulin]]المواجهة[[enchantment:Sharp]]تعزيز[[keyword:Exhaust]]كلمة مفتاحية[[orb:Lightning]]جرم[[affliction:Bound]]عبء[[achievement:Minimalist]]إنجازJavaScript API
SpireCodex.scan()أعد فحص الصفحة بحثًا عن أنماط [[...]] جديدة (لتطبيقات SPA)SpireCodex.scan(element)افحص عنصر DOM محددًاأداة سجل التغييرات
ضمّن عارضًا مصغرًا وتفاعليًا لسجل التغييرات يعرض تاريخ تحديثات Spire Codex مع التبديل بين الإصدارات.
التثبيت
<div id="scx-changelog"></div>
<script src="https://spire-codex.com/widget/spire-codex-changelog.js"></script>data-version="1.0.4"اعرض إصدارًا محددًا (الافتراضي: الأحدث)REST API
قاعدة بيانات اللعبة كاملة متاحة عبر REST API عامة. لا حاجة إلى مصادقة: حصة الموقع لكل عنوان IP تغطي التصفح والطلبات العابرة، واستخدام API بلا مفتاح يحصل على المعدل الأساسي أدناه. للسكربتات والأدوات، أنشئ مفتاح API وأرسله في الترويسة X-API-Key. أنشئ واحدًا من صفحة ملفك الشخصي. المفتاح يحتسب طلباتك حسب الهوية لا حسب IP (ثابت عبر الشبكات، ولا يُشارك أبدًا مع مستخدمين آخرين خلف NAT نفسه) ويمنحك تتبعًا للاستخدام، ويُطبَّق حد فئته على كل نقطة وصول. تحمل الردود X-RateLimit-Remaining / X-RateLimit-Reset لتضبط وتيرة طلباتك.
حدود المعدل
| زيارات الموقع | 300/minute | لكل IP |
| بلا مفتاح API | 15/minute | |
| مستخدم مسجّل | 60/minute | أنشئ واحدًا من ملفك الشخصي |
| أكاديمي | 100/minute | يُمنح عند الطلب |
| المدفوع | 120/minute | الداعمون |
كل الحدود تُحتسب لكل نقطة وصول: الجدول هو حصتك على كل مسار، لا رصيد شامل. بعض نقاط الوصول الثقيلة لها ميزانيات خاصة تنطبق على كل طالب مهما كان مفتاحه (انظر تصدير الجولات أدناه، وملف ZIP للغة 10 في الساعة). راقب X-RateLimit-Remaining وتمهّل عند 429 (القيمة Retry-After محددة).
تصدير الجولات بالجملة
GET /api/exports/runs?limit=1000&start=2026-06-01T00:00:00Zيبث الجولات الرسمية بصيغة JSONL، جولة في كل سطر.
limit يحدّ حجم الصفحة، والصفحة الممتلئة تعيد مؤشرًا للصفحة التالية.start / end احصر النتائج في نافذة نصف مفتوحة لوقت الإرسال. أبقهما ثابتين أثناء التنقل بين الصفحات، فالمؤشر لا يتضمنهما.لنقطة الوصول هذه ميزانية خاصة من 120 رصيدًا في الساعة، يتشاركها أصحاب المفاتيح والمجهولون على السواء: الطلب المقسّم إلى صفحات يكلف رصيدًا واحدًا، والسحب غير المحدود (بلا limit) يكلف 60. لذا تعمل المزامنة المستمرة بأفضل شكل كسحوبات مقسّمة يفصل بينها نحو 30 ثانية. عند 429 التزم بقيمة Retry-After واستأنف بالمؤشر نفسه.
تحتاج إلى البيانات كاملة؟ الطلب بلا معاملات يحوّل إلى ملف ثابت يُعاد بناؤه مرة يومياً، /exports/runs-latest.jsonl.gz، بالشكل نفسه لكل سطر؛ ويذكر /api/exports/runs/manifest متى تم توليده وكم جولة يحتوي. كل سطر يحمل player_token، وهو معرف مستعار ثابت للحساب المرسِل، وقيمته null في الجولات المجهولة.
تريد تحديثًا واحدًا فقط؟ /api/exports/runs?version=v0.111.0 يعيد التوجيه إلى ملف ثابت خاص بالإصدار من خريطة versions في البيان، /exports/runs-v0.111.0.jsonl.gz؛ ومع limit و cursor يقسّم تحديثًا واحدًا إلى صفحات بدلًا من ذلك.
عنوان URL الأساسي
https://spire-codex.comقناة beta (محتوى غير مُصدَر من فرع beta على Steam): أضف هذا إلى أي نقطة وصول للكيانات: ?channel=beta. إصدار beta الحالي: /api/beta/version. الفرق الكامل مقارنة بـ main: /api/beta/diff.
The community stats pages were reorganized: /community-stats, /leaderboards/metrics, /charts, and the /meta page now live under /stats, /leaderboards/elo is /top-players, and run submission moved to /runs/submit. Old URLs redirect.
نقاط الوصول
وثائق تفاعلية كاملة (تُولَّد تلقائيًا من الخادم ومحدّثة دائمًا): /docs
الكيانات
التجميعات والاستعلامات
Languages
المجتمع والإرسالات
التنزيلات بالجملة
تعدد اللغات
أضف معامل الاستعلام هذا إلى أي نقطة وصول: ?lang=jpn. 17 لغة مدعومة:
eng, ara, deu, esp, fra, ind, ita, jpn, kor, pol, ptb, rus, spa, tha, tur, zhs, zht
بداية سريعة
cURL
curl https://spire-codex.com/api/cards?color=ironclad&rarity=RarePython
import requests
cards = requests.get("https://spire-codex.com/api/cards", params={"color": "ironclad"}).json()
for card in cards:
print(f"{card['name']} - {card['type']} ({card['rarity']})")JavaScript
const res = await fetch("https://spire-codex.com/api/relics?pool=ironclad");
const relics = await res.json();
console.log(relics.map(r => r.name));صورة البطاقة المصغّرة
أعد إنشاء مصغّرة البطاقة التي تعرضها اللعبة أثناء الجولة (المستخدمة في شاشتي سجل الجولات ونهاية اللعبة) في أي مشروع ويب. ست طبقات PNG مركّبة بخاصية CSS mask-image، بلا canvas وبلا WebGL، مجرد صور ملوّنة. الألوان مأخوذة مباشرة من كود اللعبة المفكّك: NTinyCard, CardPoolModel.DeckEntryCardColor.
معاينة



Ironclad / Attack / Common


Silent / Skill / Uncommon


Defect / Power / Rare


Necrobinder / Skill / Rare


Regent / Attack / Uncommon


Fool / Attack / Rare


Curse


Event


Questملفات الصور
كل ملفات PNG العشرة تُقدَّم مع تفعيل CORS، فقط ضع عنوان URL الأساسي قبل اسم كل ملف. كل صورة بحجم 128×128 بصيغة RGBA، بيضاء على خلفية شفافة (معدّة للتلوين عبر CSS).
https://spire-codex.com/static/images/ui/run_history_card/
card_back.png ← tinted by pool
desc_box.png ← dark description area (render at 25% opacity)
attack_portrait.png ← portrait per card type
attack_portrait_shadow.png
skill_portrait.png
skill_portrait_shadow.png
power_portrait.png
power_portrait_shadow.png
banner_shadow.png ← render at 60% opacity
banner.png ← tinted by rarityألوان المجموعة (ظهر البطاقة)
المصدر: CardPoolModel.DeckEntryCardColor. طابقها مع الخانة color التي يعيدها /api/cards.
ألوان الندرة (الشريط)
المصدر: NTinyCard.GetBannerColor. طابقها مع الخانة rarity.
وصفة HTML + CSS مبسّطة
اسم ملف الصورة: attack = بطاقات الهجوم, power = بطاقات القوة, skill = كل ما عدا ذلك (مهارة، حالة، عبء، …)
<div class="tiny-card" style="
--back: #D62000; /* pool color, Ironclad */
--banner: #FFDA36; /* rarity color, Rare */
position: relative;
width: 64px;
height: 64px;
">
<!-- 1. card back, tinted by pool -->
<div class="layer" style="
background-color: var(--back);
mask: url(https://spire-codex.com/static/images/ui/run_history_card/card_back.png) center/contain no-repeat;
-webkit-mask: url(https://spire-codex.com/static/images/ui/run_history_card/card_back.png) center/contain no-repeat;
"></div>
<!-- 2. description box -->
<img class="layer" src="https://spire-codex.com/static/images/ui/run_history_card/desc_box.png" style="opacity:.25">
<!-- 3. portrait shadow + portrait (attack/skill/power) -->
<img class="layer" src="https://spire-codex.com/static/images/ui/run_history_card/attack_portrait_shadow.png">
<img class="layer" src="https://spire-codex.com/static/images/ui/run_history_card/attack_portrait.png"
style="filter: brightness(.95) sepia(.15)">
<!-- 4. banner shadow + banner tinted by rarity -->
<img class="layer" src="https://spire-codex.com/static/images/ui/run_history_card/banner_shadow.png" style="opacity:.6">
<div class="layer" style="
background-color: var(--banner);
mask: url(https://spire-codex.com/static/images/ui/run_history_card/banner.png) center/contain no-repeat;
-webkit-mask: url(https://spire-codex.com/static/images/ui/run_history_card/banner.png) center/contain no-repeat;
"></div>
</div>
<style>
.tiny-card .layer {
position: absolute; inset: 0;
width: 100%; height: 100%;
object-fit: contain;
}
</style>مكوّن React
نسخة React جاهزة للاستخدام. المصدر: TinyCard.tsx
import TinyCard from "./TinyCard";
// Feed in the three fields from /api/cards:
<TinyCard color="ironclad" type="Attack" rarity="Rare" className="w-16 h-16" />صور البطاقات الكاملة
كل بطاقة من /api/cards تتضمن رابطين جاهزين للبطاقة الكاملة كما ترسمها اللعبة (الإطار والرسم والشريط والنص، تمامًا كما تظهر داخل اللعبة). البطاقات العتيقة صور webp متحركة.
image_url_card— البطاقة الأساسية. تكون null للبطاقة الوحيدة التي لا صورة لها (mad_science)، وفي هذه الحالة استخدم image_url (رسم البطاقة) بديلًا.image_url_card_upg— البطاقة المرقّاة. تكون null إذا لم يكن للبطاقة ترقية.
// e.g. /api/cards/bash
{
"id": "BASH",
"image_url": "/static/images/cards/bash.webp", // portrait art
"image_url_card": "https://cdn.spire-codex.com/cards-full/stable/bash.webp",
"image_url_card_upg": "https://cdn.spire-codex.com/cards-full/stable/bash_upg.webp"
}الصور المترجمة موجودة في مجلد فرعي للغة، مثلًا: cards-full/stable/jpn/bash.webp. كل اللغات الـ15 متاحة.
صور البطاقات مع التعزيزات
كل بطاقة تُرسم أيضًا مع كل تعزيز يمكن أن تحمله وفق القواعد، تمامًا كما ترسمها معاينة التعزيز داخل اللعبة (الشارة والمقدار ونص البطاقة المضاف). تتبع الروابط نمطًا واحدًا:
https://cdn.spire-codex.com/cards-full/stable/ench/{enchantment}/{card}.webp // English, base
https://cdn.spire-codex.com/cards-full/stable/ench/{enchantment}/{card}_upg.webp // English, upgraded
https://cdn.spire-codex.com/cards-full/stable/{lang}/ench/{enchantment}/{card}.webp // localized
// e.g. Anger with Corrupted, in Japanese:
https://cdn.spire-codex.com/cards-full/stable/jpn/ench/corrupted/anger.webp{enchantment}/{card}: معرّفات بأحرف صغيرة من /api/enchantments و /api/cards (مثل sharp، corrupted، sown).- لا توجد إلا التركيبات الصالحة بين البطاقات والتعزيزات (التصدير يستخدم قواعد اللعبة نفسها)، لذا التركيبة غير الصالحة تعيد 404. الخانتان card_type / applicable_to في /api/enchantments تبيّنان البطاقات المؤهلة.
- النسختان الأساسية والمرقّاة متاحتان لكل تركيبة، بكل اللغات الـ14، مع نص التعزيز مترجمًا بالكامل.
تصدير البيانات
نزّل كل بيانات اللعبة في أرشيف ZIP واحد. يحتوي كل أرشيف على ملفات JSON لكل نوع كيان (البطاقات والآثار والوحوش والقوى وغيرها).
وثائق API التفاعلية
وثائق Swagger/OpenAPI كاملة مع إمكانية تجربة الطلبات.
افتح وثائق API →مفتوح المصدر
Spire Codex مفتوح المصدر. مسار استخراج البيانات و API والواجهة كلها متاحة على GitHub.
اعرض على GitHub →