GolinksPRO Download Manager
  1. الرئيسية
  2. تعليمات
  3. سطر الأوامر والأتمتة

سطر الأوامر والأتمتة

GDM can be driven without its window in three ways:

  • سطر أوامر التطبيق نفسه، ويستخدم مفاتيح التبديل نفسها التي يستخدمها IDM: أرسل عملية تنزيل إلى التطبيق قيد التشغيل من نص برمجي أو ملف دفعي أو برنامج آخر.
  • misterdownloadmanager-cli، أداة سطر أوامر منفصلة: تنزيل الملفات ومقاطع الفيديو والتورنت في طرفية، مع إظهار التقدم، بدون التطبيق.
  • The automation API: other programs list the running app's downloads (as JSON) and pause, start, remove or delete them, over a local, token-protected channel. AI assistants use it through GDM's MCP server: see AI assistants.

To run the whole app without a window, on a home server or a NAS, see Run GDM on a server (misterdownloadmanager --headless); to control it from a phone, Control GDM from your phone.

تستخدم الأمثلة مسارات Windows؛ في macOS و Linux، البرامج لها نفس الأسماء بدون .exe.

سطر أوامر التطبيق

misterdownloadmanager.exe /d URL [/p folder] [/f name] [/a] [/n] [/s]
المفتاح ما تفعله
/d URL العنوان المراد تنزيله.
/p folder احفظه في هذا المجلد (وإلا مجلد الفئة من الخيارات ← حفظ في).
/f name احفظه بهذا الاسم.
/a أضفه إلى قائمة التنزيل الرئيسية دون بدء تشغيله.
/n صامت: لا توجد نافذة معلومات ملف التنزيل، يبدأ التنزيل (أو يوضع في قائمة الانتظار، مع /a) على الفور.
/s ابدأ قائمة التنزيل الرئيسية.
/exit احفظ وأغلق التطبيق قيد التشغيل (يستخدمه المثبت قبل الترقية).
/startup Start in the notification area, the window hidden: what Launch GolinksPRO Download Manager on startup starts GDM with when you sign in. Where no notification area shows GDM's icon (some Linux desktops), GDM starts minimized. A running GDM stays as it is.
ملف .torrent أو رابط magnet: Open it in Add torrent (what Windows passes when GDM opens torrents).

Switches can start with / or -, in any case. If GDM is running, the command goes to it; if not, GDM starts and carries it out. For example:

misterdownloadmanager.exe /d https://example.com/files/report.pdf /p D:\Reports /n
misterdownloadmanager.exe /d https://example.com/big.iso /a
misterdownloadmanager.exe /s

misterdownloadmanager-cli

