~0wx.cat~ :: Dosya barındırma ve başka yararlı araçlar


Yükle TinyURL HugeURL Pastebin Hakkında Bildir Giriş
Türkçe ▼
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 Čeština Čeština Українська Українська Русский Русский العربية العربية עברית עברית Kiswahili Kiswahili ʻŌlelo Hawaiʻi ʻŌlelo Hawaiʻi tlhIngan Hol tlhIngan Hol Quenya Quenya

0wx.cat üzerindeki tüm işlevler için bir API var. Betiklerde ya da konsoldan kullanabilirsiniz.

Bu sitedeki formların yaptığı her şey, betikler için. Hatalar dahil her yanıt JSON'dur; bu yüzden bir gövdenin sonuç mu açıklama mı olduğunu asla tahmin etmeniz gerekmez.

İstek yapma

Uç noktaya form parametreleriyle ya da JSON gövdeyle POST yapın. İkisi eşdeğerdir; araçlarınızın kolaylaştırdığını seçin. action parametresi ne yapılacağını seçer. Bir insanın yazdığı her şey için — yapıştırma metni, URL, çeviri — --data-urlencode kullanın; çünkü -d değeri ham gönderir ve ilk &'de kesilir. Düz -d, action gibi sabit değerler için yeterlidir. wget'te --data-urlencode hiç yoktur; bu yüzden wget ile ya bu tür değerleri kendiniz yüzde kodlayın ya da kodlama gerektirmeyen bir JSON gövde gönderin.

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

curl -X POST https://0wx.cat/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.cat/api.cgi
& içeren değerler

Form gövdesinde & parametreleri ayırır ve curl -d verdiğinizi kodlamaz. Bu nedenle sorgu dizesi olan bir URL ilk &'sinde kesilir ve gerisi ayrı parametreler olarak gelir. --data-urlencode kullanın ya da JSON gönderin. Başıboş parametreler yok sayılmak yerine reddedilir; bu yüzden bu, yarım bağlantı saklamak yerine gürültüyle başarısız olur.

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

# right
curl -X POST https://0wx.cat/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.cat/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.cat/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.cat/api.cgi
Kimlik doğrulama

İsteğe bağlı. Anahtar olmadan istek anonimdir ve tam olarak anonim bir ziyaretçi gibi davranır — sonuç her durumda herkese açıktır, tek fark dosya listenize düşüp düşmediğidir. Hesap sayfanızda bir anahtar oluşturun ve bunu bearer belirteci olarak gönderin; apikey parametresiyle geçirmek de çalışır, ancak sorgu dizesindeki bir anahtar sunucu günlüklerine ve tarayıcı geçmişine düşer.

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

wget -qO- --header='Authorization: Bearer YOUR_KEY' \
     --post-data 'action=whoami' https://0wx.cat/api.cgi
