▼
English
Deutsch
Plattdüütsch
Lëtzebuergesch
Nederlands
Dansk
Svenska
Bokmål
Nynorsk
Íslenska
Føroyskt
Español
Català
Galego
Português
Français
Italiano
Latina
Română
Rumantsch
Gaeilge
Suomi
Magyar
Euskara
Esperanto
简体中文
繁體中文(台灣)
繁體中文(香港)
粵語
한국어
Tiếng Việt
ไทย
Bahasa Indonesia
Bahasa Melayu
हिन्दी
Ελληνικά
Polski
Čeština
Українська
Русский
Türkçe
العربية
עברית
Kiswahili
ʻŌlelo Hawaiʻi
tlhIngan Hol
Quenya
このサイトのフォームでできることすべてを、スクリプト向けに提供します。エラーを含め応答はすべてJSONなので、本文が結果なのか説明なのかを推測する必要はありません。
エンドポイントへ、フォームパラメーターかJSON本文でPOSTします。どちらも同等なので、お使いのツールで扱いやすいほうを選んでください。actionパラメーターで何をするかを選びます。人が入力したもの — ペーストのテキスト、URL、翻訳文 — には--data-urlencodeを使ってください。-dは値をそのまま送るため、最初の&で切れてしまいます。action自体のような固定値には素の-dで構いません。wgetには--data-urlencodeがまったくないので、wgetではそうした値を自分でパーセントエンコードするか、エンコード不要のJSON本文を送ってください。
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
フォーム本文では&がパラメーターの区切りで、curl -dは渡した内容をエンコードしません。そのためクエリ文字列を含むURLは最初の&で切れ、残りは別のパラメーターとして届きます。--data-urlencodeを使うか、JSONを送ってください。余計なパラメーターは無視せず拒否するので、リンクが半分だけ保存されることはなく、はっきり失敗します。
# 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
任意です。キーがない場合、リクエストは匿名となり、匿名の訪問者とまったく同じ扱いになります — どちらにせよ結果は公開で、違いはご自分のファイル一覧に載るかどうかだけです。アカウントページでキーを生成し、bearerトークンとして送信してください。apikeyパラメーターで渡すこともできますが、クエリ文字列に含めたキーはサーバーのログやブラウザーの履歴に残ります。
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
| action | パラメーター | 説明 |
|---|---|---|
whoami | — | キーが有効であることを確認し、現在の上限を返します。コストはかかりません。最初に呼んでください。 |
ip | — | お客様のアドレス、そのPTR、地理情報から求めた国・地域・都市、座標、送信されたuser agentを返します。キーは不要で、あってもなくても同じ応答です。Webページよりあえて狭くしています。WHOISもDNSゾーンもブロックリスト照会もないため、呼び出してもサーバーの負担はローカルデータベースの読み取り1回だけです。 |
upload | file (繰り返し可), resize, lifetime, gallery または g * | 1つ以上のファイルをアップロードします。multipart/form-dataである必要があります。ギャラリーを指定するとそのまま格納され、そのidが返されます。 |
tinyurl | url, lifetime | URLを短縮します。 |
hugeurl | url, lifetime | URLをわざと不条理なほど長くします。 |
paste | content, lifetime | テキストのブロックを保存し、そこへのリンクを返します。 |
translate | content, to, from | テキストを翻訳します。toとfromはlangsアクションが返すコードです — 必ずしも国コードではない点にご注意ください。デンマーク語はdkではなくdaです。fromは省略するかautoを指定でき、その場合はバックエンドが言語を判定します。短いテキストでは明示したほうが良い結果になります。 |
langs | translateが受け付ける言語をsupported_langsとして一覧します。言語ごとに1オブジェクトで、コードと名前を、サイトが提示する順序で返します。APIキーは不要です。 | |
dyndns | key, ip, format | ダイナミックDNS名を更新します。APIキーを必要としない唯一のアクションです。ルーターから呼ばれるもので、ルーターにはURL欄が1つあるだけでヘッダーを送る手段がないからです。keyはアカウントに表示される名前ごとの更新キーで、APIキーではありません。ipを省略すると呼び出し元のアドレスが使われます。応答は事実上の標準であるdyndns2の語 — good、nochg、badauth、abuse、dnserr — をプレーンテキストで返します。ルーターが解釈するのはこれだからです。通常のJSONが欲しければformat=jsonを付けてください。 |
listfiles * | page, g | 情報パネルに表示される内容に加えてサムネイルと直接リンクを付けて、ファイルを一覧します。gで1つのギャラリーに絞り込み、noneでどのギャラリーにも属さないファイルに絞り込めます。 |
listpastes * | page | テキストを一覧します。本文全体ではなく、それぞれ200文字のプレビュー付きです。 |
listurls * | page | 短縮URLと超長URLを、それぞれの指す先のアドレスとともに一覧します。 |
otl * | share | ご自分のファイルの1つへのワンタイムリンクを作成します。呼び出すたびに新しいリンクが発行されるので、同じファイルを2人に渡すとリンクは2つになります。 |
listotl * | page | 有効なワンタイムリンクを、それぞれの指すファイルと、そのファイルがその後期限切れになったかどうかとともに一覧します。 |
listgalleries * | — | ギャラリーをid、名前、ファイル数、公開状態とともに一覧します。 |
gallery * | g, publish | ギャラリーの公開状態を返し、publishが指定されていれば変更します。 |
move * | share (繰り返し可), gallery または g | ファイルをギャラリーへ移動します。名前(新規なら作成)またはidで指定します。どちらも省略するとメイン一覧に戻します。 |
delete * | share (繰り返し可), g, otl, withfiles | ファイル、テキスト、短縮URL、ギャラリー、ワンタイムリンク、あるいはその組み合わせを削除します。shareはまずご自分のファイルと、次にテキストとリンクと照合されるので、呼び出し側が種類ごとに分ける必要はありません。ワンタイムリンクは別にotlで指定します。リンクの削除が、リンク先ファイルの削除と紛らわしくなってはいけないからです。 |
* これらのアクションにはAPIキーが必要です。1つのアカウントのデータを読み書きするものなので、匿名の形はありません。
shareとgは、繰り返しフィールド、JSON配列、カンマ区切りのいずれでも受け付けます — お使いのツールで最も簡単なものをどうぞ。重複は無視されます。
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
ギャラリーを指定する場所 — uploadでもmoveでも — 指定方法は同じ2通りです。既存のidならg、名前ならgalleryで、名前が新規なら作成されます。両方送られた場合はgが優先されます。応答にはギャラリーのidが含まれます。ギャラリーの削除はギャラリーだけを削除し、中のファイルはメイン一覧に残る点にご注意ください — 確認のうえファイルごと削除するWebフォームとは異なります。ファイルも削除するにはwithfiles=trueを渡してください。グループ分けを整理するスクリプトが、うっかりアップロードを失うべきではないからです。
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
アップロードではJSON本文を使えません。ファイルはmultipartで送る必要があるためです。複数を一度に送るにはfileパートを繰り返してください。ファイルごとに個別に報告されます。応答には受理されたもののfilesリストと、拒否されたもののrejectedリストが含まれるので、部分的な成功も成功として扱われます。
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
これにはwget版がありません。wgetはmultipart/form-data本文を組み立てられず — curlの-Fに相当するものがありません — アップロードはmultipartでなければならないためです。curlを使うか、本文とバウンダリーをご自身で組み立てて--post-fileで送ってください。
何かを保存するすべてのアクションで任意です。秒数だけ、または数値にm・h・dを付けた形式を受け付けます — Webフォームと同じ書き方です。省略するか0を渡すと無期限に保持します。
応答はすべてokフィールドを持つJSONオブジェクトです。成功時は結果を、失敗時は安定したerrorコードと人が読めるmessageを含みます。コードで分岐し、メッセージはログに残してください。
{"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."}
ファイルにタグがある場合、listfilesはそのエントリにfile_tagsを追加します。アーティスト、タイトル、アルバムで、アップロード時にID3、Vorbisコメント、MP4アトムから読み取ったものです。報告するものがない場合 — ほとんどのファイルがそうです — このキーはnullではなく存在しませんので、読む前に有無を確認してください。個々のフィールドが欠けることもあります — タイトルはあるがアルバムはない、といった具合です。ファイルのメタデータのそれ以外は一切公開しません。iTunesで購入したファイルには購入者の氏名とApple IDが記録されていますが、それらは意図的に決して読み取りません。
{"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"}
]}
| error | HTTP | 説明 |
|---|---|---|
unknown_action | 400 | そのようなアクションはありません。 |
bad_json | 400 | 本文が有効なJSONでないか、フィールドに入れ子の構造が含まれています。 |
unexpected_parameter | 400 | このアクションが受け付けないパラメーターが届きました — たいていは値の中のエンコードされていない&です。メッセージにパラメーター名が示されます。 |
bad_key | 401 | キーを認識できませんでした。誤ったキーは黙って匿名扱いにせず拒否します。 |
bad_url | 400 | URLの形式が不正か、http(s)・ftp・gopher以外のスキームを使っています。 |
bad_lifetime | 400 | 有効期限が数値、または数値にm・h・dを付けた形式ではありません。 |
no_content | 400 | 保存する内容が送信されていません。 |
url_too_long | 413 | URLが上限より長すぎます。 |
paste_too_long | 413 | テキストがペーストの上限を超えています。上限はUTF-8のバイト数で測るため、非ラテン文字のテキストは文字数以上に消費します。 |
too_many_files | 413 | 1回の呼び出しで受け付ける数を超えるファイルです。 |
no_usable_files | 415 | すべてのファイルが拒否されました。理由はrejectedリストをご覧ください。 |
backend_unavailable | 502 | 翻訳バックエンドが応答しませんでした。 |
internal | 500 | 予期しない失敗が起きました。記録済みです。 |
現在の値はハードコードせず、whoamiを呼んで読み取ってください — サーバー運営者が設定しており、変わることがあります。サイズはUTF-8のバイト数です。
0wx.shは上記すべてを包んだものです。純粋なPOSIXシェルでcurl以外に何も必要とせず、実行前に読める短さです — APIキーを預けるスクリプトに対しては、それが正しい姿勢です。キーは--keyで渡さずOWX_KEYに入れておけば、シェルの履歴に残りません。
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'
0wx.pyはシェルクライアントと同じことをしますが、生のJSONを渡す代わりに応答を解析してフィールドの意味を表示します — 生の形が欲しいときは--jsonを付けてください。標準ライブラリのみで、requestsは不要、インストールするものもありません。ご自身でクライアントを書くなら、send()とreport()の2つの関数が読む価値のある部分です。リクエストの組み立て方、失敗したリクエストからメッセージを取り出す方法、応答に何が入っているかが分かります。
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'
0wx.plはPython版と同じことをし、同じ出力をします。コアモジュールのみで — HTTP::TinyとJSON::PPは5.14以降Perlに同梱されているため、インストールするものはありません。ご自身で書くならPythonクライアントと並べて読む価値があります。2つの言語は壊れたリクエストに対して異なる失敗をし、どちらのスクリプトもその場所を示しています。
wget https://0wx.org/clients/0wx.pl chmod +x 0wx.pl export OWX_KEY=YOUR_KEY ./0wx.pl listfiles
0wx.ps1はPythonクライアントのWindows版です。同じコマンド、同じ出力で、生のJSONを渡す代わりに応答を解析します — 生が欲しければ--jsonを付けてください。マシンに最初から入っているWindows PowerShell向けに書かれているためインストールは不要で、PowerShell 7でもそのまま動きます。実行するウィンドウでSet-ExecutionPolicy -Scope Process Bypassが必要になるかもしれません。これはダウンロードしたスクリプトを本当に実行するのかとWindowsが尋ねているのです — もっともな問いであり、ファイルは先に読める短さです。
$env:OWX_KEY = 'YOUR_KEY' .\0wx.ps1 listfiles .\0wx.ps1 paste --content 'hello & world' .\0wx.ps1 upload --file .\holiday.jpg --gallery 'Holiday 2026'
0wx.htmlはデスクトップクライアントと同じタブ構成を3つのファイル — ページ、スタイルシート、スクリプト — で構成したもので、インストール不要、フレームワーク不要、このサイト以外からは何も読み込みません。1つではなく3つなのは、サイトのContent-Security-Policyがインラインのスクリプトとスタイルを禁止しているためで、これは維持する価値があります。ファイルをドロップできます。保存してディスクから開くのではなくここから開く必要があります。APIはcross-originヘッダーを送らないため、ローカルコピーからのリクエストは送信前にブラウザーがすべて拒否してしまうからです。キーは、記憶するチェックを入れない限りメモリにのみ保持されます。
https://0wx.org/clients/0wx.html
0wx-gui.ps1はデスクトップクライアントと同じタブ構成をWinFormsで描いたものです — つまりインストールはまったく不要で、すでにWindowsの一部だからです。0wx.ps1と同じフォルダーに置いてください。ウィンドウは2つ目のコピーを持たず、そのファイルのリクエスト処理を借りるので、両方が必要です。Windowsは自分が書いていないスクリプトを実行する前に確認を求めますが、それはもっともな問いです。どちらのファイルも、答える前に読める短さです。
powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
0wx-gtk.plは、アップロード、ペースト、短縮、ファイル閲覧のタブを持つ小さなGTKウィンドウです — 一覧またはサムネイルギャラリーとして、ギャラリーで絞り込めます。ここにあるクライアントの中で唯一、インストールが必要なものがあり — PerlのGTK3バインディングです — 何も必要としない上のWindowsウィンドウと並べて覚えておく価値があります。それ以外に使うものはすべてPerlに同梱されています。キーはメモリにのみ保持されます。ウィンドウを閉じれば忘れ、OWX_KEYを設定すれば起動時に自動入力されます。何が表示されていても、サーバーの生の応答は“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
0wx-android.apkは他のクライアントと同じことを電話から行います。アップロード、ペースト、短縮、翻訳、そして一覧またはギャラリーでのファイル閲覧です。他のアプリからファイルを共有するとアップロードされ、テキストを共有するとテキストとして保存されます。どのアプリストアにもないため、端末がインストールの許可を求めてきます — これは一般に真剣に受け止めるべき問いであり、ソース一式をここにも置いている理由です。ファイルを信用する代わりに、Android Studioで開いてご自身でビルドしてください。ビルドにはJDK 21が必要で、その理由は同梱のBUILDING.mdに書いてあります。
https://0wx.org/clients/0wx-android.apk # install it https://0wx.org/clients/0wx-android.zip # build it yourself
リモート取得のアクションは意図的に用意していません。呼び出し側が指定したURLをサーバーに取得させることになり、リクエストフォージェリの攻撃面になるうえ、スクリプトはフォームよりはるかに激しく叩けるからです。代わりにご自身でファイルをアップロードしてください。