It comes with every download of GDM, next to the app (the installer puts it in GDM's folder). It works on its own: the app needn't run, except for status and api.

الأمر ما تفعله
get URL [-o folder\|file] [-c connections] [-H "Header: value"]... [--checksum hash] [--dns choice] [--adapter name] تنزيل ملف بما يصل إلى 8 اتصالات (-c، من 1 إلى 128)، مع إظهار التقدم. Ctrl+C يوقفه مؤقتا؛ resume يتابعه. --checksum يتحقق من الملف المكتمل: MD5 سداسي عشري، SHA-1، SHA-256، SHA-512 أو CRC32، اختياريا باسم (sha256:…). --dns يختار DNS: system (الافتراضي)؛ خدمة وكيفية طلبها، cloudflare-https، quad9-tls، google-plain، adguard-https، nextdns-tls؛ عناوين خوادم DNS، 9.9.9.9,149.112.112.112؛ أو عنوان DNS-over-HTTPS. لا يعود أبدا إلى DNS الخاص بالنظام. --adapter يرسل كل اتصال عبر محول شبكة واحد، باسمه (Ethernet، wg0) أو أحد عناوينه؛ عندما لا يكون متصلا، لا يتم إرسال أي شيء ويفشل التنزيل. رابط من مضيف ملفات يدعمه أحد حسابات Debrid الخاصة بك (الخيارات ← الحسابات) يمر عبر هذا الحساب، كما هو الحال في التطبيق، وget يقول through Real-Debrid؛ --direct يقوم بتنزيل العنوان نفسه (حسابات خدمة Debrid).
resume file.mdm.json [-c connections] [-H ...] [--direct] متابعة تنزيل متوقف مؤقتا أو معطل من الملف .mdm.json المجاور له. عبر حساب Debrid، كما في get: تقدم الخدمة رابطا جديدا عندما ينتهي صلاحية الرابط القديم؛ --direct يتابع من العنوان نفسه.
install-gallery-dl تثبيت أو تحديث gallery-dl، لمعرض الصور: يتم التحقق من قائمة المجاميع الاختبارية الخاصة به مقابل مفتاح توقيع مؤلفه، والبرنامج مقابل تلك القائمة (Windows وLinux x86-64؛ قم بتثبيته بنفسك في أي مكان آخر).
gallery-get URL [-o folder] [--limit N] [--adapter name] ينزل صور معرض (فئة ويكيميديا كومنز، ألبوم فليكر، ...) إلى مجلد يحمل اسمه داخل -o؛ --limit يأخذ هذا العدد الأقصى، الأول الذي يدرجه الموقع. إذا بدأ مرة أخرى، فإنه يجلب الصور الجديدة فقط. --adapter يرسل اتصالات gallery-dl عبر محول شبكة واحد، كما هو الحال بالنسبة لـ get.
video-info URL اعرض الفيديوهات الموجودة في صفحة (مثل YouTube أو Vimeo أو غيرهما) والجودات المتاحة للاختيار.
playlist-info URL [--from N] [--count N] اعرض فيديوهات قائمة تشغيل أو قناة، كل فيديو في سطر، بالترتيب الوارد في القائمة: موقعه ومدة عرضه وعنوانه ورابطه.
playlist-get URL [-f selector] [-o folder] [--from N] [--count N] تنزيل فيديوهات قائمة تشغيل أو قناة واحدا تلو الآخر، في مجلد يحمل اسم القائمة داخل -o. -f هي جودة واحدة للكل، كما هو الحال بالنسبة لـ video-get (افتراضيا الأفضل لكل فيديو؛ bv*[height<=720]+ba/b[height<=720] = حتى 720p؛ ba = الصوت الأصلي؛ mp3:320، opus:، flac: كما هو الحال بالنسبة لـ video-get).
video-get URL [-f selector] [-o folder] [--subs langs] [--auto-subs] [--embed-subs] [--adapter name] ينزل فيديو؛ -f يأخذ محدد جودة من video-info (b = أفضل ملف واحد؛ ba = الصوت وحده كما هو في الموقع، غير محول؛ mp3:320، mp3:256، mp3:192 أو mp3:128 = الصوت كملف MP3 بمعدل البت هذا، mp3:0 بأفضل معدل بت متغير له؛ opus: = كملف Opus؛ flac: = كملف FLAC، بدون فقدان ولكن ليس أفضل من صوت الموقع؛ تتطلب التحويلات ffmpeg). --subs يحفظ الترجمات بجانبه: رموز اللغة من video-info (en,fr)، أو all لكل لغة قدمها الرافع؛ --auto-subs يأخذ التسميات التوضيحية التلقائية للموقع بدلا من ذلك؛ --embed-subs يضعها في الفيديو (يتطلب ffmpeg، MP4 أو MKV). --adapter يرسل اتصالات yt-dlp (واتصالات ffmpeg) عبر محول شبكة واحد، كما هو الحال بالنسبة لـ get؛ عندما لا يكون متصلا، لا يبدأ شيء.
install-ytdlp, install-ffmpeg Install or update the helpers videos need: yt-dlp (checked against its signing key) and ffmpeg (Windows; on macOS and Linux GDM uses the system's).
torrent-info SOURCE اسم التورنت، الملفات (مرقمة) والحجم؛ SOURCE هو رابط مغناطيسي أو ملف .torrent.
torrent-get SOURCE [-o folder] [--files 0,2] [--use-existing] نزل تورنت، أو بعض ملفاته فقط. إذا كانت بعض ملفاته موجودة بالفعل في المجلد، فإنه يتوقف ويسميها؛ --use-existing يستخدمها بدلا من ذلك (يتم الاحتفاظ بما يتطابق، ويتم تنزيل الباقي).
torrent-create PATH -o file.torrent إنشاء .torrent لملف أو مجلد (يجد الأقران ذلك من خلال DHT).
status تنزيلات التطبيق قيد التشغيل، بصيغة JSON، مع معرفاتها (يجب تشغيل واجهة برمجة تطبيقات الأتمتة).
pause ID..., start ID... إيقاف مؤقت للتنزيلات الجارية، أو بدء (استئناف) التنزيلات المتوقفة أو الموجودة في قائمة الانتظار أو الفاشلة، في التطبيق قيد التشغيل.
remove ID..., delete ID... إزالة التنزيلات من قائمة التطبيق قيد التشغيل: remove يحتفظ بملفاتها، delete يحذفها أيضا. يتم إيقاف التنزيل الجاري مؤقتا أولا (pause).
api on, api off تشغيل أو إيقاف واجهة برمجة تطبيقات الأتمتة للتطبيق قيد التشغيل.

misterdownloadmanager-cli help <command>يعرض كل الخيارات. ينتهي الأمر الذي يفشل (التطبيق لا يعمل، أو يرد بخطأ، أو يتعطل التنزيل) بالرمز 1. على سبيل المثال:

misterdownloadmanager-cli get https://example.com/big.iso -o D:\Downloads -c 16 --checksum sha256:9f86d0…
misterdownloadmanager-cli video-get "https://www.youtube.com/watch?v=aqz-KE-bpKQ" -f "b[height=720]"
misterdownloadmanager-cli torrent-get "magnet:?xt=urn:btih:…" --files 0

JSON للبرامج النصية والبرامج

مع --json (قبل أو بعد الأمر)، يطبع كل أمر JSON بدلا من النص، كائن واحد لكل سطر، لكي تقرأه السكربتات وعوامل الذكاء الاصطناعي:

الأمر يطبع
get, resume {"event": "through", "service"}أولا عندما يمر التنزيل عبر حساب Debrid، ثم سطر {"event": "progress", "downloaded", "size", "speed", "connections", "segments"} كل نصف ثانية، ثم {"event": "done", "path", "size", "seconds"}، أو {"event": "paused", "state"} بعد Ctrl+C (state هو الملف الذي يأخذه resume).
video-get {"event": "progress", "downloaded", "size", "speed"}أسطر، ثم {"event": "done", "path", "subtitles", "subtitle_problems"}: ملفات الترجمة المحفوظة بجانبه، واللغات التي رفضها الموقع ({"code", "name", "reason", "beside"}؛ beside: جاءت في محاولة ثانية، بجانب الفيديو بدلا من داخله).
torrent-get {"event": "progress", "phase", "downloaded", "size", "speed", "peers", "peers_seen"}أسطر، ثم {"event": "done", "path", "size"}، أو {"event": "stopped", "downloaded", "seconds"} مع --seconds.
video-info {"title", "choices": [{"label", "format", "size"}], "subtitles": [{"code", "name", "automatic"}]}؛ format للاختيار هو ما يأخذه video-get -f، وcode للترجمة هو ما يأخذه --subs.
torrent-info {"name", "info_hash", "size", "files": [{"index", "size", "path"}]}.
torrent-create {"info_hash", "path"}.
install-ytdlp, install-ffmpeg {"tool", "version", "path"}.
status، pause، start، remove، delete،api إجابة التطبيق، وهي JSON بالفعل (انظر أدناه).

الأحجام بالبايت (null بينما غير معروف)، والسرعات بالبايت في الثانية. الفشل يطبع {"error": "…"} ويخرج بالرمز 1. على سبيل المثال:

misterdownloadmanager-cli --json get https://example.com/big.iso -o D:\Downloads
{"event":"progress","downloaded":4194304,"size":1073741824,"speed":52428800,"connections":8,"segments":8}
…
{"event":"done","path":"D:\\Downloads\\big.iso","size":1073741824,"seconds":20.4}

واجهة برمجة تطبيقات الأتمتة

يمكن للبرامج الأخرى أن تسأل التطبيق قيد التشغيل عما يقوم بتنزيله، وإيقاف التنزيلات مؤقتا أو بدءها أو إزالتها أو حذفها. واجهة برمجة التطبيقات معطلة افتراضيا؛ قم بتشغيلها باستخدام misterdownloadmanager-cli api on (وإيقافها باستخدام api off).

How a program talks to GDM

  1. While it runs, GDM listens on a port of 127.0.0.1 (this computer only) and writes the port and a secret token to ipc.json in its data folder: - Windows: %APPDATA%\misterdownloadmanager\ipc.json - macOS: ~/Library/Application Support/misterdownloadmanager/ipc.json - Linux: ~/.local/share/misterdownloadmanager/ipc.json - A portable copy: data\ipc.json next to the program.

The token changes at every start; only programs that can read your data folder (yours) can use it. 2. Connect to that port and send one line of JSON: the token and the command's fields, e.g. {"token": "<token>", "query": "list"}. 3. GDM answers with one line: ok for a command, or a JSON object for a question.

ماذا يفهم

الحقول (بالإضافة إلى token) الإجابة
{"query": "list"} كل تنزيل والسرعة الكلية: {"downloads": [{"id", "file", "url", "path", "status", "size", "downloaded", "speed", "added", "category", "error"}], "speed": bytes per second, "queues": [{"name", "running", "ids"}], "categories": [{"key", "name"}], "free": bytes}. status هي Queued، Downloading، Stopped، Complete أو Error؛ size هي null عندما تكون غير معروفة؛ error (سبب الفشل) موجودة فقط للتنزيل في Error؛ category هي key للفئة؛ free هي المساحة الحرة حيث تذهب التنزيلات (null عندما تكون غير معروفة). فقط عندما تكون واجهة برمجة التطبيقات (API) قيد التشغيل.
{"action": "pause", "ids": [3, 4]} يعمل على التنزيلات حسب المعرف: "pause"، "start"، "remove" (تم الاحتفاظ بالملف) أو "delete" (تم حذف الملف أيضا). يجيب {"done": [3], "skipped": [{"id": 4, "why": "not running"}]}؛ يجب إيقاف التنزيل الجاري مؤقتا قبل إزالته أو حذفه. فقط عندما تكون واجهة برمجة التطبيقات قيد التشغيل.
{"action": "start_queue", "queue": "Main download queue"} يبدأ (أو مع "stop_queue"، يوقف) قائمة الانتظار بهذا الاسم (اسم من queues في القائمة). يجيب {"done": [], "skipped": []}، أو {"error": …, "code": "unknown-queue"}. فقط عندما تكون واجهة برمجة التطبيقات (API) قيد التشغيل.
{"api": true} / {"api": false} يقوم بتشغيل أو إيقاف واجهة برمجة التطبيقات: {"api": true}.
{"url": "https://…", "dir": "D:\\Files", "name": "a.zip", "silent": true} يضيف تنزيلا، كما تفعل /d /p /f /n في سطر الأوامر ("later": true هي /a)؛ ok. "category" (مفتاح من categories في القائمة) يضعه في مجلد تلك الفئة بدلا من المجلد الذي يختاره نوعه؛ "queue" (اسم قائمة انتظار) هي قائمة الانتظار التي ينتظر فيها مع "later". أيضا مع إيقاف تشغيل واجهة برمجة التطبيقات (API)، مثل سطر الأوامر.
{"start_queue": true} يبدأ قائمة انتظار التنزيل الرئيسية؛ ok.

يجاب عن سؤال أو إجراء غير معروف بـ {"error": "…"}، وكذلك عن سؤال عند إيقاف API، حينها تكون الإجابة "code": "api-off" لكي تتمكن البرامج من التحقق؛ فقد يتغير نص الخطأ. ويجاب عن الرمز غير الصحيح بـ denied.

يصف مخطط JSON كل طلب وإجابة، حقلا بحقل: automation-api.schema.json (ومتاح أيضا على https://misterdownloadmanager.com/automation-api.schema.json). ينشأ المخطط من الكود الذي يستخدمه التطبيق للإجابة، لذا يظل دقيقا؛ ويمكن للبرامج استخدامه للتحقق مما ترسله وتقرأه، أو لإنشاء أنواعها منه.

أمثلة

بوويرشيل (Windows):

$ep = Get-Content "$env:APPDATA\misterdownloadmanager\ipc.json" | ConvertFrom-Json
$client = New-Object Net.Sockets.TcpClient("127.0.0.1", $ep.port)
$stream = $client.GetStream()
$writer = New-Object IO.StreamWriter($stream); $reader = New-Object IO.StreamReader($stream)
$writer.WriteLine((@{ token = $ep.token; query = "list" } | ConvertTo-Json -Compress))
$writer.Flush()
$reader.ReadLine() | ConvertFrom-Json | Select-Object -ExpandProperty downloads | Format-Table file, status, downloaded, size
$client.Close()

بايثون:

import json, os, socket

ipc = os.path.join(os.environ["APPDATA"], "misterdownloadmanager", "ipc.json")  # see above elsewhere
ep = json.load(open(ipc))
with socket.create_connection(("127.0.0.1", ep["port"])) as s:
    s.sendall((json.dumps({"token": ep["token"], "query": "list"}) + "\n").encode())
    answer = json.loads(s.makefile().readline())
for d in answer["downloads"]:
    print(d["file"], d["status"], d["downloaded"], d["size"])

لإضافة تنزيل بدلا من ذلك، أرسل {"token": "…", "url": "https://example.com/a.zip", "silent": true}.

مجاني، مفتوح المصدر، بدون إعلانات، بدون فترة تجريبية.

Download GolinksPRO Download Manager