~0wx.es~ :: Tiedostojen jakaminen ja muita hyödyllisiä työkaluja


Lähetä TinyURL HugeURL Pastebin Tietoja Ilmoita Kirjaudu
Suomi
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 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

Kaikille 0wx.es-palvelun toiminnoille on API. Voit käyttää sitä skripteihin tai komentorivipohjaisiin komentoihin.

Kaikki, mitä tämän sivuston lomakkeet tekevät, skripteille. Jokainen vastaus on JSON:ia, virheet mukaan lukien, joten sinun ei koskaan tarvitse arvata, onko runko tulos vai selitys.

Pyynnön tekeminen

POST päätepisteeseen joko lomakeparametreilla tai JSON-rungolla. Molemmat ovat vastaavia; valitse se, jonka työkalusi tekevät helpommaksi. action-parametri valitsee, mitä tehdään. Käytä --data-urlencode-valitsinta kaikkeen, mitä ihminen on kirjoittanut — liitetekstiin, URL-osoitteeseen, käännökseen — koska -d lähettää arvon sellaisenaan ja se katkeaa ensimmäiseen &-merkkiin. Pelkkä -d sopii kiinteille arvoille kuten itse action-parametrille. wgetissä ei ole lainkaan --data-urlencode-valitsinta, joten wgetillä joko prosenttikoodaa tällaiset arvot itse tai lähetä JSON-runko, joka ei tarvitse koodausta.

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
Arvot, jotka sisältävät &

Lomakerungossa & erottaa parametrit, eikä curl -d koodaa antamaasi sisältöä. Kyselymerkkijonon sisältävä URL-osoite katkeaa siksi ensimmäiseen &-merkkiin, ja loppuosa saapuu erillisinä parametreina. Käytä --data-urlencode-valitsinta tai lähetä JSON:ia. Ylimääräiset parametrit hylätään sen sijaan, että ne ohitettaisiin, joten tämä epäonnistuu äänekkäästi eikä tallenna puolikasta linkkiä.

# 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
Todennus

Valinnainen. Ilman avainta pyyntö on anonyymi ja käyttäytyy täsmälleen kuten anonyymi vierailija — tulos on joka tapauksessa julkinen, ainoa ero on, päätyykö se tiedostoluetteloosi. Luo avain tilisivullasi ja lähetä se bearer-tunnisteena; sen välittäminen apikey-parametrina toimii myös, mutta kyselymerkkijonossa oleva avain päätyy palvelinlokeihin ja selaimen historiaan.

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
Toiminnot
actionParametritKuvaus
whoamiVahvistaa, että avain toimii, ja ilmoittaa nykyiset rajat. Ei maksa mitään; kutsu sitä ensin.
ipIlmoittaa osoitteesi, sen PTR:n, maan, alueen ja kaupungin, joihin se paikantuu, koordinaatit sekä lähettämäsi user agentin. Ei tarvitse avainta ja vastaa samoin avaimen kanssa tai ilman. Tarkoituksella verkkosivua suppeampi: ei WHOIS-, DNS-vyöhyke- eikä estolistahakuja, joten sen kutsuminen maksaa palvelimelle vain paikallisen tietokantaluvun.
uploadfile (toistettava), resize, lifetime, gallery tai g *Lähettää yhden tai useamman tiedoston. On oltava multipart/form-data. Gallerian nimeäminen sijoittaa ne suoraan siihen ja palauttaa sen tunnisteen.
tinyurlurl, lifetimeLyhentää URL-osoitteen.
hugeurlurl, lifetimePidentää URL-osoitteen, absurdisti, tarkoituksella.
pastecontent, lifetimeTallentaa tekstilohkon ja palauttaa linkin siihen.
translatecontent, to, fromKääntää tekstiä. to ja from ovat koodeja langs-toiminnosta — huomaa, että ne eivät aina ole maakoodeja: tanska on da, ei dk. from voidaan jättää pois tai antaa arvona auto, jolloin taustajärjestelmä tunnistaa kielen; sen antaminen tuottaa paremman tuloksen lyhyellä tekstillä.
langsListaa kielet, jotka translate hyväksyy, supported_langs-kenttänä: yksi objekti kieltä kohden, koodi ja nimi, siinä järjestyksessä kuin sivusto ne tarjoaa. Ei tarvitse API-avainta.
dyndnskey, ip, formatPäivittää dynaamisen DNS-nimen. Ainoa toiminto, joka ei tarvitse API-avainta: sitä kutsuu reititin, jolla on yksi kenttä URL-osoitteelle eikä mitään tapaa lähettää otsaketta. key on tililläsi näytettävä nimikohtainen päivitysavain, ei API-avaimesi. Jätä ip pois, niin käytetään osoitetta, josta kutsut. Vastaus on de facto dyndns2-sana — good, nochg, badauth, abuse tai dnserr — pelkkänä tekstinä, koska sitä reitittimet jäsentävät; lisää format=json tavallista JSON:ia varten.
listfiles *page, gListaa tiedostosi kaikkine Tiedot-paneelin näyttämine tietoineen sekä pienoiskuvan ja suoran linkin. g rajaa sen yhteen galleriaan, tai none tiedostoihin, jotka eivät ole missään galleriassa.
listpastes *pageListaa liitteesi, kustakin 200 merkin esikatselu koko rungon sijaan.
listurls *pageListaa lyhyet ja valtavat URL-osoitteesi sekä osoitteen, johon kukin osoittaa.
otl *shareLuo kertakäyttölinkin yhteen tiedostoistasi. Jokainen kutsu luo uuden, joten saman tiedoston antaminen kahdelle henkilölle tuottaa kaksi linkkiä.
listotl *pageListaa aktiiviset kertakäyttölinkkisi, tiedoston, johon kukin osoittaa, ja onko tiedosto sittemmin vanhentunut.
listgalleries *Listaa galleriasi tunnisteineen, nimineen, tiedostomäärineen ja julkaisutiloineen.
gallery *g, publishIlmoittaa gallerian julkaisutilan ja muuttaa sitä, kun publish annetaan.
move *share (toistettava), gallery tai gSiirtää tiedostoja galleriaan nimen (luodaan, jos uusi) tai tunnisteen perusteella. Jos molemmat jätetään pois, ne siirretään takaisin pääluetteloon.
delete *share (toistettava), g, otl, withfilesPoistaa tiedostoja, liitteitä, lyhyitä URL-osoitteita, gallerioita, kertakäyttölinkkejä tai mitä tahansa näiden yhdistelmää. Jakotunnistetta verrataan ensin tiedostoihisi ja sitten liitteisiisi ja linkkeihisi, joten kutsujan ei tarvitse lajitella niitä tyypin mukaan. Kertakäyttölinkit annetaan erikseen otl-kentässä: linkin poistamista ei saa voida sekoittaa sen osoittaman tiedoston poistamiseen.

