يضيف هذا المشروع مزامنة ثنائية الاتجاه بين trakt.tv وPlex Media Server. يتطلب حساب trakt.tv ولكن لا يوجد Plex premium ولا اشتراكات Trakt VIP، على عكس تطبيق Plex الذي توفره Trakt.
تم إنشاؤه في الأصل بواسطة @Taxel، ويتم صيانته الآن بواسطة المساهمين.
ملاحظة: لا يتم تخزين مفاتيح PyTrakt API بشكل آمن، لذلك إذا كنت لا تريد أن يكون لديك ملف يحتوي على تلك المفاتيح الموجودة على محرك الأقراص الثابتة لديك، فلا يمكنك استخدام هذا المشروع.
هل تبحث عن طريقة للمساهمة؟
من المعروف أن البرنامج النصي يعمل مع إصدارات Python 3.9-3.13.
التثبيت مع بيبكس.
pipx install PlexTraktSync
أو لتثبيت إصدار محدد:
pipx install PlexTraktSync==0.15.2 --force
وللترقية:
plextraktsync self-update
الذي يستدعي فقط pipx
مع:
pipx upgrade PlexTraktSync
لتشغيل:
plextraktsync sync
ملاحظة: سيستخدم تثبيت pipx
مسارات محددة لنظام التشغيل للتكوين، والسجلات، وذاكرة التخزين المؤقت، راجع وثائق Platformdirs للحصول على التفاصيل أو تحقق من إخراج أمر المعلومات.
يمكنك إعداد ملف إنشاء عامل الإرساء مثل هذا:
version : " 2 "
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
command : sync
container_name : plextraktsync
restart : on-failure:2
volumes :
- ./config:/app/config
environment :
- PUID=1000
- PGID=1000
- TZ=Europe/Tallinn
يمكنك استخدام إصدار محدد 0.25.16
:
image: ghcr.io/taxel/plextraktsync:0.25.16
أو أحدث إصدار 0.25.x:
image: ghcr.io/taxel/plextraktsync:0.25
ملاحظة: الإصدار main
هو إصدار التطوير ولا يتم دعم الإبلاغ عن الأخطاء في إصدارات التطوير.
لتشغيل المزامنة:
docker compose run --rm plextraktsync sync
ستتوقف الحاوية بعد اكتمال المزامنة. اقرأ قسم الإعداد لتشغيله تلقائيًا على فترات زمنية محددة.
هذا لتثبيت إصدار التطوير لاختبار ما إذا كان طلب السحب سيصلح بعض المشكلات.
راجع الدليل المساهمة حول كيفية تثبيت التعليمات البرمجية من طلب السحب.
ملاحظة: طريقة التثبيت هذه غير مدعومة. لقد تم توثيقه فقط من خلال مساهمة المستخدم.
.zip
من https://github.com/Taxel/PlexTraktSync/tagssetup.bat
لتثبيت المتطلبات وإنشاء اختصارات وإجراءات اختيارية (يتطلب Windows 7sp1 - 11) .ملاحظة: طريقة التثبيت هذه غير مدعومة. لقد تم توثيقه فقط من خلال مساهمة المستخدم.
الخيار 1 لإنشاء الحاوية: إنشاء حاوية Unraid يدوية لـ PlexTraktSync:
ghcr.io/taxel/plextraktsync:latest
(أو أي علامة تريدها).-it
للوضع التفاعلي.plextraktsync
لبدء عملية الاعتماد الموضحة أعلاه.الخيار 2 لإنشاء الحاوية: استخدم المكون الإضافي Unraid "تطبيقات المجتمع".
بمجرد التثبيت (أو إذا كان مثبتًا بالفعل):
قم بجدولة (كرون) الحاوية لتبدأ على فترات زمنية محددة لمعالجة المزامنة
بمجرد التثبيت (أو إذا كان مثبتًا بالفعل):
#!/bin/bash
# Check if the container is running
if [ "$(docker ps -q -f name=PlexTraktSync)" ]; then
echo "PlexTraktSync container is already running."
else
echo "PlexTraktSync container is not running. Starting it now..."
docker start PlexTraktSync
fi
# Run the sync command inside the container
docker exec PlexTraktSync plextraktsync sync
ملاحظة: طريقة التثبيت هذه غير مدعومة. لن تحصل على الدعم إذا كنت تستخدم طريقة التثبيت هذه.
يعتبر التثبيت من GitHub وضع المطور، وهو موثق في CONTRIBUTING.md.
ستحتاج إلى إنشاء تطبيق Trakt API إذا لم يكن لديك تطبيق بالفعل:
urn:ietf:wg:oauth:2.0:oob
كعنوان URL لإعادة التوجيه قم بتشغيل plextraktsync login
، وسيطلب منك البرنامج النصي بيانات الاعتماد المفقودة
ملاحظة لإعداد بيانات الاعتماد في حاوية Docker، راجع قسم تشغيل حاوية Docker
عند التشغيل لأول مرة، سيُطلب منك إعداد الوصول إلى Trakt وPlex.
اتبع التعليمات، وسيتم تخزين بيانات الاعتماد الخاصة بك ومفاتيح API في ملفات .env
و .pytrakt.json
. يتم تخزين عنوان URL والرمز المميز لـ Plex في servers.yml
.
إذا قمت بتمكين المصادقة الثنائية على Plex، فأدخل الرمز عند المطالبة بذلك. إذا لم تكن المصادقة الثنائية ممكّنة لديك، فما عليك سوى ترك المطالبة فارغة ثم الضغط على Enter.
يمكن استخدام Cronjobs اختياريًا على Linux أو macOS لتشغيل البرنامج النصي على فترات زمنية محددة.
على سبيل المثال، لتشغيل هذا البرنامج النصي في cronjob كل ساعتين:
$ crontab -e
0 */2 * * * $HOME/.local/bin/plextraktsync sync
which plextraktsync
لتحديد موقع الملف القابل للتنفيذ plextraktsync الخاص بنظامك وتحديثه وفقًا لذلك.بدلاً من cron، يمكن أيضًا استخدام برنامج جدولة عامل الإرساء مثل Ofelia لتشغيل البرنامج النصي على فترات زمنية محددة.
مثال على إنشاء عامل إرساء بفاصل زمني قدره 6 ساعات:
version : " 2 "
services :
scheduler :
image : mcuadros/ofelia:latest
container_name : scheduler
depends_on :
- plextraktsync
command : daemon --docker
volumes :
- /var/run/docker.sock:/var/run/docker.sock:ro
labels :
ofelia.job-run.plextraktsync.schedule : " @every 6h "
ofelia.job-run.plextraktsync.container : " plextraktsync "
plextraktsync :
image : ghcr.io/taxel/plextraktsync:latest
container_name : plextraktsync
command : sync
volumes :
- ./config:/app/config
لتعطيل أجزاء من وظائف هذا البرنامج، لا تنظر إلى أبعد من config.yml
. عند التشغيل لأول مرة، سيقوم البرنامج النصي بإنشاء config.yml
بناءً على config.default.yml
. إذا كنت تريد تخصيص الإعدادات قبل التشغيل لأول مرة (على سبيل المثال، لا تريد المزامنة الكاملة)، فيمكنك نسخ وتحرير config.yml
قبل تشغيل البرنامج النصي. هنا، في قسم المزامنة، يمكنك تعطيل الأشياء التالية عن طريق ضبطها من true
إلى false
في محرر النصوص:
سيستغرق التنفيذ الأول للبرنامج النصي (اعتمادًا على حجم مكتبة PMS لديك) وقتًا طويلاً. بعد ذلك، يتم تخزين تفاصيل الفيلم وقوائم Trakt مؤقتًا، لذا من المفترض أن يتم تشغيلها بشكل أسرع كثيرًا في المرة الثانية. ومع ذلك، فإن هذا يعني أن قوائم Trakt لا يتم تحديثها ديناميكيًا (وهو أمر جيد بالنسبة لقوائم مثل "المرشحون لجائزة الأوسكار لعام 2018" ولكنه قد لا يكون مثاليًا للقوائم التي يتم تحديثها كثيرًا). فيما يلي أوقات التنفيذ على خادم Plex الخاص بي: التشغيل الأول - 1228 ثانية، التشغيل الثاني - 111 ثانية
يمكنك عرض تقدم المزامنة في ملف plextraktsync.log
الذي سيتم إنشاؤه.
يمكنك استخدام --edit
أو --locate
flags لأمر config
لفتح ملف التكوين في المحرر أو في متصفح الملفات.
بشكل افتراضي، تتم معالجة كافة المكتبات. يمكنك تعطيل المكتبات بالاسم عن طريق تغيير excluded-libraries
في config.yml
.
يمكنك أيضًا تعيين excluded-libraries
لكل خادم في servers.yml
:
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
excluded-libraries :
- " Family Movies "
بالإضافة إلى ذلك، يمكنك إدراج المكتبات فقط المراد معالجتها، وفي هذه الحالة لن يتم استخدام excluded-libraries
العالمية لهذا الخادم.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " Movies "
- " TV Shows "
يمكنك رؤية القائمة النهائية للمكتبات باستخدام أمر المعلومات:
$ plextraktsync --server=Example1 info
Enabled 2 libraries in Plex Server:
- 1: Movies
- 2: TV Shows
إذا كنت تريد تحديد التكوين الخاص بك لكل خادم، فيمكنك القيام بذلك داخل servers.yml
. ضمن جزء config
من تكوين الخادم، يمكنك تحديد كيفية عمل هذا الخادم المحدد.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
sync :
plex_to_trakt :
collection : true
trakt_to_plex :
liked_lists : false
يؤدي استخدام sync
في تكوين الخادم إلى تجاوز تكوين المزامنة العام في config.yml
.
يمكن استخدام هذا أيضًا للحصول على تكوينات مختلفة بين المكتبات المختلفة. لتتمكن من القيام بذلك، عليك تحديد عدد الخوادم التي تحتاجها (على الأرجح يساوي عدد إعدادات التكوين المختلفة التي تحتاجها). على سبيل المثال:
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " Movies "
sync :
plex_to_trakt :
ratings : true
watched_status : true
trakt_to_plex :
ratings : true
watched_status : true
Example2 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " TV Shows "
sync :
plex_to_trakt :
ratings : true
watched_status : false
trakt_to_plex :
ratings : true
watched_status : false
سيؤدي التكوين أعلاه إلى جعل مكتبة "الأفلام" تقوم بمزامنة كل من التقييمات وحالة المشاهدة، بينما تقوم مكتبة "البرامج التلفزيونية" بمزامنة التقييمات فقط. لتشغيل المزامنة بعد ذلك، يتعين عليك تحديد --server Example1
أو --server Example2
لتشغيل المزامنة لهذا الخادم المحدد.
سيؤدي تشغيل أمر المزامنة بدون --server
إلى استخدام الخادم الافتراضي من .env
إذا كنت تريد تشغيل هذه المهام باستخدام ofelia
، فيمكنك القيام بذلك عن طريق تشغيل شيء مشابه لهذا في docker-compose.yml
الخاص بك:
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
command : sync
container_name : plextraktsync
profiles : ["schedule"]
volumes :
- /configs/mediarr/plextraktsync:/app/config
environment :
- PUID=1000
- PGID=1000
depends_on :
- plex
scheduler :
image : mcuadros/ofelia:latest
container_name : scheduler
command : daemon --docker
restart : unless-stopped
volumes :
- /var/run/docker.sock:/var/run/docker.sock:ro
labels :
ofelia.job-run.plextraktsync.schedule : " 0 6,18 * * * "
ofelia.job-run.plextraktsync.container : " plextraktsync "
ofelia.job-run.plextraktsync.command : " --server 'Example1' sync "
ofelia.job-run.plextraktsync2.schedule : " 0 12,0 * * * "
ofelia.job-run.plextraktsync2.container : " plextraktsync "
ofelia.job-run.plextraktsync2.command : " --server 'Example2' sync "
إذا كنت تقوم بتشغيل حاوية PlexTraktSync واحدة فقط، فستحتاج إلى التأكد من عدم تشغيل الوظيفتين Ofelia في نفس الوقت. تتخطى Ofelia جدولة تشغيل وظيفة جديدة إذا كانت الوظيفة السابقة لا تزال قيد التشغيل.
اعتمادًا على المدة التي تستغرقها المهمة لتشغيلها على الخادم الخاص بك، قد يتعين عليك الاحتفاظ بجدول الوظيفتين منفصلاً ببضع دقائق أو بضع ساعات. إذا كان لديك حاويتين مختلفتين من نوع PlexTraktSync في إنشاء عامل الإرساء، فيمكنك تشغيلهما في نفس الوقت.
التكوين أعلاه يعني أن المهمة يتم تشغيلها كل 6 ساعات، بالتناوب بين "الخادمين". تحتوي حاوية PlexTraktSync أيضًا على ملف تعريف إنشاء عامل إرساء يسمى "الجدول الزمني" مما يعني أنه لن يتم تشغيله تلقائيًا عند تشغيل docker compose up
على سبيل المثال.
مستوى التسجيل افتراضيًا هو INFO
. يمكن تغيير هذا إلى DEBUG عن طريق تحرير متغير "debug" في config.yml
إلى true
.
افتراضيًا، سيتم إلحاق السجلات، إذا كنت ترغب في الاحتفاظ بسجل تشغيلك الأخير فقط، فقم بتحرير متغير "الإلحاق" في config.yml
إلى false
.
قم بتشغيل plextraktsync --help
لرؤية الأوامر المتاحة. قم بتشغيل plextraktsync COMMAND --help
لرؤية المساعدة الخاصة بـ COMMAND
.
$ plextraktsync --help
Usage: plextraktsync [OPTIONS] COMMAND [ARGS]...
Plex-Trakt-Sync is a two-way-sync between trakt.tv and Plex Media Server
Options:
--version Print version and exit
--no-cache Disable cache in for Trakt HTTP requests
--no-progressbar Disable progressbar
--batch-delay INTEGER Time in seconds between each collection batch submit
to Trakt [default: 5]
--server NAME Plex Server name from servers.yml
--help Show this message and exit.
Commands:
bug-report Create a pre-populated GitHub issue with information...
cache Manage and analyze Requests Cache.
clear-collections Clear Movies and Shows collections in Trakt
config Print user config for debugging and bug reports.
download Downloads movie or subtitles to a local directory
imdb-import Import IMDB ratings from CSV file.
info Print application and environment version info
inspect Inspect details of an object
login Log in to Plex and Trakt if needed
plex-login Log in to Plex Account to obtain Access Token.
self-update Update PlexTraktSync to the latest version using pipx
sync Perform sync between Plex and Trakt
trakt-login Log in to Trakt Account to obtain Access Token.
unmatched List media that has no match in Trakt or Plex
watch Listen to events from Plex
watched-shows Print a table of watched shows
يمكنك المساهمة بنفسك بالوثائق المفقودة.
يدعم الأمر الفرعي sync
خيارات --sync=shows
و- --sync=movies
، بحيث يمكنك مزامنة أنواع معينة فقط من المكتبات. أو قائمة المراقبة فقط: --sync=watchlist
.
➔ plextraktsync sync --help
Usage: plextraktsync sync [OPTIONS]
Perform sync between Plex and Trakt
Options:
--sync [all|movies|shows|watchlist]
Specify what to sync [default: all]
--help Show this message and exit.
يمكنك استخدام أمر unmatched
لمسح مكتبتك وعرض الأفلام التي لا مثيل لها.
لم يتم تنفيذ دعم العروض التي لا مثيل لها بعد.
plextraktsync unmatched
يمكن استخدام أمر المعلومات لطباعة إصدارات الحزمة ومعلومات الحساب ومواقع ذاكرة التخزين المؤقت وأدلة التكوين والسجلات
$ plextraktsync info
PlexTraktSync Version: 0.16.0
Python Version: 3.10.0 (default, Oct 6 2021, 01:11:32) [Clang 13.0.0 (clang-1300.0.29.3)]
Plex API Version: 4.7.2
Trakt API Version: 3.2.1
Cache Dir: /Users/glen/Library/Caches/PlexTraktSync
Config Dir: /Users/glen/Library/Application Support/PlexTraktSync
Log Dir: /Users/glen/Library/Logs/PlexTraktSync
Plex username: nobody
Trakt username: nobody
Plex Server version: 1.24.3.5033-757abe6b4, updated at: 2021-02-21 17:00:00
Server has 2 libraries: ['Movies', 'TV Shows']
يُستخدم أمر Inspect للحصول على معلومات حول عناصر Plex Media Server، وهو أمر مفيد عند تصحيح الأخطاء والإبلاغ عن المشكلات.
123
plextraktsync inspect 123
plextraktsync inspect "https://app.plex.tv/desktop/#!/server/53aff62c4bb6027c1ada814d417e83ccdf4d5045/details?key=/library/metadata/123"
لتجنب المشاكل مع الأصداف المختلفة، ضع القيمة بين علامتي اقتباس.
يمكنك استخدام أمر watch
للاستماع إلى الأحداث من Plex Media Server وتشغيل التمرير.
ما هو الخربشة؟
التمرير يعني ببساطة تتبع ما تشاهده تلقائيًا. بدلاً من تسجيل الدخول من هاتفك إلى موقع الويب، يعمل هذا الأمر في الخلفية وينتقل تلقائيًا إلى Trakt بينما تستمتع بمشاهدة الوسائط الخاصة بك - Plex [email protected]
لتقييد التمرير بمستخدمك فقط (موصى به)، قم بتعيين ما يلي في config.yml
الخاص بك:
watch :
username_filter : true
لتشغيل أمر watch
:
plextraktsync watch
أو
docker compose run --rm plextraktsync watch
أو أضف command: watch
ملف إنشاء عامل الإرساء، docker compose up -d plextraktsync
لبدء الحاوية المنفصلة:
version : " 2 "
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
volumes :
- ./config:/app/config
command : watch
قم بإنشاء وحدة systemd بحيث تقوم بالتمرير تلقائيًا في الخلفية:
[Unit]
Description =PlexTraktSync watch daemon
After =network-online.target
[Service]
ExecStart =plextraktsync watch
Restart =on-failure
RestartSec =10
User =user
Group =user
[Install]
WantedBy =multi-user.target
لاحظ أنه اعتمادًا على طريقة التثبيت التي تستخدمها، قد تحتاج إلى تعيين أمر ExecStart كما يلي:
ExecStart =/path/to/plextraktsync/plextraktsync.sh watch
بعد ذلك سوف تحتاج إلى تمكين الخدمة:
sudo systemctl daemon-reload
sudo systemctl start PlexTraktSync.service
sudo systemctl enable PlexTraktSync.service
يمكنك أيضًا التشغيل كخدمة مستخدم systemd.
يسمح هذا الدليل باستخدام خوادم مختلفة بنفس التكوين.
يفترض هذا أن plextraktsync
مثبت مع pipx
للمستخدم الخاص بك.
# [email protected]
[Unit]
Description =PlexTraktSync watch daemon
After =network-online.target
[Service]
ExecSearchPath =%h/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart =plextraktsync watch -- server =%i
Restart =on-failure
RestartSec =10
[Install]
WantedBy =default.target
تثبيت ملف قالب الخدمة:
root
: /etc/xdg/systemd/user/[email protected]
لجميع المستخدمين~/.config/systemd/user/[email protected]
لمستخدمك فقطبعد ذلك، تحتاج إلى إعادة تحميل systemd:
root
: sudo systemctl daemon-reload
systemctl --user daemon-reload
الآن قم بإنشاء مثيلات بناءً على أسماء الخادم من servers.yml
، في هذا المثال SERVER_NAME
.
systemctl --user start "plextraktsync@SERVER_NAME.service"
systemctl --user status "plextraktsync@SERVER_NAME.service"
للحصول على سجلات كاملة، يمكنك استخدام journalctl
(أضف -f
لمتابعة السجلات):
journalctl --user -u "plextraktsync@SERVER_NAME.service"
إذا نجح كل شيء، قم بتمكينه للبدء التلقائي عند إعادة تشغيل المضيف
systemctl --user enable "plextraktsync@SERVER_NAME.service"
لكي تبدأ جلسة systemd --user دون الحاجة إلى تسجيل الدخول، يلزمك تمكين systemd-linger:
loginctl enable-linger
Plex Movie
و Plex TV Series
إلى تحسين توافق البرنامج النصي (للمطابقة أو لقائمة المراقبة). يوصى بالانتقال إلى وكيل Plex TV Series الجديد.تحقق من ترتيب حلقات Plex مقارنة بترتيب Trakt. إذا كانت الحلقات بترتيب مختلف، فلا ينبغي أن تكون هناك مشكلة لأنها محددة بالمعرفات. ولكن إذا كان هناك موسم أو حلقة مفقودة على Trakt (و tmdb)، فلا يمكن مزامنتها. يمكنك إصلاح المشكلة عن طريق إضافة الحلقات المفقودة أو تعديل البيانات التعريفية (على سبيل المثال، معرفات tvdb أو imdb المفقودة) على tmdb أو الإبلاغ عن مشكلة في البيانات التعريفية على Trakt (الإجابات). إنه مجاني لأي شخص للتسجيل وتحرير المعلومات في tmdb. سيتم تحديث Trakt من بيانات tmdb.
تأكد من استخدام الممارسات الجيدة حول وكيل Plex وتنظيم الملفات كما هو مذكور أعلاه. تحقق مما إذا كانت الحلقات غير مفقودة على Trakt كما هو موضح في الإجابة السابقة، وتحقق من ملء المعرفات الخارجية على tmdb.
يجب أن يحتوي مجلد الموسم 0 فقط على الحلقات التي تنتمي إلى الموسم 0، والتي تسمى أيضًا العروض الخاصة. يجب تخزين المقاطع الترويجية، والمشاهد المحذوفة، والميزات، والمقابلات،... في مجلد إضافي منفصل (ليس في الموسم 0) وفقًا لقواعد Plex. ضع في اعتبارك أن المواسم 0 ليست رسمية حقًا، لذا لا تتوافق أحيانًا مصادر البيانات (tmdb، وimdb، وtvdb). تحقق من الموسم 0 من العروض على trakt.tv للتعرف على تلك الحلقات الخاصة. استخدم tmdb كمصدر Plex بقدر ما تستطيع.
أسهل طريقة هي استخدام الحاويات ذات مجلد التكوين المخصص لكل مستخدم: Multi-User docker-compose.
نعم باستخدام عامل الإرساء، تحقق من صفحة المناقشات.
تحقق من المناقشات، ربما سأل شخص ما بالفعل ووجد الإجابة.