~0wx.org~ :: Aloxamento de ficheiros e outras ferramentas útiles


Cargar URL curto URL enorme Pastebin Acerca de Denunciar Iniciar sesión
Galego ▼
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à 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

Existe un control remoto para todas as funcións en 0wx.org. Podes usalo para o script ou a liña de comandos.

Todo o que fan os formularios deste sitio, para scripts. Cada resposta é JSON, erros incluídos, así que nunca tes que adiviñar se un corpo é un resultado ou unha explicación.

Facer unha petición

Fai POST ao endpoint con parámetros de formulario ou cun corpo JSON. Son equivalentes; escolle o que che resulte máis cómodo coas túas ferramentas. O parámetro action selecciona que facer. Usa --data-urlencode para todo o que teclease unha persoa — texto dun pegado, unha URL, unha tradución — porque -d envía o valor en bruto e cortarase no primeiro &. Un -d normal abonda para valores fixos como o propio action. wget non ten --data-urlencode en absoluto, así que con wget codifica ti mesmo eses valores con porcentaxes ou envía un corpo JSON, que non precisa codificación.

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

curl -X POST https://0wx.org/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.org/api.cgi
Valores que conteñen &

Nun corpo de formulario & separa parámetros, e curl -d non codifica o que lle dás. Unha URL con cadea de consulta córtase polo tanto no seu primeiro &, e o resto chega como parámetros soltos. Usa --data-urlencode ou envía JSON. Os parámetros extraviados rexéitanse en lugar de ignorarse, así que isto falla de xeito visible en lugar de gardar media ligazón.

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

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

Opcional. Sen chave, a petición é anónima e compórtase exactamente coma un visitante anónimo — o resultado é público en calquera caso, a única diferenza é se remata na túa lista de ficheiros. Xera unha chave na páxina da túa conta e envíaa como token bearer; pasala como parámetro apikey tamén funciona, pero unha chave na cadea de consulta remata nos rexistros do servidor e no historial do navegador.

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

wget -qO- --header='Authorization: Bearer YOUR_KEY' \
     --post-data 'action=whoami' https://0wx.org/api.cgi
Accións
actionParámetrosDescrición
whoami—Confirma que unha chave funciona e informa dos límites actuais. Non custa nada; chámaa primeiro.
ip—Informa do teu enderezo, o seu PTR, o país, a rexión e a cidade en que se xeolocaliza, as coordenadas e o user agent que enviaches. Non precisa chave e responde igual con ela ou sen ela. Deliberadamente máis limitado ca a páxina web: sen WHOIS, sen zona DNS e sen consultas a listas de bloqueo, así que chamalo só lle custa ao servidor unha lectura de base de datos local.
uploadfile (repetible), resize, lifetime, gallery ou g *Sobe un ou máis ficheiros. Debe ser multipart/form-data. Nomear unha galería colócaos directamente nela e devolve o seu id.
tinyurlurl, lifetimeAcurta unha URL.
hugeurlurl, lifetimeAlonga unha URL, de xeito absurdo, a propósito.
pastecontent, lifetimeGarda un bloque de texto e devolve unha ligazón a el.
translatecontent, to, fromTraduce texto. to e from son códigos da acción langs — ten en conta que non sempre son códigos de país: o dinamarqués é da, non dk. from pode omitirse ou darse como auto, que lle pide ao backend que detecte o idioma; indicalo dá mellor resultado con textos curtos.
langsLista os idiomas que acepta translate, como supported_langs: un obxecto por idioma, código a nome, na orde en que os ofrece o sitio. Non precisa chave de API.
dyndnskey, ip, formatActualiza un nome de DNS dinámico. A única acción que non precisa chave de API: chámaa un router, que ten un campo para unha URL e ningunha forma de enviar unha cabeceira. key é a chave de actualización de cada nome que se amosa na túa conta, non a túa chave de API. Omite ip e usarase o enderezo desde o que chamas. A resposta é a palabra dyndns2 de facto — good, nochg, badauth, abuse ou dnserr — como texto plano, porque é o que os routers analizan; engade format=json para o JSON habitual.
listfiles *page, gLista os teus ficheiros con todo o que amosa o panel de información, máis a miniatura e a ligazón directa. g limítao a unha galería, ou none aos ficheiros sen galería.
listpastes *pageLista os teus pegados, cunha vista previa de 200 caracteres de cada un en lugar do corpo completo.
listurls *pageLista as túas URL curtas e enormes, co enderezo ao que apunta cada unha.
otl *shareCrea unha ligazón dun só uso a un dos teus ficheiros. Cada chamada xera unha nova, así que dar o mesmo ficheiro a dúas persoas produce dúas ligazóns.
listotl *pageLista as túas ligazóns dun só uso activas, o ficheiro ao que apunta cada unha e se ese ficheiro caducou desde entón.
listgalleries *—Lista as túas galerías cos seus id, nomes, número de ficheiros e estado de publicación.
gallery *g, publishInforma do estado de publicación dunha galería e cámbiao cando se indica publish.
move *share (repetible), gallery ou gMove ficheiros a unha galería, por nome (créase se é nova) ou por id. Se se omiten ambos, volven á lista principal.
delete *share (repetible), g, otl, withfilesBorra ficheiros, pegados, URL curtas, galerías, ligazóns dun só uso ou calquera mestura. Un share compárase primeiro cos teus ficheiros e despois cos teus pegados e ligazóns, así que quen chama non ten que clasificalos por tipo. As ligazóns dun só uso van á parte en otl: quitar unha ligazón non debe confundirse con borrar o ficheiro ao que apunta.