Eylemler
actionParametrelerAçıklama
whoami—Bir anahtarın çalıştığını doğrular ve geçerli sınırları bildirir. Hiçbir maliyeti yoktur; önce bunu çağırın.
ip—Adresinizi, PTR'sini, coğrafi olarak konumlandığı ülke, bölge ve şehri, koordinatları ve gönderdiğiniz user agent'ı bildirir. Anahtar gerektirmez ve anahtarlı ya da anahtarsız aynı yanıtı verir. Web sayfasından bilerek daha dar: WHOIS yok, DNS bölgesi yok, engel listesi sorgusu yok; bu yüzden çağırmak sunucuya yerel bir veritabanı okumasından başka bir şeye mal olmaz.
uploadfile (tekrarlanabilir), resize, lifetime, gallery veya g *Bir veya daha fazla dosya yükler. multipart/form-data olmalıdır. Bir galeri adı vermek dosyaları doğrudan ona koyar ve galerinin id'sini döndürür.
tinyurlurl, lifetimeBir URL'yi kısaltır.
hugeurlurl, lifetimeBir URL'yi kasıtlı olarak saçma derecede uzatır.
pastecontent, lifetimeBir metin bloğunu saklar ve ona bir bağlantı döndürür.
translatecontent, to, fromMetin çevirir. to ve from, langs eyleminden gelen kodlardır — bunların her zaman ülke kodu olmadığına dikkat edin: Danca da'dır, dk değil. from atlanabilir veya auto verilebilir; bu, arka uçtan dili algılamasını ister. Belirtmek kısa metinde daha iyi sonuç verir.
langstranslate'in kabul ettiği dilleri supported_langs olarak listeler: dil başına bir nesne, koddan ada, sitenin sunduğu sırayla. API anahtarı gerektirmez.
dyndnskey, ip, formatDinamik bir DNS adını günceller. API anahtarı gerektirmeyen tek eylem: bir URL için tek alanı olan ve başlık gönderme yolu bulunmayan bir yönlendirici tarafından çağrılır. key, hesabınızda gösterilen ada özel güncelleme anahtarıdır, API anahtarınız değil. ip'yi atlarsanız çağırdığınız adres kullanılır. Yanıt, fiili dyndns2 sözcüğüdür — good, nochg, badauth, abuse veya dnserr — düz metin olarak; çünkü yönlendiricilerin ayrıştırdığı budur. Her zamanki JSON için format=json ekleyin.
listfiles *page, gDosyalarınızı Bilgi panelinin gösterdiği her şeyle, ayrıca küçük resim ve doğrudan bağlantıyla listeler. g tek bir galeriyle sınırlar; none ise hiçbir galeride olmayan dosyalarla.
listpastes *pageMetinlerinizi, her birinin tüm gövdesi yerine 200 karakterlik ön izlemesiyle listeler.
listurls *pageKısa ve devasa URL'lerinizi, her birinin işaret ettiği adresle listeler.
otl *shareDosyalarınızdan birine tek kullanımlık bağlantı oluşturur. Her çağrı yeni bir tane üretir; bu yüzden aynı dosyayı iki kişiye vermek iki bağlantı verir.
listotl *pageEtkin tek kullanımlık bağlantılarınızı, her birinin işaret ettiği dosyayı ve o dosyanın o zamandan beri süresinin dolup dolmadığını listeler.
listgalleries *—Galerilerinizi id'leri, adları, dosya sayıları ve yayın durumlarıyla listeler.
gallery *g, publishBir galerinin yayın durumunu bildirir ve publish verildiğinde değiştirir.
move *share (tekrarlanabilir), gallery veya gDosyaları ada göre (yeniyse oluşturulur) ya da id'ye göre bir galeriye taşır. İkisi de atlanırsa ana listeye geri taşınırlar.
delete *share (tekrarlanabilir), g, otl, withfilesDosyaları, metinleri, kısa URL'leri, galerileri, tek kullanımlık bağlantıları ya da bunların herhangi bir karışımını siler. Bir share önce dosyalarınızla, sonra metinleriniz ve bağlantılarınızla eşleştirilir; bu yüzden çağıranın bunları türe göre ayırması gerekmez. Tek kullanımlık bağlantılar ayrıca otl içinde verilir: bir bağlantıyı kaldırmak, işaret ettiği dosyayı silmekle karıştırılabilir olmamalıdır.

* Bu eylemler API anahtarı gerektirir. Tek bir hesabın kendi verilerini okur ya da değiştirirler; bu yüzden anonim biçimleri yoktur.

Aynı anda birden fazla

share ve g, tekrarlanan bir alan, bir JSON dizisi ya da virgülle ayrılmış bir liste kabul eder — araçlarınız hangisini kolaylaştırıyorsa. Yinelenenler yok sayılır.

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

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

