~0wx.es~ :: Hosting souborů a další užitečné nástroje


Nahrát TinyURL HugeURL Pastebin O službě Nahlásit Přihlásit se
Čeština ▼
English English Deutsch Deutsch Plattdüütsch Plattdüütsch Lëtzebuergesch Lëtzebuergesch Nederlands Nederlands Dansk Dansk Svenska Svenska Bokmål Bokmål Nynorsk Nynorsk Íslenska Íslenska Føroyskt Føroyskt Español Español Català Català Galego Galego Português Português Français Français Italiano Italiano Latina Latina Română Română Rumantsch Rumantsch Gaeilge Gaeilge Suomi Suomi Magyar Magyar Euskara Euskara Esperanto Esperanto 日本語 日本語 简体中文 简体中文 繁體中文(台灣) 繁體中文(台灣) 繁體中文(香港) 繁體中文(香港) 粵語 粵語 한국어 한국어 Tiếng Việt Tiếng Việt ไทย ไทย Bahasa Indonesia Bahasa Indonesia Bahasa Melayu Bahasa Melayu हिन्दी हिन्दी Ελληνικά Ελληνικά Polski Polski Українська Українська Русский Русский Türkçe Türkçe العربية العربية עברית עברית Kiswahili Kiswahili ʻŌlelo Hawaiʻi ʻŌlelo Hawaiʻi tlhIngan Hol tlhIngan Hol Quenya Quenya

Pro všechny funkce na 0wx.es existuje API. Můžete ho použít ve skriptech nebo z konzole.

Všechno, co dělají formuláře na tomto webu, pro skripty. Každá odpověď je JSON, včetně chyb, takže nikdy nemusíte hádat, zda je tělo výsledek nebo vysvětlení.

Odeslání požadavku

Pošlete POST na koncový bod buď s parametry formuláře, nebo s tělem JSON. Obojí je rovnocenné; zvolte, co vám vaše nástroje usnadní. Parametr action vybírá, co se má udělat. Pro všechno, co napsal člověk — text k vložení, URL, překlad — použijte --data-urlencode, protože -d posílá hodnotu syrovou a ta se usekne u prvního &. Obyčejné -d stačí pro pevné hodnoty, jako je samotné action. wget žádné --data-urlencode nemá, takže s wgetem takové hodnoty buď procentně zakódujte sami, nebo pošlete tělo JSON, které žádné kódování nepotřebuje.

curl -X POST https://0wx.es/api.cgi \
     -d action=paste --data-urlencode 'content=hello & world'

curl -X POST https://0wx.es/api.cgi \
     -H 'Content-Type: application/json' \
     -d '{"action":"paste","content":"hello & world"}'

wget -qO- --header='Content-Type: application/json' \
     --post-data '{"action":"paste","content":"hello & world"}' https://0wx.es/api.cgi
Hodnoty obsahující &

V těle formuláře & odděluje parametry a curl -d to, co mu dáte, nekóduje. URL s dotazovacím řetězcem se proto usekne u svého prvního & a zbytek dorazí jako samostatné parametry. Použijte --data-urlencode, nebo pošlete JSON. Zbloudilé parametry se odmítají, místo aby se ignorovaly, takže tohle selže nahlas, místo aby uložilo půlku odkazu.

# wrong -- the value is cut at the &
curl -X POST https://0wx.es/api.cgi \
     -d action=tinyurl -d 'url=https://example.com/?a=1&b=2'

# right
curl -X POST https://0wx.es/api.cgi \
     -d action=tinyurl --data-urlencode 'url=https://example.com/?a=1&b=2'

# also right -- JSON needs no escaping
curl -X POST https://0wx.es/api.cgi -H 'Content-Type: application/json' \
     -d '{"action":"tinyurl","url":"https://example.com/?a=1&b=2"}'

# wget has no --data-urlencode, so percent-encode it yourself...
wget -qO- --post-data 'action=tinyurl&url=https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2' https://0wx.es/api.cgi

# ...or send JSON, which needs no encoding at all
wget -qO- --header='Content-Type: application/json' \
     --post-data '{"action":"tinyurl","url":"https://example.com/?a=1&b=2"}' https://0wx.es/api.cgi
