▼
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
كل ما تفعله النماذج على هذا الموقع، للبرامج النصية. كل رد هو JSON، بما في ذلك الأخطاء، فلا تضطر أبدًا إلى تخمين ما إذا كان المتن نتيجة أم تفسيرًا.
أرسل POST إلى نقطة النهاية إما بمعاملات نموذج أو بمتن JSON. كلاهما متكافئ؛ اختر ما تسهّله أدواتك. المعامل action يحدد ما يجب فعله. استخدم --data-urlencode لأي شيء كتبه إنسان — نص ملصق، عنوان URL، ترجمة — لأن -d يرسل القيمة خامًا وستُقطع عند أول &. -d العادي مناسب للقيم الثابتة مثل action نفسه. 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 الخاص به والبلد والمنطقة والمدينة التي يُحدَّد موقعه فيها والإحداثيات ووكيل المستخدم الذي أرسلته. لا يحتاج إلى مفتاح ويجيب بالطريقة نفسها بمفتاح أو بدونه. أضيق عمدًا من صفحة الويب: لا WHOIS ولا منطقة DNS ولا استعلامات قوائم الحظر، لذا لا يكلّف استدعاؤه الخادم سوى قراءة من قاعدة بيانات محلية. |
upload | file (قابل للتكرار), resize, lifetime, gallery أو g * | يرفع ملفًا أو أكثر. يجب أن يكون multipart/form-data. تسمية معرض تضع الملفات فيه مباشرة وتعيد معرّفه. |
tinyurl | url, lifetime | يختصر عنوان URL. |
hugeurl | url, lifetime | يطيل عنوان URL، بشكل سخيف، عمدًا. |
paste | content, lifetime | يخزّن كتلة نصية ويعيد رابطًا إليها. |
translate | content, to, from | يترجم النص. to وfrom رموز من الإجراء langs — لاحظ أنها ليست دائمًا رموز بلدان: الدنماركية هي da وليس dk. يمكن إغفال from أو إعطاؤه القيمة auto، مما يطلب من الخلفية اكتشاف اللغة؛ وتحديده يعطي نتيجة أفضل مع النصوص القصيرة. |
langs | يسرد اللغات التي يقبلها translate، ضمن supported_langs: كائن واحد لكل لغة، الرمز إلى الاسم، بالترتيب الذي يقدّمها به الموقع. لا يحتاج إلى مفتاح API. | |
dyndns | key, ip, format | يحدّث اسم DNS ديناميكيًا. الإجراء الوحيد الذي لا يحتاج إلى مفتاح API: يستدعيه جهاز توجيه لديه حقل واحد لعنوان URL ولا سبيل له لإرسال ترويسة. key هو مفتاح التحديث الخاص بكل اسم المعروض في حسابك، وليس مفتاح API الخاص بك. أغفل ip فيُستخدم العنوان الذي تستدعي منه. الرد هو كلمة dyndns2 المتعارف عليها — good أو nochg أو badauth أو abuse أو dnserr — كنص عادي، لأن هذا ما تحلّله أجهزة التوجيه؛ أضف format=json للحصول على JSON المعتاد. |
listfiles * | page, g | يسرد ملفاتك مع كل ما تعرضه لوحة المعلومات، بالإضافة إلى الصورة المصغّرة والرابط المباشر. g يحصرها في معرض واحد، أو none للملفات غير الموجودة في أي معرض. |
listpastes * | page | يسرد نصوصك الملصقة، مع معاينة من 200 حرف لكل منها بدلًا من المتن كاملًا. |
listurls * | page | يسرد عناوين URL القصيرة والضخمة الخاصة بك، مع العنوان الذي يشير إليه كل منها. |
otl * | share | ينشئ رابطًا أحادي الاستخدام لأحد ملفاتك. كل استدعاء يولّد رابطًا جديدًا، لذا فإن إعطاء الملف نفسه لشخصين يعطي رابطين. |
listotl * | page | يسرد روابطك أحادية الاستخدام النشطة، والملف الذي يشير إليه كل منها، وما إذا كان ذلك الملف قد انتهت صلاحيته منذ ذلك الحين. |
listgalleries * | — | يسرد معارضك مع معرّفاتها وأسمائها وعدد ملفاتها وحالة نشرها. |
gallery * | g, publish | يبلّغ عن حالة نشر معرض، ويغيّرها عند إعطاء publish. |
move * | share (قابل للتكرار), gallery أو g | ينقل الملفات إلى معرض، بالاسم (يُنشأ إن كان جديدًا) أو بالمعرّف. إغفال كليهما ينقلها مجددًا إلى القائمة الرئيسية. |
delete * | share (قابل للتكرار), g, otl, withfiles | يحذف ملفات أو نصوصًا ملصقة أو عناوين URL قصيرة أو معارض أو روابط أحادية الاستخدام، أو أي مزيج منها. تُطابَق المشاركة أولًا مع ملفاتك ثم مع نصوصك الملصقة وروابطك، فلا يضطر المستدعي إلى فرزها حسب النوع. تُوضع الروابط أحادية الاستخدام في otl على حدة: إزالة رابط يجب ألا تُخلط بحذف الملف الذي يشير إليه. |
* تحتاج هذه الإجراءات إلى مفتاح API. فهي تقرأ أو تغيّر بيانات حساب بعينه، لذا لا توجد صيغة مجهولة لها.
يقبل 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 — يُعطى بالطريقتين نفسيهما: g لمعرّف موجود، أو gallery لاسم يُنشأ إن كان جديدًا. إذا أُرسل كلاهما، يفوز g. يحمل الرد معرّف المعرض. لاحظ أن حذف معرض يزيل المعرض فقط ويترك ملفاته في القائمة الرئيسية — على خلاف نموذج الويب الذي يحذفها بعد السؤال. مرّر 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 — ليس لديه مكافئ لـ -F في curl — والرفع يجب أن يكون multipart. استخدم curl، أو ركّب المتن والحد الفاصل بنفسك وأرسله بـ --post-file.
اختياري في كل إجراء يخزّن شيئًا. يقبل ثوانيَ مجردة، أو رقمًا متبوعًا بـ m أو h أو d — نفس الصيغ التي تقبلها نماذج الويب. أغفله أو مرّر 0 للاحتفاظ بالعنصر إلى أجل غير مسمى.
كل رد هو كائن JSON يحتوي على حقل ok. عند النجاح يحمل النتيجة؛ وعند الفشل يحمل رمز 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 الخاص به، وهذه لا تُقرأ أبدًا عمدًا.
{"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 | ملفات أكثر مما يقبله استدعاء واحد. |
no_usable_files | 415 | رُفضت جميع الملفات. راجع قائمة rejected لمعرفة السبب. |
backend_unavailable | 502 | لم تستجب خلفية الترجمة. |
internal | 500 | فشل شيء ما بشكل غير متوقع. تم تسجيله. |
استدعِ whoami لقراءة القيم الحالية بدلًا من تثبيتها في الكود — يحددها مشغّل الخادم ويمكن أن تتغير. الأحجام ببايتات UTF-8.
0wx.sh يغلّف كل ما سبق. إنه POSIX shell خالص ولا يحتاج إلى شيء سوى curl، وهو قصير بما يكفي لقراءته قبل تشغيله — وهذا هو التصرف الصحيح مع برنامج نصي سيحمل مفتاح API الخاص بك. ضع المفتاح في OWX_KEY بدلًا من تمرير --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 يفعل ما يفعله عميل shell، لكنه يحلّل الرد ويطبع معنى الحقول بدلًا من إعطائك JSON خامًا — أضف --json عندما تريد الصيغة الخام. المكتبة القياسية فقط: لا requests، ولا شيء للتثبيت. إذا كنت تكتب عميلك الخاص، فدالتاه send() وreport() هما الجزءان الجديران بالقراءة: تُظهران معًا كيفية بناء الطلب، وكيفية استخراج الرسالة من طلب فاشل، وما تحتويه الردود.
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 يُشحنان مع Perl منذ 5.14، لذا لا شيء للتثبيت. يستحق القراءة إلى جانب عميل Python إذا كنت تكتب عميلك الخاص: تفشل اللغتان بشكل مختلف عند طلب معطوب، وكلا البرنامجين يوضح أين.
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 هو مجموعة التبويبات نفسها الموجودة في عميل سطح المكتب، في ثلاثة ملفات — صفحة وورقة أنماط وبرنامج نصي — بلا تثبيت ولا إطار عمل ولا تحميل لأي شيء من أي مكان سوى هذا الموقع. ثلاثة بدلًا من واحد لأن سياسة أمان المحتوى في الموقع تمنع البرامج النصية والأنماط المضمّنة، وهو أمر يستحق الحفاظ عليه. يمكن إفلات الملفات عليه. يجب فتحه من هنا وليس حفظه وفتحه من قرصك: لا ترسل الواجهة ترويسات عابرة للأصول، لذا فإن النسخة المحلية سيرفض متصفحك كل طلب منها قبل أن يغادر. يُحفظ المفتاح في الذاكرة ما لم تحدد مربع تذكّره.
https://0wx.org/clients/0wx.html
0wx-gui.ps1 هو مجموعة التبويبات نفسها الموجودة في عميل سطح المكتب، مرسومة بـ WinForms — أي لا شيء للتثبيت على الإطلاق، لأنه جزء من Windows بالفعل. ضعه في المجلد نفسه مع 0wx.ps1: تستعير النافذة معالجة الطلبات من ذلك الملف بدلًا من حمل نسخة ثانية، لذا كلا الملفين مطلوب. سيسألك Windows قبل تشغيل برنامج نصي لم يكتبه، وهو سؤال وجيه؛ وكلا الملفين قصير بما يكفي لقراءته قبل الإجابة.
powershell -ExecutionPolicy Bypass -File .\0wx-gui.ps1
0wx-gtk.pl نافذة GTK صغيرة بتبويبات للرفع واللصق والاختصار وتصفح ملفاتك — كقائمة أو كمعرض صور مصغّرة، مع تصفية حسب المعرض. إنه العميل الوحيد هنا الذي يحتاج إلى تثبيت شيء — ارتباطات GTK3 لـ Perl — وهو ما يجدر معرفته بالمقارنة مع نافذة 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 من اختيار المستدعي، وهذا سطح هجوم لتزوير الطلبات، والبرنامج النصي يمكنه استغلاله بقوة أكبر بكثير من النموذج. ارفع الملف بنفسك بدلًا من ذلك.