* Nämä toiminnot tarvitsevat API-avaimen. Ne lukevat tai muuttavat yhden tilin omia tietoja, joten niistä ei ole anonyymiä muotoa.

Useita kerralla

share ja g hyväksyvät toistetun kentän, JSON-taulukon tai pilkuilla erotetun luettelon — sen, mikä on työkaluillesi helpointa. Kaksoiskappaleet ohitetaan.

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
Galleriat

Aina kun galleria nimetään — upload- tai move-toiminnossa — se annetaan samoilla kahdella tavalla: g olemassa olevalle tunnisteelle tai gallery nimelle, joka luodaan, jos se on uusi. Jos molemmat lähetetään, g voittaa. Vastaus sisältää gallerian tunnisteen. Huomaa, että gallerian poistaminen poistaa vain gallerian ja jättää sen tiedostot pääluetteloon — toisin kuin verkkolomake, joka poistaa ne kysyttyään. Anna withfiles=true poistaaksesi myös ne: ryhmittelyjään siivoavan skriptin ei pitäisi menettää lähetyksiä vahingossa.

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
Tiedostojen lähettäminen

Lähetykset eivät voi käyttää JSON-runkoa, koska tiedosto on lähetettävä multipart-muodossa. Toista file-osa lähettääksesi useita kerralla. Jokainen tiedosto raportoidaan erikseen: vastaus sisältää files-luettelon hyväksytyistä ja rejected-luettelon hylätyistä, joten osittainen onnistuminen on silti onnistuminen.

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

Tästä ei ole wget-muotoa. wget ei osaa rakentaa multipart/form-data-runkoa — sillä ei ole vastinetta curlin -F-valitsimelle — ja lähetysten on oltava multipart-muotoisia. Käytä curlia, tai kokoa runko ja raja itse ja lähetä se --post-file-valitsimella.

Elinaika

Valinnainen jokaisessa toiminnossa, joka tallentaa jotakin. Hyväksyy pelkät sekunnit tai luvun, jota seuraa m, h tai d — samat muodot kuin verkkolomakkeissa. Jätä pois tai anna 0 säilyttääksesi kohteen rajattomasti.

Vastaukset

Jokainen vastaus on JSON-objekti, jossa on ok-kenttä. Onnistuessa se sisältää tuloksen; epäonnistuessa se sisältää vakaan error-koodin ja ihmisen luettavan message-viestin. Haaraudu koodin perusteella, kirjaa viesti lokiin.