Ověření

Volitelné. Bez klíče je požadavek anonymní a chová se přesně jako anonymní návštěvník — výsledek je tak jako tak veřejný, jediný rozdíl je, zda se objeví ve vašem seznamu souborů. Vygenerujte si klíč na stránce svého účtu a posílejte ho jako bearer token; předání parametrem apikey funguje také, ale klíč v dotazovacím řetězci skončí v logech serveru a v historii prohlížeče.

curl -X POST https://0wx.es/api.cgi \
     -H 'Authorization: Bearer YOUR_KEY' \
     -d action=whoami

wget -qO- --header='Authorization: Bearer YOUR_KEY' \
     --post-data 'action=whoami' https://0wx.es/api.cgi
Akce
actionParametryPopis
whoami—Potvrdí, že klíč funguje, a ohlásí aktuální limity. Nic nestojí; volejte ji jako první.
ip—Ohlásí vaši adresu, její PTR, zemi, region a město, kam se geolokalizuje, souřadnice a user agent, který jste poslali. Nepotřebuje klíč a odpovídá stejně s ním i bez něj. Záměrně užší než webová stránka: bez WHOIS, bez DNS zóny a bez dotazů do blokovacích seznamů, takže volání stojí server jen jedno čtení z místní databáze.
uploadfile (opakovatelné), resize, lifetime, gallery nebo g *Nahraje jeden nebo více souborů. Musí jít o multipart/form-data. Uvedení galerie je do ní rovnou zařadí a vrátí její id.
tinyurlurl, lifetimeZkrátí URL.
hugeurlurl, lifetimeProdlouží URL, absurdně, schválně.
pastecontent, lifetimeUloží blok textu a vrátí na něj odkaz.
translatecontent, to, fromPřeloží text. to a from jsou kódy z akce langs — pozor, nejde vždy o kódy zemí: dánština je da, ne dk. from lze vynechat nebo zadat jako auto, čímž se backend požádá o rozpoznání jazyka; jeho uvedení dává u krátkého textu lepší výsledek.
langsVypíše jazyky, které translate přijímá, jako supported_langs: jeden objekt na jazyk, kód k názvu, v pořadí, v jakém je web nabízí. Nepotřebuje klíč API.
dyndnskey, ip, formatAktualizuje dynamické DNS jméno. Jediná akce, která nepotřebuje klíč API: volá ji router, který má jedno pole pro URL a nemůže poslat hlavičku. key je aktualizační klíč daného jména zobrazený ve vašem účtu, ne váš klíč API. Vynecháte-li ip, použije se adresa, ze které voláte. Odpověď je de facto slovo dyndns2 — good, nochg, badauth, abuse nebo dnserr — jako prostý text, protože to routery rozebírají; pro obvyklý JSON přidejte format=json.
listfiles *page, gVypíše vaše soubory se vším, co ukazuje panel Info, plus náhled a přímý odkaz. g omezí výpis na jednu galerii, none na soubory bez galerie.
listpastes *pageVypíše vaše texty, u každého s náhledem 200 znaků místo celého těla.
listurls *pageVypíše vaše krátké a obří URL s adresou, na kterou každá ukazuje.
otl *shareVytvoří jednorázový odkaz na jeden z vašich souborů. Každé volání razí nový, takže dát stejný soubor dvěma lidem znamená dva odkazy.
listotl *pageVypíše vaše aktivní jednorázové odkazy, soubor, na který každý ukazuje, a zda tomu souboru mezitím vypršela platnost.
listgalleries *—Vypíše vaše galerie s jejich id, názvy, počty souborů a stavem zveřejnění.
gallery *g, publishOhlásí stav zveřejnění galerie a změní ho, je-li zadáno publish.
move *share (opakovatelné), gallery nebo gPřesune soubory do galerie podle názvu (vytvoří se, je-li nový) nebo podle id. Vynecháte-li obojí, přesune je zpět do hlavního seznamu.
delete *share (opakovatelné), g, otl, withfilesSmaže soubory, texty, krátké URL, galerie, jednorázové odkazy nebo libovolnou směs. Share se nejprve porovná s vašimi soubory a pak s vašimi texty a odkazy, takže volající je nemusí třídit podle typu. Jednorázové odkazy jdou zvlášť do otl: odstranění odkazu se nesmí dát zaměnit se smazáním souboru, na který ukazuje.

