~0wx.eu~ :: Allotjament d'arxius i altres eines útils


Pujar URL breu URL enorme Pastebin Informació Denuncia iniciar Sessió
Català ▼
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 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 Čeština Čeština Українська Українська Русский Русский Türkçe Türkçe العربية العربية עברית עברית Kiswahili Kiswahili ʻŌlelo Hawaiʻi ʻŌlelo Hawaiʻi tlhIngan Hol tlhIngan Hol Quenya Quenya

Hi ha una API per a totes les funcions de 0wx.eu. La pots fer servir en scripts o des de la consola.

Tot el que fan els formularis d'aquest lloc, per a scripts. Cada resposta és JSON, errors inclosos, així que mai no has d'endevinar si un cos és un resultat o una explicació.

Fer una petició

Fes POST a l'endpoint amb paràmetres de formulari o amb un cos JSON. Són equivalents; tria el que et sigui més còmode amb les teves eines. El paràmetre action selecciona què fer. Usa --data-urlencode per a tot el que hagi teclejat una persona — text d'un paste, una URL, una traducció — perquè -d envia el valor en brut i es tallarà al primer &. Un -d normal n'hi ha prou per a valors fixos com el mateix action. wget no té --data-urlencode en absolut, així que amb wget codifica tu mateix aquests valors amb percentatges o envia un cos JSON, que no necessita codificació.

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

curl -X POST https://0wx.eu/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.eu/api.cgi
Valors que contenen &

En un cos de formulari & separa paràmetres, i curl -d no codifica el que li dones. Una URL amb cadena de consulta es talla per tant al seu primer &, i la resta arriba com a paràmetres separats. Usa --data-urlencode o envia JSON. Els paràmetres extraviats es rebutgen en lloc d'ignorar-se, així que això falla de manera visible en lloc de desar mig enllaç.

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

# right
curl -X POST https://0wx.eu/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.eu/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.eu/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.eu/api.cgi
Autenticació

Opcional. Sense clau, la petició és anònima i es comporta exactament com un visitant anònim — el resultat és públic de totes maneres, l'única diferència és si acaba a la teva llista de fitxers. Genera una clau a la pàgina del teu compte i envia-la com a testimoni bearer; passar-la com a paràmetre apikey també funciona, però una clau a la cadena de consulta acaba als registres del servidor i a l'historial del navegador.

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

wget -qO- --header='Authorization: Bearer YOUR_KEY' \
     --post-data 'action=whoami' https://0wx.eu/api.cgi
Accions
actionParàmetresDescripció
whoami—Confirma que una clau funciona i informa dels límits actuals. No costa res; crida-la primer.
ip—Informa de la teva adreça, el seu PTR, el país, la regió i la ciutat on es geolocalitza, les coordenades i l'user agent que has enviat. No necessita clau i respon igual amb clau o sense. Deliberadament més limitat que la pàgina web: sense WHOIS, sense zona DNS i sense consultes a llistes de bloqueig, així que cridar-lo només costa al servidor una lectura de base de dades local.
uploadfile (repetible), resize, lifetime, gallery o g *Puja un o més fitxers. Ha de ser multipart/form-data. Anomenar una galeria els posa directament dins seu i en retorna l'id.
tinyurlurl, lifetimeEscurça una URL.
hugeurlurl, lifetimeAllarga una URL, de manera absurda, a propòsit.
pastecontent, lifetimeDesa un bloc de text i retorna un enllaç cap a ell.
translatecontent, to, fromTradueix text. to i from són codis de l'acció langs — tingues en compte que no sempre són codis de país: el danès és da, no dk. from es pot ometre o donar com a auto, que demana al backend que detecti la llengua; indicar-lo dona millor resultat amb textos curts.
langsLlista les llengües que accepta translate, com a supported_langs: un objecte per llengua, codi a nom, en l'ordre en què les ofereix el lloc. No necessita clau d'API.
dyndnskey, ip, formatActualitza un nom de DNS dinàmic. L'única acció que no necessita clau d'API: la crida un encaminador, que té un camp per a una URL i cap manera d'enviar una capçalera. key és la clau d'actualització de cada nom que es mostra al teu compte, no la teva clau d'API. Omet ip i s'usarà l'adreça des de la qual crides. La resposta és la paraula dyndns2 de facto — good, nochg, badauth, abuse o dnserr — com a text pla, perquè és el que analitzen els encaminadors; afegeix format=json per al JSON habitual.
listfiles *page, gLlista els teus fitxers amb tot el que mostra el panell d'informació, més la miniatura i l'enllaç directe. g ho limita a una galeria, o none als fitxers sense galeria.
listpastes *pageLlista els teus pastes, amb una previsualització de 200 caràcters de cadascun en lloc del cos sencer.
listurls *pageLlista les teves URL curtes i enormes, amb l'adreça a la qual apunta cadascuna.
otl *shareCrea un enllaç d'un sol ús a un dels teus fitxers. Cada crida en genera un de nou, així que donar el mateix fitxer a dues persones produeix dos enllaços.
listotl *pageLlista els teus enllaços d'un sol ús actius, el fitxer al qual apunta cadascun i si aquest fitxer ha caducat des de llavors.
listgalleries *—Llista les teves galeries amb els seus id, noms, nombre de fitxers i estat de publicació.
gallery *g, publishInforma de l'estat de publicació d'una galeria i el canvia quan s'indica publish.
move *share (repetible), gallery o gMou fitxers a una galeria, per nom (es crea si és nova) o per id. Si s'ometen tots dos, tornen a la llista principal.
delete *share (repetible), g, otl, withfilesEsborra fitxers, pastes, URL curtes, galeries, enllaços d'un sol ús o qualsevol combinació. Un share es compara primer amb els teus fitxers i després amb els teus pastes i enllaços, així que qui crida no els ha de classificar per tipus. Els enllaços d'un sol ús van a part a otl: treure un enllaç no s'ha de poder confondre amb esborrar el fitxer al qual apunta.