{"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."}
Äänitunnisteet

Kun tiedosto sisältää ne, listfiles lisää sen merkintään file_tags-kentän: esittäjä, nimi ja albumi, luettuna ID3-tunnisteista, Vorbis-kommenteista tai MP4-atomeista tiedoston lähetyshetkellä. Kun raportoitavaa ei ole, mikä koskee useimpia tiedostoja, avain puuttuu sen sijaan että olisi null, joten testaa sen olemassaolo ennen lukemista. Yksittäisiä kenttiä voi myös puuttua — tiedostolla voi olla nimi mutta ei albumia. Mitään muuta tiedoston metatiedoista ei paljasteta: iTunes-ostos tallentaa ostajan nimen ja Apple ID:n, eikä niitä tarkoituksella koskaan lueta.

{"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"}
]}
Virhekoodit
errorHTTPKuvaus
unknown_action400Toimintoa ei ole.
bad_json400Runko ei ollut kelvollista JSON:ia, tai jokin kenttä sisälsi sisäkkäisen rakenteen.
unexpected_parameter400Saapui parametri, jota tämä toiminto ei ota vastaan — yleensä koodaamaton & arvossa. Viesti nimeää parametrit.
bad_key401Avainta ei tunnistettu. Väärä avain hylätään sen sijaan, että sitä käsiteltäisiin hiljaisesti anonyyminä.
bad_url400URL-osoite on virheellinen tai käyttää muuta protokollaa kuin http(s), ftp tai gopher.
bad_lifetime400Elinaika ei ollut luku eikä luku, jota seuraa m, h tai d.
no_content400Tallennettavaa ei lähetetty.
url_too_long413URL-osoite on rajaa pidempi.
paste_too_long413Teksti on liiterajaa suurempi. Rajat mitataan UTF-8-tavuina, joten muu kuin latinalainen teksti vie enemmän kuin sen merkkimäärä antaa ymmärtää.
too_many_files413Enemmän tiedostoja kuin yksi kutsu hyväksyy.
no_usable_files415Kaikki tiedostot hylättiin. Katso syy rejected-luettelosta.
backend_unavailable502Käännöksen taustajärjestelmä ei vastannut.
internal500Jokin epäonnistui odottamatta. Se on kirjattu lokiin.
Rajat

Kutsu whoami lukeaksesi nykyiset arvot sen sijaan, että kovakoodaisit ne — palvelimen ylläpitäjä asettaa ne, ja ne voivat muuttua. Koot ovat UTF-8-tavuja.

Shell-asiakasohjelma

0wx.sh kääräisee kaiken edellä mainitun. Se on pelkkää POSIX-shelliä eikä tarvitse muuta kuin curlin, ja se on tarpeeksi lyhyt luettavaksi ennen ajamista — mikä on oikea tapa suhtautua skriptiin, jolla on API-avaimesi hallussaan. Laita avain OWX_KEY-muuttujaan sen sijaan, että antaisit --key-valitsimen, niin se pysyy poissa komentohistoriastasi.

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'
Python-asiakasohjelma

0wx.py tekee saman kuin shell-asiakasohjelma, mutta jäsentää vastauksen ja tulostaa, mitä kentät tarkoittavat, sen sijaan että antaisi raakaa JSON:ia — lisää --json, kun haluat raakamuodon. Vain standardikirjasto: ei requests-kirjastoa, ei mitään asennettavaa. Jos kirjoitat omaa asiakasohjelmaa, sen send()- ja report()-funktiot ovat lukemisen arvoisia: yhdessä ne näyttävät, miten pyyntö rakennetaan, miten viesti saadaan epäonnistuneesta pyynnöstä ja mitä vastaukset sisältävät.

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'
Perl-asiakasohjelma

0wx.pl tekee saman kuin Python-versio ja tulostaa saman tulosteen. Vain ydinmoduuleja — HTTP::Tiny ja JSON::PP ovat tulleet Perlin mukana versiosta 5.14 lähtien, joten mitään ei tarvitse asentaa. Lukemisen arvoinen Python-asiakasohjelman rinnalla, jos kirjoitat omaa: kielet epäonnistuvat rikkinäisessä pyynnössä eri tavoin, ja molemmat skriptit kertovat missä.

wget https://0wx.es/clients/0wx.pl
chmod +x 0wx.pl
export OWX_KEY=YOUR_KEY
./0wx.pl listfiles
PowerShell-asiakasohjelma

