Okuma ve varlık yolları¶
Bir medya okuma yolu, tek bir yolu tek bir dosyaya çözümler ve o dosyayı döndürür. Görsel varlık ve saklanan nesne yolları, örnek keşfinin endpoints.media olarak yayımladığı temel URL'nin (https://tebhos.com/api/v1) altında bulunur. Medya vekili yolları sitenin kökünde (https://tebhos.com) bulunur.
Ortak yol sözleşmesi¶
Metotlar ve Yetkilendirme, buradaki her yolun kullandığı sözleşmeyi tanımlar. Buradaki hiçbir yolda istek sayısına dayalı hız sınırı yoktur. Medya yollarında hangi aralıkların tanındığını Bayt aralıkları tanımlar.
Ortak yanıtlar¶
endpoints.media altındaki her yol, kendi tablosundakilere ek olarak bu durumları da üretebilir. Hata gövdeleri Yanıtlar ve sınırlar bölümünde açıklanır.
| Durum | Koşul |
|---|---|
| 404 | Nesne mevcut değil |
| 416 | İstenen aralık karşılanamıyor |
| 422 | Nesne bir görsel ama çözülemedi veya yeniden kodlanamadı |
| 502 | Nesne deposu okunamadı |
Görsel varlık sözleşmesi¶
Görsel varlık, TEBHOS'un istenen boyut ve biçimde sunduğu saklanmış bir resimdir; örneğin kullanıcı avatarı veya sunucu simgesi. API, varlığın hash değerini sahip kaynak üzerinde döndürür (örneğin bir kullanıcıdaki avatar veya bir sunucudaki icon). URL; varlık sınıfını, sahibin kimliğini, bu hash'i ve bir dosya uzantısını birleştirir:
Hash'i tam olarak API'nin döndürdüğü şekilde kullanın. Görselden kendiniz bir hash hesaplamayın. a_ ile başlayan bir hash hareketli bir varlığı belirtir; önek hash'in parçasıdır ve URL'de korunmalıdır.
null bir hash, kaynağın özel bir görseli olmadığı anlamına gelir. Bu durumda TEBHOS'un sunacağı bir şey yoktur: istemciler varsayılan bir avatarı veya yer tutucuyu yerel olarak çizer ve medya isteği yapmaz.
Yol kuralları:
owner_idbir tamsayı kimlik olmalıdır; aksi hâlde 400.extçıktı biçimini seçer vewebp,png,jpg,jpegveyagif(büyük/küçük harf duyarsız) olmalıdır; aksi hâlde 400. Uzantısız bir dosya adı saklanan biçimi döndürür.- Hash, isteğe bağlı
a_önekinden sonra 1–64 ASCII harf ve rakamdan oluşmalıdır; aksi hâlde 400.
| Varlık sınıfı | owner_id |
Boyut sınıfı |
|---|---|---|
avatars |
Kullanıcı kimliği (webhook avatarları için webhook kimliği, bot avatarları için bot kullanıcı kimliği de olur) | Simge |
banners |
Kullanıcı kimliği | Afiş |
server-icons |
Sunucu kimliği | Simge |
server-banners |
Sunucu kimliği | Afiş |
server-invite-bg |
Sunucu kimliği | Afiş |
server-embed-bg |
Sunucu kimliği | Afiş |
live-room-banners |
Afişi yükleyen kullanıcının kimliği | Afiş |
Boyut sınıflarını Varlık boyutu seçimi tanımlar.
Sorgu parametreleri¶
| Alan | Tür | Açıklama |
|---|---|---|
| size? | integer | Piksel cinsinden istenen kare kenar uzunluğu; boyut merdiveninde bir üst basamağa yuvarlanır ve boyut sınıfına sıkıştırılır. Yok veya ayrıştırılamayan bir değer sıkıştırmadan önce 128'i seçer; hiçbir değer reddedilmez |
| animated? | boolean | true/1 hareketi korur, false/0 ilk kareyi döndürür. Yoksa: yalnızca hash a_ ile başlıyorsa hareketli |
Diğer tüm sorgu parametreleri yok sayılır. Yol, seçilen temsil üzerinde bir Range kabul eder.
Yanıt¶
| Durum | Gövde | Koşul |
|---|---|---|
| 200 | Varlık temsili | Özgün veya dönüştürülmüş varlık mevcut |
| 206 | Seçilen baytlar | Bir aralık karşılanabiliyor |
| 400 | Hata nesnesi | Geçersiz sahip kimliği, uzantı veya hash |
| 404 | Hata nesnesi | Varlık mevcut değil veya saklanan nesne bir görsel değil |
Ortak yanıtlar da uygulanır. Başarılı yanıtlar bir yıl önbelleğe alınır ve immutable olarak işaretlenir: yeni bir yükleme her zaman yeni bir hash, dolayısıyla yeni bir URL alır.
Kullanıcı avatarını getir¶
GET {endpoints.media}/avatars/{user_id}/{hash}.{ext}
Bir kullanıcının avatarını simge boyut sınıfında döndürür. Bot kullanıcıları ve webhook'lar aynı yolu kendi kimlikleriyle kullanır.
| Alan | Tür | Açıklama |
|---|---|---|
| user_id | snowflake | Sahip kullanıcının (veya webhook'un) kimliği |
| hash | string | Kullanıcı nesnesindeki avatar hash'i |
| ext | string | Çıktı biçimi; bkz. görsel varlık sözleşmesi |
Kullanıcı afişini getir¶
GET {endpoints.media}/banners/{user_id}/{hash}.{ext}
Bir kullanıcının profil afişini afiş boyut sınıfında döndürür.
Sunucu simgesini getir¶
GET {endpoints.media}/server-icons/{guild_id}/{hash}.{ext}
Bir sunucu simgesini simge boyut sınıfında döndürür. hash, sunucunun icon değeridir.
Sunucu afişini getir¶
GET {endpoints.media}/server-banners/{guild_id}/{hash}.{ext}
Bir sunucu afişini afiş boyut sınıfında döndürür.
Sunucu davet arka planını getir¶
GET {endpoints.media}/server-invite-bg/{guild_id}/{hash}.{ext}
Sunucunun davet sayfasında gösterilen arka plan görselini afiş boyut sınıfında döndürür.
Sunucu gömme arka planını getir¶
GET {endpoints.media}/server-embed-bg/{guild_id}/{hash}.{ext}
Sunucu gömüldüğünde kullanılan arka plan görselini afiş boyut sınıfında döndürür.
Canlı oda afişini getir¶
GET {endpoints.media}/live-room-banners/{user_id}/{hash}.{ext}
Canlı bir ses odasının afişini afiş boyut sınıfında döndürür. API bu URL'yi oda nesnesinde tam olarak döndürür.
Saklanan nesneyi getir¶
GET {endpoints.media}/files/{key}
Saklanan herhangi bir nesneyi depolama anahtarıyla, isteğe bağlı olarak yeniden boyutlandırıp dönüştürerek döndürür. Bu, kanonik URL'si yüklenen dosya CDN'inde olan nesneler (ekler, özel emojiler ve çıkartmalar gibi) için yeniden boyutlandırma yoludur: anahtar, CDN URL'sinin yoludur.
https://cdn.tebhos.com/emojis/1290847135893127168/7b0f.../a61c9e2d.png
https://tebhos.com/api/v1/files/emojis/1290847135893127168/7b0f.../a61c9e2d.png?size=48
key, / içerebilir. Boş olan veya .. içeren bir anahtar 400 döndürür.
Sorgu parametreleri¶
| Alan | Tür | Açıklama |
|---|---|---|
| size? | integer | İstenen kare kenar uzunluğu. width ve height değerlerine göre önceliklidir |
| width? | integer | En büyük çıktı genişliği |
| height? | integer | En büyük çıktı yüksekliği |
| format? | string | webp, png, jpg, jpeg veya gif. Başka her değer 400 döndürür |
| animated? | boolean | false/0 ilk kareyi döndürür. Varsayılan: hareket korunur |
size, width ve height negatif olmayan tamsayılar olmalıdır (sayısal olmayan bir değer 400 döndürür). Her biri boyut merdiveninde bir üst basamağa yuvarlanır ve anahtarın ilk bölümünden türetilen boyut sınıfıyla sıkıştırılır; bkz. Varlık boyutu seçimi. Hiçbir boyut verilmezse özgün boyut korunur.
format yoksa ve isteğin Accept başlığı image/webp içeriyorsa, bir PNG, JPEG veya GIF görseli WebP olarak döndürülür ve yanıtta Vary: Accept, Accept-Encoding bulunur. <img> öğelerini yükleyen tarayıcılar böyle bir Accept başlığı gönderir; Accept: */* gönderen bir indirme aracı özgün biçimi alır.
Yanıt¶
| Durum | Gövde | Koşul |
|---|---|---|
| 200 | Görsel temsili | Nesne bir PNG, JPEG, GIF veya WebP görseli |
| 200 | Saklanan baytlar | Nesne bu görsel türlerinden biri değil (aşağıya bakın) |
| 206 | Seçilen baytlar | Bir görsel temsili üzerindeki bir aralık karşılanabiliyor |
| 400 | Hata nesnesi | Geçersiz anahtar veya format, ya da sayısal olmayan bir boyut |
Bir görsel temsili bir yıl önbelleğe alınır (public, max-age=31536000; depolama anahtarları kendi benzersiz kimliklerini taşıdığından immutable olmadan).
PNG, JPEG, GIF veya WebP görseli olmayan bir nesne değiştirilmeden döndürülür: sorgu parametreleri yok sayılır, Range uygulanmaz, Content-Type anahtarın uzantısından türetilir (svg, mp3, ogg, m4a, wav, mp4, webm, aksi hâlde application/octet-stream), yanıt yedi gün önbelleğe alınır ve bir SVG'nin betik çalıştıramaması için Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox taşır.
Ortak yanıtlar da uygulanır.
İmzalı harici medyayı getir¶
GET https://tebhos.com/external/{signature}/v2/{target}
Üçüncü taraf bir URL'deki medyayı TEBHOS medya vekili üzerinden getirir; böylece izleyiciler üçüncü taraf ana makineye hiçbir zaman doğrudan bağlanmaz. Yalnızca TEBHOS tarafından imzalanmış URL'ler vekil üzerinden aktarılır; vekil açık bir aktarıcı değildir. İmzalı bir URL'yi Harici bir URL'yi imzala ile alın ya da API'nin zaten döndürdüğü URL'yi kullanın (örneğin bir gömmenin vekil üzerinden verilen görsel URL'si).
Yol parametreleri¶
| Alan | Tür | Açıklama |
|---|---|---|
| signature | string | Sunucu tarafındaki bir gizli anahtarla v2/{target} üzerinde hesaplanan, dolgusuz base64url HMAC-SHA256 |
| target | string | Dolgusuz base64url ile kodlanmış hedef URL |
Desteklenen tek sürüm bölümü v2 değeridir. Yanlış bir sürüm, doğrulanamayan bir imza veya UTF-8'e çözülemeyen bir hedef 400 döndürür.
Hedef doğrulama¶
Vekil, getirmeden önce ve getirme sırasında şunları uygular:
- Hedef şeması
httpveyahttpsolmalıdır. - Ana makine
localhostveya benzeri bir ad olmamalı;.local,.internal,.lanveya.localhostile bitmemeli ve bir bulut metadata ana makinesi olmamalıdır. - Ana makinenin çözümlendiği her adres genel olmalıdır. Loopback, özel, link-local (
169.254.169.254dahil), operatör sınıfı NAT, kıyaslama, belgeleme, çoklu yayın, genel yayın, belirtilmemiş, IPv6 benzersiz-yerel ve IPv4 eşlemeli özel adresler reddedilir. - Yönlendirmeler en fazla 5 adım izlenir; özel bir ana makine adına yapılan yönlendirme getirmeyi durdurur.
- Kaynak sunucu 2xx ile ve
image/,audio/,video/mp4,video/webmveyavideo/oggile başlayan birContent-Typeile yanıt vermelidir. - Boyut sınırını aşan bildirilmiş bir
Content-Length, gövde okunmadan reddedilir; akış sırasında sınırı aşan bir gövde kesilir.
Sorgu parametreleri¶
| Alan | Tür | Açıklama |
|---|---|---|
| width? | integer | Piksel cinsinden hedef genişlik |
| height? | integer | Piksel cinsinden hedef yükseklik |
| format? | string | Yalnızca webp tanınır; aşağıdaki dönüşümleri etkinleştirir |
format=webp olmadan kaynak baytlar değiştirilmeden aktarılır. format=webp değerinin durağan görseller, GIF'ler ve videolar için ne yaptığını İmzalı harici dönüşümler açıklar.
Yanıt¶
| Durum | Gövde | Koşul |
|---|---|---|
| 200 | Medya temsili | Hedef getirildi ve istendiyse dönüştürüldü |
| 400 | text/plain neden |
Geçersiz imza, doğrulamada reddedilen hedef, kaynak hatası, izin verilmeyen içerik türü, fazla büyük içerik veya başarısız dönüşüm |
Doğrudan aktarılan bir yanıt kaynağın Content-Type değerini korur ve Cache-Control: public, max-age=86400 ile X-Content-Type-Options: nosniff taşır. Dönüştürülmüş bir yanıt Cache-Control: public, max-age=604800 ile image/webp olur.
OpenGraph meta verisini getir¶
GET https://tebhos.com/og?url={url}
Bir HTML sayfasını getirir ve OpenGraph ile Twitter Card meta verisini JSON olarak döndürür. Aynı hedef doğrulama uygulanır; tek fark, kaynağın text/html veya application/xhtml+xml ile yanıt vermesi gerekmesidir. Sayfanın yalnızca ilk 2 MiB'ı okunur.
| Sorgu | Tür | Açıklama |
|---|---|---|
| url | string | URL kodlanmış sayfa URL'si |
| Alan | Tür | Açıklama |
|---|---|---|
| title | ?string | og:title, twitter:title veya sayfanın <title> değeri |
| description | ?string | og:description, twitter:description veya description |
| image | ?string | og:image, twitter:image veya twitter:image:src |
| site_name | ?string | og:site_name |
| url | ?string | og:url |
| og_type | ?string | og:type |
| video | ?string | og:video, og:video:url, og:video:secure_url veya twitter:player |
| video_width | ?integer | og:video:width |
| video_height | ?integer | og:video:height |
| image_width | ?integer | og:image:width |
| image_height | ?integer | og:image:height |
| author_name | ?string | Varsa sayfanın oEmbed verisinden |
| author_url | ?string | Varsa sayfanın oEmbed verisinden |
| provider_url | ?string | Varsa sayfanın oEmbed verisinden |
Sayfa bir JSON oEmbed belgesine bağlantı veriyorsa ya da ana makine bilinen bir oEmbed sağlayıcısıysa (YouTube, Vimeo, SoundCloud, TikTok, Reddit), TEBHOS bu belgeyi de getirir ve sayfanın kendisinde eksik olduğunda yazar ve sağlayıcı alanlarını, site_name ve image değerlerini doldurmak için kullanır. Yanıt bir saat önbelleğe alınır (public, max-age=3600). Hatalar, text/plain bir nedenle 400 döndürür.
Mesajlardaki zengin bağlantı önizlemeleri için bu yolu doğrudan çağırmak yerine HTTP API unfurl davranışını kullanın.
Harici bir URL'yi imzala¶
GET /media/sign?url={url}
Üçüncü taraf bir URL'yi imzalı harici medya URL'sine dönüştüren HTTP API yolu (/api/v1 altında). Oturum açmış bir kullanıcı oturumu (Authorization: Bearer ...) gerektirir; bot token'ı 403 alır.
| Sorgu | Tür | Açıklama |
|---|---|---|
| url | string | URL kodlanmış bir http:// veya https:// URL'si. Başka her şey 400 döndürür |
İmzalama hedefi getirmez veya doğrulamaz; doğrulama imzalı URL okunduğunda yapılır.