* Aquestes accions necessiten una clau d'API. Llegeixen o canvien les dades d'un compte, així que no tenen forma anònima.

Diversos alhora

share i g accepten un camp repetit, una matriu JSON o una llista separada per comes — el que et sigui més fàcil amb les teves eines. Els duplicats s'ignoren.

curl -X POST https://0wx.eu/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.eu/api.cgi -H 'Authorization: Bearer YOUR_KEY' \
     -d action=delete -d 'share=Ab3xK9pQ,Zz7yT2mN'

curl -X POST https://0wx.eu/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.eu/api.cgi
Galeries

Allà on s'anomeni una galeria — a upload o a move — s'indica de les mateixes dues maneres: g per a un id existent, o gallery per a un nom, que es crea si és nou. Si s'envien tots dos, guanya g. La resposta porta l'id de la galeria. Tingues en compte que esborrar una galeria només elimina la galeria i deixa els seus fitxers a la llista principal — a diferència del formulari web, que els esborra després de preguntar. Passa withfiles=true per esborrar-los també: un script que endreça les seves agrupacions no hauria de perdre les pujades per accident.

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

curl -X POST https://0wx.eu/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.eu/api.cgi
Pujar fitxers

Les pujades no poden usar el cos JSON, perquè un fitxer s'ha d'enviar com a multipart. Repeteix la part file per enviar-ne diversos alhora. Cada fitxer s'informa per separat: la resposta porta una llista files amb els acceptats i una llista rejected amb els que no, així que un èxit parcial continua sent un èxit.

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

No hi ha forma amb wget per a això. wget no pot construir un cos multipart/form-data — no té equivalent al -F de curl — i les pujades han de ser multipart. Usa curl, o munta tu mateix el cos i el boundary i envia'l amb --post-file.

Durada

Opcional a tota acció que desi alguna cosa. Accepta segons a seques, o un nombre seguit de m, h o d — les mateixes formes que admeten els formularis web. Omet-lo o passa 0 per conservar l'element indefinidament.

Respostes

Cada resposta és un objecte JSON amb un camp ok. Si té èxit porta el resultat; si falla porta un codi error estable i un message llegible. Ramifica pel codi, registra el missatge.

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

{"ok":false,"error":"url_too_long",
 "message":"URL exceeds the maximum length."}
Etiquetes d'àudio