* Tyto akce vyžadují klíč API. Čtou nebo mění data jednoho účtu, takže nemají anonymní podobu.

Více najednou

share a g přijímají opakované pole, pole JSON nebo seznam oddělený čárkami — co vám vaše nástroje nejvíc usnadní. Duplicity se ignorují.

curl -X POST https://0wx.es/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
     -d action=move -d share=Ab3xK9pQ -d share=Zz7yT2mN --data-urlencode 'gallery=Holiday 2026'

curl -X POST https://0wx.es/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
     -d action=delete -d 'share=Ab3xK9pQ,Zz7yT2mN'

curl -X POST https://0wx.es/api.cgi -H 'Content-Type: application/json' \
     -H 'Authorization: Bearer YOUR_KEY' \
     -d '{"action":"move","share":["Ab3xK9pQ","Zz7yT2mN"],"g":7}'

wget -qO- --header='Authorization: Bearer YOUR_KEY' \
     --post-data 'action=delete&share=Ab3xK9pQ,Zz7yT2mN' https://0wx.es/api.cgi
Galerie

Kdekoli se galerie uvádí — u upload nebo u move — zadává se stejnými dvěma způsoby: g pro existující id, nebo gallery pro název, který se vytvoří, je-li nový. Pošlete-li obojí, vyhrává g. Odpověď nese id galerie. Pozor, smazání galerie odstraní jen galerii a její soubory ponechá v hlavním seznamu — na rozdíl od webového formuláře, který je po dotazu smaže také. Předejte withfiles=true, chcete-li smazat i je: skript uklízející svá seskupení by neměl omylem přijít o nahrané soubory.

curl -X POST https://0wx.es/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
     -F action=upload -F file=@photo.jpg --form-string 'gallery=Holiday 2026'

curl -X POST https://0wx.es/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
     -d action=gallery -d g=7 -d publish=true

wget -qO- --header='Authorization: Bearer YOUR_KEY' \
     --post-data 'action=gallery&g=7&publish=true' https://0wx.es/api.cgi
Nahrávání souborů

Nahrávání nemůže použít tělo JSON, protože soubor se musí poslat jako multipart. Část file opakujte, chcete-li poslat víc souborů najednou. Každý soubor se hlásí zvlášť: odpověď nese seznam files s přijatými a seznam rejected s odmítnutými, takže částečný úspěch je pořád úspěch.

curl -X POST https://0wx.es/api.cgi \
     -H 'Authorization: Bearer YOUR_KEY' \
     -F action=upload \
     -F file=@photo.jpg \
     -F file=@notes.txt \
     -F lifetime=7d

Pro tuto akci není podoba pro wget. wget neumí sestavit tělo multipart/form-data — nemá obdobu curlového -F — a nahrávání musí být multipart. Použijte curl, nebo si tělo a hranici sestavte sami a pošlete je pomocí --post-file.

Doba platnosti

Volitelné u každé akce, která něco ukládá. Přijímá holé sekundy nebo číslo následované m, h nebo d — stejné tvary jako webové formuláře. Vynechejte ho nebo pošlete 0, aby se položka uchovala na neurčito.

Odpovědi

Každá odpověď je objekt JSON s polem ok. Při úspěchu nese výsledek; při neúspěchu nese stabilní kód error a čitelné message. Větvěte podle kódu, zprávu logujte.

{"ok":true,"type":"paste","share":"Ab3xK9pQ",
 "url":"https://0wx.es/p/Ab3xK9pQ","bytes":11}

{"ok":false,"error":"url_too_long",
 "message":"URL exceeds the maximum length."}
Zvukové tagy

Nese-li je soubor, přidá listfiles k jeho záznamu file_tags: interpreta, název a album, přečtené z ID3, komentářů Vorbis nebo atomů MP4 při nahrání souboru. Není-li co hlásit, což je většina souborů, klíč chybí, není null, takže před čtením ověřte jeho přítomnost. Chybět mohou i jednotlivá pole — soubor může mít název a žádné album. Nic dalšího z metadat souboru se nezveřejňuje: nákup z iTunes obsahuje jméno a Apple ID kupujícího a ty se záměrně nikdy nečtou.