* Estas accións precisan unha chave de API. Len ou cambian os datos dunha conta, así que non teñen forma anónima.

Varios á vez

share e g aceptan un campo repetido, un array JSON ou unha lista separada por comas — o que che resulte máis doado coas túas ferramentas. Os duplicados ignóranse.

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

curl -X POST https://0wx.org/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.org/api.cgi
Galerías

Onde queira que se nomee unha galería — en upload ou en move — indícase das mesmas dúas maneiras: g para un id existente, ou gallery para un nome, que se crea se é novo. Se se envían ambos, gaña g. A resposta leva o id da galería. Ten en conta que borrar unha galería só elimina a galería e deixa os seus ficheiros na lista principal — a diferenza do formulario web, que os borra tras preguntar. Pasa withfiles=true para borralos tamén: un script que ordena os seus agrupamentos non debería perder as subidas por accidente.

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

curl -X POST https://0wx.org/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.org/api.cgi
Subir ficheiros

As subidas non poden usar o corpo JSON, porque un ficheiro ten que enviarse como multipart. Repite a parte file para enviar varios á vez. Cada ficheiro infórmase por separado: a resposta leva unha lista files cos aceptados e unha lista rejected cos que non, así que un éxito parcial segue sendo un éxito.

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

Non hai forma con wget para isto. wget non pode construír un corpo multipart/form-data — non ten equivalente ao -F de curl — e as subidas deben ser multipart. Usa curl, ou monta ti mesmo o corpo e o boundary e envíao con --post-file.

Duración

Opcional en toda acción que garde algo. Acepta segundos a secas, ou un número seguido de m, h ou d — as mesmas formas que admiten os formularios web. Omíteo ou pasa 0 para conservar o elemento indefinidamente.

Respostas

Cada resposta é un obxecto JSON cun campo ok. Se ten éxito leva o resultado; se falla leva un código error estable e unha message lexible. Ramifica polo código, rexistra a mensaxe.

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

{"ok":false,"error":"url_too_long",
 "message":"URL exceeds the maximum length."}
Etiquetas de audio

Cando un ficheiro as leva, listfiles engade file_tags á súa entrada: artista, título e álbum, lidos de ID3, comentarios Vorbis ou átomos MP4 ao subir o ficheiro. A chave está ausente en lugar de ser null cando non hai nada que informar, que é a maioría dos ficheiros, así que compróbaa antes de lela. Tamén poden faltar campos individuais — un ficheiro pode ter título e non álbum. Non se expón nada máis dos metadatos do ficheiro: unha compra de iTunes rexistra o nome e o Apple ID do comprador, e eses nunca se len, a propósito.

{"ok":true,"type":"files","total":2,"page":1,"pages":1,"files":[
  {"share":"Ab3xK9pQ","name":"autobahn.mp3","mime":"audio/mpeg",
   "bytes":8123456,"url":"https://0wx.org/i/Ab3xK9pQ",
   "file_tags":{"artist":"Kraftwerk","title":"Autobahn","album":"Autobahn"}},
  {"share":"Zz7yT2mN","name":"photo.jpg","mime":"image/jpeg",
   "bytes":204800,"url":"https://0wx.org/i/Zz7yT2mN"}
]}
Códigos de erro
errorHTTPDescrición
unknown_action400Non existe esa acción.
bad_json400O corpo non era JSON válido, ou un campo contiña unha estrutura aniñada.
unexpected_parameter400Chegou un parámetro que esta acción non admite — normalmente un & sen codificar nun valor. A mensaxe nomea os parámetros.
bad_key401Non se recoñeceu a chave. Unha chave incorrecta rexéitase en lugar de tratarse silenciosamente como anónima.
bad_url400A URL está mal formada ou usa un esquema distinto de http(s), ftp ou gopher.
bad_lifetime400A duración non era un número nin un número seguido de m, h ou d.
no_content400Non se enviou nada que gardar.
url_too_long413A URL supera o límite de lonxitude.
paste_too_long413O texto supera o límite de pegado. Os límites mídense en bytes UTF-8, así que o texto non latino conta máis do que suxire o seu número de caracteres.
too_many_files413Máis ficheiros dos que acepta unha soa chamada.
no_usable_files415Rexeitáronse todos os ficheiros. Consulta a lista rejected para saber por que.
backend_unavailable502O backend de tradución non respondeu.
internal500Algo fallou inesperadamente. Rexistrouse.
Límites