Quan un fitxer en porta, listfiles afegeix file_tags a la seva entrada: artista, títol i àlbum, llegits d'ID3, comentaris Vorbis o àtoms MP4 en pujar el fitxer. La clau és absent en lloc de ser null quan no hi ha res a informar, que és la majoria dels fitxers, així que comprova-la abans de llegir-la. També poden faltar camps individuals — un fitxer pot tenir títol i no àlbum. No s'exposa res més de les metadades del fitxer: una compra d'iTunes registra el nom i l'Apple ID del comprador, i aquests no es llegeixen mai, a propòsit.

{"ok":true,"type":"files","total":2,"page":1,"pages":1,"files":[
  {"share":"Ab3xK9pQ","name":"autobahn.mp3","mime":"audio/mpeg",
   "bytes":8123456,"url":"https://0wx.eu/i/Ab3xK9pQ",
   "file_tags":{"artist":"Kraftwerk","title":"Autobahn","album":"Autobahn"}},
  {"share":"Zz7yT2mN","name":"photo.jpg","mime":"image/jpeg",
   "bytes":204800,"url":"https://0wx.eu/i/Zz7yT2mN"}
]}
Codis d'error
errorHTTPDescripció
unknown_action400No existeix aquesta acció.
bad_json400El cos no era JSON vàlid, o un camp contenia una estructura imbricada.
unexpected_parameter400Ha arribat un paràmetre que aquesta acció no admet — normalment un & sense codificar en un valor. El missatge anomena els paràmetres.
bad_key401No s'ha reconegut la clau. Una clau incorrecta es rebutja en lloc de tractar-se silenciosament com a anònima.
bad_url400La URL està mal formada o usa un esquema diferent de http(s), ftp o gopher.
bad_lifetime400La durada no era un nombre ni un nombre seguit de m, h o d.
no_content400No s'ha enviat res per desar.
url_too_long413La URL supera el límit de longitud.
paste_too_long413El text supera el límit dels pastes. Els límits es mesuren en bytes UTF-8, així que el text no llatí compta més del que suggereix el seu nombre de caràcters.
too_many_files413Més fitxers dels que accepta una sola crida.
no_usable_files415S'han rebutjat tots els fitxers. Consulta la llista rejected per saber-ne el motiu.
backend_unavailable502El backend de traducció no ha respost.
internal500Alguna cosa ha fallat inesperadament. S'ha registrat.
Límits

Crida whoami per llegir els valors actuals en lloc de fixar-los al codi — els estableix l'operador del servidor i poden canviar. Les mides són bytes UTF-8.

Un client de shell

0wx.sh embolcalla tot l'anterior. És shell POSIX pur, no necessita res més que curl i és prou curt per llegir-lo abans d'executar-lo — que és el correcte amb un script que guardarà la teva clau d'API. Posa la clau a OWX_KEY en lloc de passar --key, i quedarà fora de l'historial del teu shell.

wget https://0wx.eu/clients/0wx.sh
chmod +x 0wx.sh
export OWX_KEY=YOUR_KEY
./0wx.sh help
./0wx.sh paste --content 'hello & world'
Un client en Python

0wx.py fa el mateix que el client de shell, però analitza la resposta i imprimeix què signifiquen els camps en lloc de donar-te JSON en brut — afegeix --json quan vulguis la forma en brut. Només biblioteca estàndard: sense requests, res a instal·lar. Si escrius el teu propi client, les seves funcions send() i report() són les parts que val la pena llegir: entre totes dues mostren com construir la petició, com treure el missatge d'una de fallida i què contenen les respostes.

wget https://0wx.eu/clients/0wx.py
chmod +x 0wx.py
export OWX_KEY=YOUR_KEY
./0wx.py listfiles
./0wx.py listfiles --json | jq '.files[].url'
Un client en Perl

0wx.pl fa el mateix que el de Python i imprimeix la mateixa sortida. Només mòduls del nucli — HTTP::Tiny i JSON::PP vénen amb Perl des de la 5.14, així que no hi ha res a instal·lar. Val la pena llegir-lo al costat del client de Python si escrius el teu: els dos llenguatges fallen de manera diferent davant d'una petició trencada, i tots dos scripts diuen on.

wget https://0wx.eu/clients/0wx.pl
chmod +x 0wx.pl
export OWX_KEY=YOUR_KEY
./0wx.pl listfiles
Un client en PowerShell