{"ok":true,"type":"files","total":2,"page":1,"pages":1,"files":[
  {"share":"Ab3xK9pQ","name":"autobahn.mp3","mime":"audio/mpeg",
   "bytes":8123456,"url":"https://0wx.es/i/Ab3xK9pQ",
   "file_tags":{"artist":"Kraftwerk","title":"Autobahn","album":"Autobahn"}},
  {"share":"Zz7yT2mN","name":"photo.jpg","mime":"image/jpeg",
   "bytes":204800,"url":"https://0wx.es/i/Zz7yT2mN"}
]}
Chybové kódy
errorHTTPPopis
unknown_action400Taková akce neexistuje.
bad_json400Tělo nebylo platný JSON, nebo pole obsahovalo vnořenou strukturu.
unexpected_parameter400Dorazil parametr, který tato akce nepřijímá — obvykle nezakódované & v hodnotě. Zpráva parametry jmenuje.
bad_key401Klíč nebyl rozpoznán. Chybný klíč se odmítne, místo aby se tiše bral jako anonymní.
bad_url400URL je chybně utvořená nebo používá jiné schéma než http(s), ftp nebo gopher.
bad_lifetime400Doba platnosti nebyla číslo ani číslo následované m, h nebo d.
no_content400Nebylo posláno nic k uložení.
url_too_long413URL je delší než limit.
paste_too_long413Text je větší než limit pro texty. Limity se měří v bajtech UTF-8, takže nelatinkový text se počítá víc, než naznačuje počet znaků.
too_many_files413Více souborů, než kolik jedno volání přijímá.
no_usable_files415Všechny soubory byly odmítnuty. Důvod najdete v seznamu rejected.
backend_unavailable502Překladový backend neodpověděl.
internal500Něco nečekaně selhalo. Bylo to zaznamenáno.
Limity

Aktuální hodnoty čtěte voláním whoami, místo abyste je napevno zapisovali — nastavuje je provozovatel serveru a mohou se změnit. Velikosti jsou v bajtech UTF-8.

Shellový klient

0wx.sh obaluje vše výše uvedené. Je to čistý POSIXový shell, nepotřebuje nic než curl a je dost krátký na to, abyste si ho před spuštěním přečetli — což je u skriptu, který bude držet váš klíč API, správný postup. Klíč dejte do OWX_KEY, místo abyste předávali --key, a zůstane mimo historii vašeho shellu.

wget https://0wx.es/clients/0wx.sh
chmod +x 0wx.sh
export OWX_KEY=YOUR_KEY
./0wx.sh help
./0wx.sh paste --content 'hello & world'
Klient v Pythonu

0wx.py dělá totéž co shellový klient, ale odpověď rozebere a vypíše, co pole znamenají, místo aby vám podal syrový JSON — přidejte --json, když chcete syrovou podobu. Jen standardní knihovna: žádné requests, nic k instalaci. Pokud píšete vlastního klienta, stojí za přečtení jeho funkce send() a report(): dohromady ukazují, jak sestavit požadavek, jak z neúspěšného vytáhnout zprávu a co odpovědi obsahují.

wget https://0wx.es/clients/0wx.py
chmod +x 0wx.py
export OWX_KEY=YOUR_KEY
./0wx.py listfiles
./0wx.py listfiles --json | jq '.files[].url'
Klient v Perlu

0wx.pl dělá totéž co pythonový klient a vypisuje totéž. Jen základní moduly — HTTP::Tiny a JSON::PP jsou součástí Perlu od verze 5.14, takže není co instalovat. Stojí za přečtení vedle pythonového klienta, pokud píšete vlastního: oba jazyky selhávají u rozbitého požadavku jinak a oba skripty říkají kde.

wget https://0wx.es/clients/0wx.pl
chmod +x 0wx.pl
export OWX_KEY=YOUR_KEY
./0wx.pl listfiles
Klient v PowerShellu