Chama a whoami para ler os valores actuais en lugar de fixalos no código — estabeléceos o operador do servidor e poden cambiar. Os tamaños son bytes UTF-8.

Un cliente de shell

0wx.sh envolve todo o anterior. É shell POSIX puro, non precisa nada máis ca curl e é abondo curto como para lelo antes de executalo — que é o correcto cun script que vai gardar a túa chave de API. Pon a chave en OWX_KEY en lugar de pasar --key, e quedará fóra do historial do teu shell.

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

0wx.py fai o mesmo ca o cliente de shell, pero analiza a resposta e imprime o que significan os campos en lugar de darche JSON en bruto — engade --json cando queiras a forma en bruto. Só biblioteca estándar: sen requests, nada que instalar. Se escribes o teu propio cliente, as súas funcións send() e report() son as partes que paga a pena ler: entre ambas amosan como construír a petición, como sacar a mensaxe dunha fallida e que conteñen as respostas.

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

0wx.pl fai o mesmo ca o de Python e imprime a mesma saída. Só módulos do núcleo — HTTP::Tiny e JSON::PP veñen con Perl desde 5.14, así que non hai nada que instalar. Paga a pena lelo xunto ao cliente de Python se escribes o teu: as dúas linguaxes fallan de xeito distinto ante unha petición rota, e ambos scripts din onde.

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

0wx.ps1 é o equivalente do cliente de Python para Windows: os mesmos comandos, a mesma saída, e analiza a resposta en lugar de darche JSON en bruto — engade --json para iso. Está escrito para a Windows PowerShell que xa vén na máquina, así que non hai nada que instalar, e funciona sen cambios en PowerShell 7. Pode que precises Set-ExecutionPolicy -Scope Process Bypass na xanela desde a que o executes, que é Windows preguntando se de verdade queres executar un script descargado — unha pregunta razoable, e o ficheiro é abondo curto como para lelo antes.

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

0wx.html é o mesmo conxunto de lapelas ca o cliente de escritorio, en tres ficheiros — unha páxina, unha folla de estilos e un script — sen instalación, sen framework e sen cargar nada de ningún sitio que non sexa este. Tres en lugar dun porque a Content-Security-Policy do sitio prohibe script e estilo en liña, o que convén manter. Pódense soltar ficheiros sobre el. Hai que abrilo desde aquí e non gardalo e abrilo desde o teu disco: a API non envía cabeceiras cross-origin, así que a unha copia local o teu navegador rexeitaríalle cada petición antes de saír. A chave gárdase en memoria a non ser que marques a caixa para lembrala.

https://0wx.org/clients/0wx.html
Unha xanela en Windows

0wx-gui.ps1 é o mesmo conxunto de lapelas ca o cliente de escritorio, debuxado con WinForms — o que significa que non hai nada que instalar, porque xa forma parte de Windows. Pono no mesmo cartafol ca 0wx.ps1: a xanela toma prestado o manexo de peticións dese ficheiro en lugar de levar unha segunda copia, así que fan falta os dous. Windows preguntará antes de executar un script que non escribiu el, o cal é razoable; ambos ficheiros son abondo curtos como para lelos antes de responder.

powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
Unha xanela en Linux con GTK

0wx-gtk.pl é unha pequena xanela GTK con lapelas para subir, pegar, acurtar e explorar os teus ficheiros — como lista ou como galería de miniaturas, filtrada por galería. É o único cliente de aquí que precisa instalar algo — as ligazóns GTK3 de Perl — o que convén saber xunto á xanela de Windows de arriba, que non precisa nada en absoluto. Todo o demais que usa vén con Perl. A chave só se garda en memoria: pechar a xanela esquécea, e definir OWX_KEY énchea ao arrancar. Amose o que amose, a resposta en bruto do servidor está a un clic baixo “Server reply”.

apt install libgtk3-perl        # or: dnf install perl-Gtk3
wget https://0wx.org/clients/0wx-gtk.pl
chmod +x 0wx-gtk.pl
OWX_KEY=YOUR_KEY ./0wx-gtk.pl
Unha app para Android

0wx-android.apk fai o que fan os demais clientes, desde o móbil: subir, pegar, acurtar, traducir e explorar os teus ficheiros como lista ou galería. Compartir un ficheiro con ela desde calquera outra app sóbeo, e compartir texto gárdao como pegado. Non está en ningunha tenda de aplicacións, así que o teu dispositivo pedirache permiso para instalala — unha pregunta que convén tomar en serio en xeral, e a razón pola que todo o código fonte está tamén aquí: ábreo en Android Studio e compílao ti mesmo en lugar de fiarte do ficheiro. Compilar require JDK 21; o BUILDING.md incluído explica por que.

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

Deliberadamente non hai acción de descarga remota. Faría que o servidor recuperase unha URL escollida por quen chama, o que é unha superficie de falsificación de peticións, e un script pode explotalo moito máis ca un formulario. Sobe o ficheiro ti mesmo.


(p) 2018 0wx.org -/- Desenvolvido por Linux e GNU. ¡Viva livre ou morre! (root@0wx.org)