0wx.ps1 és l'equivalent del client de Python per a Windows: les mateixes ordres, la mateixa sortida, i analitza la resposta en lloc de donar-te JSON en brut — afegeix --json per a això. Està escrit per a la Windows PowerShell que ja ve a la màquina, així que no hi ha res a instal·lar, i funciona sense canvis a PowerShell 7. Potser necessitaràs Set-ExecutionPolicy -Scope Process Bypass a la finestra des d'on l'executis, que és Windows preguntant si de debò vols executar un script descarregat — una pregunta raonable, i el fitxer és prou curt per llegir-lo abans.

$env:OWX_KEY = 'YOUR_KEY'
.\0wx.ps1 listfiles
.\0wx.ps1 paste --content 'hello & world'
.\0wx.ps1 upload --file .\holiday.jpg --gallery 'Holiday 2026'
Una finestra al teu navegador

0wx.html és el mateix conjunt de pestanyes que el client d'escriptori, en tres fitxers — una pàgina, un full d'estils i un script — sense instal·lació, sense framework i sense carregar res d'enlloc que no sigui aquest lloc. Tres en lloc d'un perquè la Content-Security-Policy del lloc prohibeix script i estil en línia, cosa que convé mantenir. S'hi poden deixar anar fitxers. S'ha d'obrir des d'aquí i no desar-lo i obrir-lo des del teu disc: l'API no envia capçaleres cross-origin, així que a una còpia local el teu navegador li rebutjaria cada petició abans de sortir. La clau es guarda en memòria tret que marquis la casella per recordar-la.

https://0wx.eu/clients/0wx.html
Una finestra a Windows

0wx-gui.ps1 és el mateix conjunt de pestanyes que el client d'escriptori, dibuixat amb WinForms — cosa que vol dir que no hi ha res a instal·lar, perquè ja forma part de Windows. Posa'l a la mateixa carpeta que 0wx.ps1: la finestra manlleva la gestió de peticions d'aquell fitxer en lloc de portar-ne una segona còpia, així que calen tots dos. Windows preguntarà abans d'executar un script que no ha escrit ell, cosa raonable; tots dos fitxers són prou curts per llegir-los abans de respondre.

powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
Una finestra a Linux amb GTK

0wx-gtk.pl és una petita finestra GTK amb pestanyes per pujar, enganxar, escurçar i explorar els teus fitxers — com a llista o com a galeria de miniatures, filtrada per galeria. És l'únic client d'aquí que necessita instal·lar alguna cosa — les vinculacions GTK3 de Perl — cosa que convé saber al costat de la finestra de Windows de dalt, que no necessita res en absolut. Tota la resta que usa ve amb Perl. La clau només es guarda en memòria: tancar la finestra l'oblida, i definir OWX_KEY l'omple en arrencar. Mostri el que mostri, la resposta en brut del servidor és a un clic sota “Server reply”.

apt install libgtk3-perl        # or: dnf install perl-Gtk3
wget https://0wx.eu/clients/0wx-gtk.pl
chmod +x 0wx-gtk.pl
OWX_KEY=YOUR_KEY ./0wx-gtk.pl
Una app per a Android

0wx-android.apk fa el que fan els altres clients, des del mòbil: pujar, enganxar, escurçar, traduir i explorar els teus fitxers com a llista o galeria. Compartir-hi un fitxer des de qualsevol altra app el puja, i compartir text el desa com a paste. No és a cap botiga d'aplicacions, així que el teu dispositiu et demanarà permís per instal·lar-la — una pregunta que convé prendre's seriosament en general, i la raó per la qual tot el codi font també és aquí: obre'l a Android Studio i compila'l tu mateix en lloc de refiar-te del fitxer. Compilar requereix JDK 21; el BUILDING.md inclòs explica per què.

https://0wx.eu/clients/0wx-android.apk        # install it
https://0wx.eu/clients/0wx-android.zip        # build it yourself
Notes

Deliberadament no hi ha acció de recuperació remota. Faria que el servidor recuperés una URL triada per qui crida, cosa que és una superfície de falsificació de peticions, i un script ho pot explotar molt més que un formulari. Puja el fitxer tu mateix.


(p) 2018 0wx.eu -/- Impulsat per Linux i GNU. Viure lliure o morir! (root@0wx.eu)