0wx.ps1 je protějšek pythonového klienta pro Windows: stejné příkazy, stejný výstup, a odpověď rozebere, místo aby vám podal syrový JSON — pro ten přidejte --json. Je napsaný pro Windows PowerShell, který už na počítači je, takže není co instalovat, a beze změny běží i na PowerShellu 7. V okně, ze kterého ho spouštíte, možná budete potřebovat Set-ExecutionPolicy -Scope Process Bypass; to se Windows ptají, zda jste opravdu chtěli spustit stažený skript — oprávněná otázka, a soubor je dost krátký na to, abyste si ho nejdřív přečetli.

$env:OWX_KEY = 'YOUR_KEY'
.\0wx.ps1 listfiles
.\0wx.ps1 paste --content 'hello & world'
.\0wx.ps1 upload --file .\holiday.jpg --gallery 'Holiday 2026'
Okno ve vašem prohlížeči

0wx.html je stejná sada záložek jako desktopový klient, ve třech souborech — stránka, stylopis a skript — bez instalace, bez frameworku a bez načítání čehokoli odjinud než z tohoto webu. Tři místo jednoho proto, že Content-Security-Policy webu zakazuje inline skripty a styly, což stojí za to zachovat. Lze na něj přetahovat soubory. Musí se otevřít odsud, ne uložit a otevřít z vašeho disku: API neposílá hlavičky cross-origin, takže místní kopii by prohlížeč každý požadavek odmítl, ještě než by odešel. Klíč se drží v paměti, pokud nezaškrtnete, že si ho má pamatovat.

https://0wx.es/clients/0wx.html
Okno na Windows

0wx-gui.ps1 je stejná sada záložek jako desktopový klient, vykreslená pomocí WinForms — tedy vůbec nic k instalaci, protože to už je součástí Windows. Dejte ho do stejné složky jako 0wx.ps1: okno si od toho souboru půjčuje zpracování požadavků, místo aby neslo druhou kopii, takže jsou potřeba oba. Windows se před spuštěním skriptu, který samy nenapsaly, zeptají, což je oprávněná otázka; oba soubory jsou dost krátké na to, abyste si je před odpovědí přečetli.

powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
Okno na Linuxu s GTK

0wx-gtk.pl je malé okno GTK se záložkami pro nahrávání, vkládání, zkracování a procházení vašich souborů — jako seznam nebo jako galerie náhledů, filtrovaná podle galerie. Je to jediný klient zde, který potřebuje něco nainstalovat — GTK3 vazby pro Perl — což stojí za vědomí vedle okna pro Windows výše, které nepotřebuje vůbec nic. Vše ostatní, co používá, je součástí Perlu. Klíč se drží jen v paměti: zavřením okna se zapomene a nastavení OWX_KEY ho při startu předvyplní. Ať už vám ukazuje cokoli, syrová odpověď serveru je na jedno kliknutí pod “Server reply”.

apt install libgtk3-perl        # or: dnf install perl-Gtk3
wget https://0wx.es/clients/0wx-gtk.pl
chmod +x 0wx-gtk.pl
OWX_KEY=YOUR_KEY ./0wx-gtk.pl
Aplikace pro Android

0wx-android.apk dělá to, co ostatní klienti, z telefonu: nahrávání, vkládání, zkracování, překlad a procházení vašich souborů jako seznam nebo galerie. Sdílení souboru do aplikace z libovolné jiné aplikace ho nahraje a sdílení textu ho uloží jako text. Není v žádném obchodě s aplikacemi, takže se zařízení zeptá, zda instalaci povolíte — otázka, kterou obecně stojí za to brát vážně, a důvod, proč jsou celé zdrojové kódy také zde: otevřete je v Android Studiu a sestavte si aplikaci sami, místo abyste souboru věřili. Sestavení vyžaduje JDK 21; přiložený BUILDING.md říká proč.

https://0wx.es/clients/0wx-android.apk        # install it
https://0wx.es/clients/0wx-android.zip        # build it yourself
Poznámky

Akce pro vzdálené stažení záměrně chybí. Přiměla by server stáhnout URL podle volby volajícího, což je plocha pro podvržení požadavku, a skript to dokáže hnát mnohem tvrději než formulář. Nahrajte soubor raději sami.


(p) 2018 0wx.es -/- Powered by Linux and GNU. Live free or die! (root@0wx.es)