Bir galeri nerede adlandırılırsa adlandırılsın — upload ya da move üzerinde — aynı iki biçimde verilir: var olan bir id için g ya da yeniyse oluşturulan bir ad için gallery. İkisi de gönderilirse g kazanır. Yanıt galeri id'sini taşır. Bir galeriyi silmenin yalnızca galeriyi kaldırdığını ve dosyalarını ana listede bıraktığını unutmayın — sorduktan sonra dosyaları da silen web formunun aksine. Onları da silmek için withfiles=true geçirin: gruplamalarını düzenleyen bir betik yüklemeleri kazara kaybetmemelidir.

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

curl -X POST https://0wx.cat/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.cat/api.cgi
Dosya yükleme

Yüklemeler JSON gövdeyi kullanamaz; çünkü bir dosya multipart olarak gönderilmelidir. Birden fazlasını aynı anda göndermek için file kısmını tekrarlayın. Her dosya ayrı bildirilir: yanıt, kabul edilenlerin files listesini ve reddedilenlerin rejected listesini taşır; bu yüzden kısmi başarı yine de başarıdır.

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

Bunun wget biçimi yok. wget, multipart/form-data gövde oluşturamaz — curl'ün -F'sinin karşılığı yoktur — ve yüklemeler multipart olmalıdır. curl kullanın ya da gövdeyi ve sınırı kendiniz oluşturup --post-file ile gönderin.

Ömür

Bir şey saklayan her eylemde isteğe bağlıdır. Yalın saniye ya da ardından m, h veya d gelen bir sayı kabul eder — web formlarının aldığı biçimlerin aynısı. Öğeyi süresiz tutmak için atlayın ya da 0 geçirin.

Yanıtlar

Her yanıt, ok alanı olan bir JSON nesnesidir. Başarıda sonucu taşır; başarısızlıkta kararlı bir error kodu ve okunabilir bir message taşır. Koda göre dallanın, iletiyi günlüğe yazın.

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

{"ok":false,"error":"url_too_long",
 "message":"URL exceeds the maximum length."}
Ses etiketleri

Bir dosya bunları taşıyorsa listfiles girdisine file_tags ekler: sanatçı, başlık ve albüm; dosya yüklendiğinde ID3, Vorbis yorumları ya da MP4 atomlarından okunur. Bildirilecek bir şey olmadığında — ki çoğu dosya böyledir — anahtar null olmak yerine yoktur; bu yüzden okumadan önce varlığını sınayın. Tek tek alanlar da eksik olabilir — bir dosyanın başlığı olup albümü olmayabilir. Dosyanın meta verilerinden başka hiçbir şey açığa çıkarılmaz: bir iTunes satın alması alıcının adını ve Apple ID'sini kaydeder ve bunlar bilerek asla okunmaz.

{"ok":true,"type":"files","total":2,"page":1,"pages":1,"files":[
  {"share":"Ab3xK9pQ","name":"autobahn.mp3","mime":"audio/mpeg",
   "bytes":8123456,"url":"https://0wx.cat/i/Ab3xK9pQ",
   "file_tags":{"artist":"Kraftwerk","title":"Autobahn","album":"Autobahn"}},
  {"share":"Zz7yT2mN","name":"photo.jpg","mime":"image/jpeg",
   "bytes":204800,"url":"https://0wx.cat/i/Zz7yT2mN"}
]}
Hata kodları
errorHTTPAçıklama
unknown_action400Böyle bir eylem yok.
bad_json400Gövde geçerli JSON değildi ya da bir alan iç içe bir yapı içeriyordu.
unexpected_parameter400Bu eylemin almadığı bir parametre geldi — genellikle bir değerdeki kodlanmamış bir &. İleti parametreleri adlandırır.
bad_key401Anahtar tanınmadı. Yanlış bir anahtar, sessizce anonim sayılmak yerine reddedilir.
bad_url400URL hatalı biçimlendirilmiş ya da http(s), ftp veya gopher dışında bir şema kullanıyor.
bad_lifetime400Ömür bir sayı ya da ardından m, h veya d gelen bir sayı değildi.
no_content400Saklanacak hiçbir şey gönderilmedi.
url_too_long413URL sınırdan uzun.
paste_too_long413Metin, yapıştırma sınırından büyük. Sınırlar UTF-8 bayt olarak ölçülür; bu yüzden Latin olmayan metin, karakter sayısının ima ettiğinden daha fazla yer tutar.
too_many_files413Tek bir çağrının kabul ettiğinden fazla dosya.
no_usable_files415Tüm dosyalar reddedildi. Nedeni için rejected listesine bakın.
backend_unavailable502Çeviri arka ucu yanıt vermedi.
internal500Bir şey beklenmedik biçimde başarısız oldu. Günlüğe kaydedildi.
Sınırlar