0wx.ps1 on Python-asiakasohjelman vastine Windowsille: samat komennot, sama tuloste, ja se jäsentää vastauksen sen sijaan, että antaisi raakaa JSON:ia — lisää --json sitä varten. Se on kirjoitettu koneella jo olevalle Windows PowerShellille, joten mitään ei tarvitse asentaa, ja se toimii sellaisenaan PowerShell 7:ssä. Saatat tarvita Set-ExecutionPolicy -Scope Process Bypass siinä ikkunassa, josta ajat sen; Windows kysyy näin, halusitko todella ajaa lataamasi skriptin — aiheellinen kysymys, ja tiedosto on tarpeeksi lyhyt luettavaksi ensin.

$env:OWX_KEY = 'YOUR_KEY'
.\0wx.ps1 listfiles
.\0wx.ps1 paste --content 'hello & world'
.\0wx.ps1 upload --file .\holiday.jpg --gallery 'Holiday 2026'
Ikkuna selaimessasi

0wx.html sisältää samat välilehdet kuin työpöytäasiakasohjelma, kolmena tiedostona — sivu, tyylitiedosto ja skripti — ilman asennusta, ilman kehystä ja lataamatta mitään muualta kuin tältä sivustolta. Kolme yhden sijaan, koska sivuston Content-Security-Policy kieltää sisäiset skriptit ja tyylit, mikä kannattaa säilyttää. Tiedostoja voi pudottaa siihen. Se on avattava täältä eikä tallennettuna omalta levyltä: API ei lähetä cross-origin-otsakkeita, joten paikallisen kopion jokainen pyyntö hylättäisiin selaimessasi ennen lähtöä. Avain pidetään muistissa, ellet rastita ruutua sen muistamiseksi.

https://0wx.es/clients/0wx.html
Ikkuna Windowsissa

0wx-gui.ps1 sisältää samat välilehdet kuin työpöytäasiakasohjelma, piirrettynä WinFormsilla — mikä tarkoittaa, ettei mitään tarvitse asentaa, koska se on jo osa Windowsia. Laita se samaan kansioon kuin 0wx.ps1: ikkuna lainaa tuon tiedoston pyyntöjen käsittelyä sen sijaan, että kantaisi toista kopiota, joten molemmat tarvitaan. Windows kysyy ennen kuin ajaa skriptin, jota se ei itse kirjoittanut, mikä on aiheellinen kysymys; molemmat tiedostot ovat tarpeeksi lyhyitä luettavaksi ennen vastaamista.

powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
Ikkuna Linuxissa GTK:lla

0wx-gtk.pl on pieni GTK-ikkuna, jossa on välilehdet lähettämiseen, liittämiseen, lyhentämiseen ja tiedostojesi selaamiseen — luettelona tai pienoiskuvagalleriana, galleriasuodattimella. Se on ainoa tämän sivun asiakasohjelma, joka tarvitsee jotakin asennettavaa — Perlin GTK3-sidokset — mikä kannattaa tietää yllä olevan Windows-ikkunan rinnalla, sillä se ei tarvitse mitään. Kaikki muu, mitä se käyttää, tulee Perlin mukana. Avain pidetään vain muistissa: ikkunan sulkeminen unohtaa sen, ja OWX_KEY-muuttujan asettaminen täyttää sen käynnistettäessä. Näyttipä se mitä tahansa, palvelimen raaka vastaus on yhden napsautuksen päässä kohdassa “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
Android-sovellus

0wx-android.apk tekee sen, mitä muutkin asiakasohjelmat, puhelimesta: lähettäminen, liittäminen, lyhentäminen, kääntäminen ja tiedostojesi selaaminen luettelona tai galleriana. Tiedoston jakaminen siihen mistä tahansa muusta sovelluksesta lähettää sen, ja tekstin jakaminen tallentaa sen liitteenä. Se ei ole missään sovelluskaupassa, joten laitteesi kysyy, sallitko asennuksen — mikä on kysymys, johon kannattaa yleisesti suhtautua vakavasti, ja syy siihen, että koko lähdekoodi on myös täällä: avaa se Android Studiossa ja käännä itse sen sijaan, että luottaisit tiedostoon. Kääntäminen vaatii JDK 21:n; BUILDING.md sen sisällä kertoo miksi.

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

Etänoutotoimintoa ei tarkoituksella ole. Se saisi palvelimen noutamaan kutsujan valitseman URL-osoitteen, mikä on pyyntöväärennöksen hyökkäyspinta, ja skripti voi ajaa sitä paljon kovemmin kuin lomake. Lähetä tiedosto sen sijaan itse.


(p) 2018 0wx.es -/- Voimanlähteenä Linux ja GNU. Live free or die! (root@0wx.es)