Geçerli değerleri koda gömmek yerine whoami çağırarak okuyun — bunlar sunucu işletmecisi tarafından belirlenir ve değişebilir. Boyutlar UTF-8 bayttır.

Bir kabuk istemcisi

0wx.sh yukarıdakilerin tümünü sarar. Saf POSIX kabuğudur, curl dışında hiçbir şeye ihtiyaç duymaz ve çalıştırmadan önce okunacak kadar kısadır — API anahtarınızı tutacak bir betik için doğru olan da budur. Anahtarı --key geçirmek yerine OWX_KEY içine koyun; böylece kabuk geçmişinizin dışında kalır.

wget https://0wx.cat/clients/0wx.sh
chmod +x 0wx.sh
export OWX_KEY=YOUR_KEY
./0wx.sh help
./0wx.sh paste --content 'hello & world'
Bir Python istemcisi

0wx.py kabuk istemcisiyle aynı şeyi yapar, ancak size ham JSON vermek yerine yanıtı ayrıştırır ve alanların ne anlama geldiğini yazdırır — ham biçimi istediğinizde --json ekleyin. Yalnızca standart kütüphane: requests yok, kurulacak bir şey yok. Kendi istemcinizi yazıyorsanız send() ve report() işlevleri okumaya değer kısımlardır: birlikte isteğin nasıl kurulduğunu, başarısız olandan iletinin nasıl alındığını ve yanıtların ne içerdiğini gösterirler.

wget https://0wx.cat/clients/0wx.py
chmod +x 0wx.py
export OWX_KEY=YOUR_KEY
./0wx.py listfiles
./0wx.py listfiles --json | jq '.files[].url'
Bir Perl istemcisi

0wx.pl Python olanla aynı şeyi yapar ve aynı çıktıyı yazdırır. Yalnızca çekirdek modüller — HTTP::Tiny ve JSON::PP, 5.14'ten beri Perl ile birlikte gelir; bu yüzden kurulacak bir şey yoktur. Kendinizinkini yazıyorsanız Python istemcisinin yanında okumaya değer: iki dil bozuk bir istekte farklı biçimde başarısız olur ve her iki betik de nerede olduğunu söyler.

wget https://0wx.cat/clients/0wx.pl
chmod +x 0wx.pl
export OWX_KEY=YOUR_KEY
./0wx.pl listfiles
Bir PowerShell istemcisi

0wx.ps1, Python istemcisinin Windows karşılığıdır: aynı komutlar, aynı çıktı ve size ham JSON vermek yerine yanıtı ayrıştırır — bunun için --json ekleyin. Makinede zaten bulunan Windows PowerShell için yazılmıştır; bu yüzden kurulacak bir şey yoktur ve PowerShell 7'de değişmeden çalışır. Çalıştırdığınız pencerede Set-ExecutionPolicy -Scope Process Bypass gerekebilir; bu, Windows'un indirdiğiniz bir betiği gerçekten çalıştırmak isteyip istemediğinizi sormasıdır — haklı bir soru ve dosya önce okunacak kadar kısadır.

$env:OWX_KEY = 'YOUR_KEY'
.\0wx.ps1 listfiles
.\0wx.ps1 paste --content 'hello & world'
.\0wx.ps1 upload --file .\holiday.jpg --gallery 'Holiday 2026'
Tarayıcınızda bir pencere

0wx.html, masaüstü istemcisiyle aynı sekme kümesidir, üç dosya olarak — bir sayfa, bir stil sayfası ve bir betik — kurulum yok, çerçeve yok ve bu site dışında hiçbir yerden hiçbir şey yüklenmez. Bir yerine üç; çünkü sitenin Content-Security-Policy'si satır içi betik ve stili yasaklar ki bu korunmaya değer. Üzerine dosya bırakılabilir. Kaydedip diskinizden açmak yerine buradan açılmalıdır: API cross-origin başlıkları göndermez; bu yüzden yerel bir kopyanın her isteği daha çıkmadan tarayıcınız tarafından reddedilirdi. Hatırlanması için kutuyu işaretlemediğiniz sürece anahtar bellekte tutulur.

https://0wx.cat/clients/0wx.html
Windows'ta bir pencere

0wx-gui.ps1, masaüstü istemcisiyle aynı sekme kümesidir, WinForms ile çizilmiştir — bu, kurulacak hiçbir şey olmadığı anlamına gelir; çünkü bu zaten Windows'un bir parçasıdır. 0wx.ps1 ile aynı klasöre koyun: pencere, ikinci bir kopya taşımak yerine o dosyanın istek işlemesini ödünç alır; bu yüzden ikisi de gerekir. Windows kendi yazmadığı bir betiği çalıştırmadan önce soracaktır ki bu haklı bir sorudur; her iki dosya da yanıtlamadan önce okunacak kadar kısadır.

powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
GTK ile Linux'ta bir pencere

0wx-gtk.pl, yükleme, yapıştırma, kısaltma ve dosyalarınıza göz atma sekmeleri olan küçük bir GTK penceresidir — liste ya da küçük resim galerisi olarak, galeriye göre süzülmüş. Buradaki, bir şey kurulmasını gerektiren tek istemcidir — Perl'ün GTK3 bağlamaları — ki hiçbir şey gerektirmeyen yukarıdaki Windows penceresinin yanında bilinmeye değer. Kullandığı diğer her şey Perl ile birlikte gelir. Anahtar yalnızca bellekte tutulur: pencereyi kapatmak onu unutturur, OWX_KEY ayarlamak ise başlangıçta doldurur. Size ne gösterirse göstersin, sunucunun ham yanıtı “Server reply” altında bir tık uzaktadır.

apt install libgtk3-perl        # or: dnf install perl-Gtk3
wget https://0wx.cat/clients/0wx-gtk.pl
chmod +x 0wx-gtk.pl
OWX_KEY=YOUR_KEY ./0wx-gtk.pl
Bir Android uygulaması

0wx-android.apk diğer istemcilerin yaptığını telefondan yapar: yükleme, yapıştırma, kısaltma, çeviri ve dosyalarınıza liste ya da galeri olarak göz atma. Başka herhangi bir uygulamadan ona dosya paylaşmak dosyayı yükler, metin paylaşmak ise metni yapıştırma olarak saklar. Hiçbir uygulama mağazasında değildir; bu yüzden cihazınız kurulumuna izin vermenizi isteyecektir — genel olarak ciddiye alınmaya değer bir soru ve tüm kaynağın burada da olmasının nedeni: dosyaya güvenmek yerine Android Studio'da açıp kendiniz derleyin. Derleme JDK 21 gerektirir; içindeki BUILDING.md nedenini söyler.

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

Bilerek uzaktan getirme eylemi yoktur. Bu, sunucunun çağıranın seçtiği bir URL'yi getirmesine yol açardı; bu bir istek sahteciliği yüzeyidir ve bir betik bunu bir formdan çok daha sert zorlayabilir. Onun yerine dosyayı kendiniz yükleyin.


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