كيفية تنزيل مسلسلاتك المفضلة تلقائيًا

في منشور آخر تحدثنا عنه Torrent الحلقة Downloader (TED)، برنامج ممتاز مكتوب بلغة جافا يسمح لنا بإضافة مسلسلاتنا المفضلة وتنزيلها تلقائيًا عند ظهور فصول جديدة.

الطريقة الموضحة في هذا المنشور هي بديل لـ TED ، والتي من المحتمل أن يجدها الكثير منكم مفيدة..

ملحوظة: قبل أن نبدأ ، يبدو من الحكمة أن نقول إن هناك طرقًا أخرى لتحقيق نفس النتائج. تتمثل إحدى طرق القيام بذلك في استخدام TED ، ولكن هناك أيضًا بعض عملاء التورنت الذين يأتون بدعم RSS (مما يجعل كل شيء أسهل كثيرًا). أيضًا ، هناك نصوص أخرى (مشابهة لتلك الموضحة أدناه) تقوم بنفس الشيء (بل وأفضل) ... أفكر ، على سبيل المثال ، في FlexRSS.

تتكون الطريقة من إنشاء مهمة مجدولة تقوم بتشغيل برنامج نصي بيثون بين الحين والآخر. يقوم هذا النص بتنزيل ملفات التورنت عبر RSS. تسمح العديد من مواقع تنزيل التورنت بهذا الخيار ، وأكثرها شيوعًا ezRSS. تتمثل ميزة استخدام RSS لتنزيل السيول في أنه يتيح لك "الاشتراك" وتنزيل السيول الخاصة بمسلسلاتك المفضلة عند ظهور فصول جديدة. تمامًا كما يحدث عند الاشتراك في مدونة أو موجز الأخبار.

الخطوات الواجب اتباعها

1.- قم بتثبيت الحزمة بيثون- شوربة جميلة.

sudo apt-get install python-beautifulsoup

2.- افتح محرر النصوص المفضل لديك. انسخ الكود التالي فيه واحفظ الملف بالاسم التالي: ~ / bin / tormon.py

#! / usr / bin / env python

استيراد urllib2 ، urlparse
من urllib2 استيراد HTTPError و URLError
من BeautifulSoup استيراد BeautifulSoup
استيراد نظام التشغيل
استيراد optparse

__usage __ = ""
tormon.py -O ~ / test / tormon -u "http: //rss.feed"
'' '

فئة رئيسية (كائن):
    '' '
    يتحقق tormon من تغذية RSS بحثًا عن السيول الجديدة. عندما يعثر على ملف .torrent جديد ، إلى
    يقوم بتنزيله إلى دليل إخراج محدد ، حيث (من المفترض) مراقبة
    سيقوم برنامج torrent بتنزيل الملف المقابل.    
    '' '
    def parse_options (ذاتي):
        الاستخدام = 'الاستخدام:٪ بروغ [خيارات]' + __ الاستخدام__
        المحلل اللغوي = optparse.OptionParser (الاستخدام = الاستخدام)
        محلل. add_option (
            '-O'، '--output_dir'، dest = 'output_dir'،
            help = "الدليل الذي يتم فيه حفظ التورنت الجديد" ،
            metavar = 'DIR')
        محلل. add_option (
            '-f'، '--filetype'، dest = 'filetype'،
            الإجراء = "إلحاق" ،
            افتراضي = [] ،
            مساعدة = "أنواع الملفات المسموح بها" ،
            metavar = "TYPE")
        محلل. add_option (
            '-d'، '--downloaded_torrents'، dest = 'download_torrents'،
            افتراضي = os.path.expanduser ('~ / .downloaded_torrents')،
            help = "سجل التورنت الذي تم تنزيله بالفعل" ،
            metavar = "FILE")
        محلل. add_option (
            '-e'، '--error_log'، dest = 'error_log'،
            مساعدة = "فشل تنزيل سجل السيول تورمون" ،
            metavar = "FILE")
        محلل. add_option (
            '-b'، '--batch'، dest = 'batch'،
            help = 'ملف يحتوي على قائمة عناوين url لخلاصة rss' ،
            metavar = "FILE")
        محلل. add_option (
            '-u'، '--url'، dest = 'url'،
            الإجراء = "إلحاق" ،
            افتراضي = [] ،
            help = 'url الخاص بخلاصة RSS' ،
            metavar = "URL")
        محلل. add_option (
            '-m'، '- mark_all_downloaded'، dest = 'mark_all_downloaded'،
            الإجراء = 'store_true' ،
            افتراضي = خطأ ،
            help = "ضع علامة على جميع السيول على أنها تم تنزيلها بالفعل")
        محلل. add_option (
            '-M'، '- match_by_filename'، dest = 'match_by_filename'،
            الإجراء = 'store_true' ،
            افتراضي = خطأ ،
            help = "التعرف على الملفات التي تم تنزيلها من خلال اسم الملف وليس عنوان URL. المطابقة بواسطة URL هي الإعداد الافتراضي.")        
        (self.opt، args) = parser.parse_args ()
        إذا self.opt.batch:
            للخط المفتوح (self.opt.batch، 'r'):
                سطر = line.strip ()
                إذا كان سطرًا وليس سطرًا ، ابدأ باستخدام ("#"):
                    self.opt.url.append (سطر)
        إذا لم يكن self.opt.output_dir:
            self.opt.output_dir = os.path.expanduser ('~ / سطح المكتب')
        إن لم يكن self.opt.filetype:
            self.opt.filetype = ['. torrent'] إن لم يكن self.opt.error_log:
            self.opt.error_log = self.opt.downloaded_torrents + ". أخطاء"
        محاولة:
            os.makedirs (self.opt.output_dir)
        باستثناء خطأ OSE:
            إذا لم يكن os.path. موجودًا (self.opt.output_dir):
                طباعة ('فشل tormon في إنشاء الدليل٪ s'٪ self.opt.output_dir)
                مخرج (1)
    def load_list_of_already_downloaded_torrents (ذاتية):
        محاولة:
            self.downloaded = open (self.opt.downloaded_torrents، 'r'). read (). split ()
        باستثناء IOError:
            self.downloaded = [] حاول:
            self.errors = open (self.opt.error_log، 'r'). read (). split ()
        باستثناء IOError:
            self.errors = [] def update_downloaded (self، url):
        self.downloaded.append (url)
        محاولة:
            self.errors.remove (url)
        باستثناء ValueError:
            pass        
    def download_torrent (self، url):
        محاولة:
            جورب = urllib2.urlopen (url)
        باستثناء (HTTPError، URLError):
            # طباعة ('فشل tormon في تنزيل٪ s'٪ url)
            إذا لم يكن عنوان url في الأخطاء الذاتية:
                self.errors.append (url)
        آخر:
            filename = self.url2filename (url)
            target_file = os.path.join (self.opt.output_dir، filename)
            طباعة ('تحميل٪ s'٪ target_file)
            المحتوى = sock.read ()
            sock.close ()
            fh = open (target_file، 'w')
            fh.write (المحتوى)
            fh.close ()
            self.update_downloaded (url)
    def url2filename (ذاتي ، url):
        إرجاع os.path.basename (urlparse.urlparse (url) [2])
    def has_been_downloaded (ذاتي ، url):
        إذا self.opt.match_by_filename:
            filename = self.url2filename (url)
            return (اسم الملف في [self.url2filename (رابط) للرابط في self.downloaded])
        آخر:
            العودة (url في self.downloaded)
    def parse_rss_feed (ذاتي):
        لعنوان url في self.opt.url:
            طباعة ('موجز RSS:٪ s'٪ url)
            محاولة:
                جورب = urllib2.urlopen (url)
            باستثناء (HTTPError، URLError):
                طباعة ('فشل tormon في تنزيل٪ s'٪ url)
            آخر:
                المحتوى = sock.read ()
                sock.close ()
                حساء = BeautifulSoup (محتوى)
                الروابط = ([link.nextSibling for link in soup.findAll ('link')] +
                       [link ['href'] للرابط في soup.findAll ('a')] +
                       [رابط ['url'] للرابط في soup.findAll ('media: content')])
                للارتباط في الروابط:
                    إذا (أي ([link.lower (). endswith (النهاية)
                             للنهاية بـ self.opt.filetype])
                        وليس self.has_been_downloaded (link)):
                        إذا self.opt.mark_all_downloaded:
                            طباعة ("تعليم٪ s على أنه تم تنزيله"٪ ارتباط)
                            self.update_downloaded (رابط)
                        آخر:
                            self.download_torrent (رابط)
    def save_list_of_already_downloaded_torrents (ذاتية):
        fh = open (self.opt.downloaded_torrents، 'w')
        fh.write ('n'.join (self.downloaded))
        fh.close ()
        fh = open (self.opt.error_log، 'w')
        fh.write ('n'.join (أخطاء ذاتية))
        fh.close ()
    def __init __ (ذاتي):
        self.parse_options ()        
        self.load_list_of_already_downloaded_torrents ()
        محاولة:
            self.parse_rss_feed ()
        باستثناء لوحة المفاتيح:
            pass
        أخيرا:
            self.save_list_of_already_downloaded_torrents ()
إذا __name __ == '__ main__':
    الأساسية ()

3.- منحه أذونات التنفيذ.

chmod + x ~ / bin / tormon.py

4.- تأكد من أن كل شيء يعمل بشكل جيد.

tormon.py -O ~ / torrents / -u "http: //rss.feed"

أين يقول ~ / السيول /، عليك استبداله بالمسار الذي تريد حفظ التورنت فيه. ضع في اعتبارك أنه سيكون هناك الكثير من ملفات التورنت.

حيث تقول "http: //rss.feed" ، عليك استبدالها بعنوان URL لخلاصة RSS لمسلسلتك المفضلة. كيف يمكن الحصول عليها؟ حسنًا في حال كنت تريد استخدامه ezRSSذهبت إلى الصفحة الرئيسية وكتبت اسم المسلسل. ستظهر قائمة ضخمة بالنتائج. إذا كنت ترغب في تحسين البحث (تاريخ التصفية أو الجودة أو الشخص الذي مزق الفيديو) ، يمكنك القيام بذلك عن طريق إرشادك بالأمثلة المنشورة بوضوح على تلك الصفحة. بمجرد حصولك على النتائج التي تبحث عنها ، انقر بزر الماوس الأيمن على الرابط الذي يقول موجز RSS القائم على البحث الذي يظهر بجوار الزر البرتقالي المميز لخلاصات RSS. انسخ الرابط والصقه لتحل محل ملف http://rss.feed من المثال.

بعض البيانات الإضافية التي يجب وضعها في الاعتبار:

  • إذا تم حذف المعلمة -O ، فسيتم تنزيل ملفات .torrent على سطح المكتب.
  • إذا قمت بتشغيل الأمر نفسه بعد ذلك مباشرة ، فلن يتم تنزيل أي ملف تورنت جديد ، إلا إذا تمت إضافة سيل جديد إلى موجز RSS.
  • ينشئ هذا الأمر المجلد الذي سيتم حفظ السيول فيه إذا لم يكن موجودًا.
  • سيتم حفظ قائمة عناوين URL الخاصة بالسيول التي تم تنزيلها بنجاح في ~ / .downloaded_torrents.
  • لمراقبة أكثر من موجز ويب لـ RSS ، يمكنك استخدام المعلمة -u. مثال: tormon.py -u "http: //rss.feed1" -u "http: //rss.feed1"

5.- إذا كان كل شيء يعمل بشكل جيد ، يمكنك إضافة البرنامج النصي كمهمة مجدولة من crontab.

-e كرونتاب

سيفتح هذا الأمر محرر نصوص.

الصق الكود التالي بحيث يكون في بداية الملف:

المسار = / sbin: / bin: / usr / sbin: / usr / bin: / home / USER / bin
MAILTO = USER

يتغيرون USER بواسطة اسم المستخدم الخاص بك.

الصق الكود التالي في مكان ما أدناه المسار = ...

* / 15 * * * * tormon.py -u "http: //rss.feed"

سيؤدي ذلك إلى تشغيل البرنامج النصي كل 15 دقيقة. بالتأكيد ، يمكنك تغييره ليناسب احتياجاتك. عندما يتعلق الأمر بالمسلسلات التلفزيونية ، قد يكون من الحكمة تشغيلها مرة واحدة في الأسبوع. لا تنس قراءة المنشور السابق الذي نشرح فيه خطوة بخطوة كيفية إضافة مهام إلى crontab.

لتشغيله كل يوم أحد الساعة 10 صباحًا:

00 10 * 0 tormon.py -u "http: //rss.feed"
ملاحظة: لا تنسَ استبدال المعلمات التي تم تمريرها إلى تورمون مع تلك التي تناسب احتياجاتك. كحد أدنى ، في الأمر أعلاه ، سيكون عليك استبدال عنوان URL لخلاصة RSS.

للإنهاء ، تأكد من وجود سطر فارغ في نهاية ملف crontab. لا أعرف لماذا ولكن من متطلبات crontab أن يعمل كل شيء بشكل جيد.

احفظ الملف واخرج من محرر النصوص.

ملاحظة: في حالة تثبيت وكيل نقل البريد الإلكتروني ، مثل exim4 ، فإن السطر MAILTO = USER سيخبر crontab أن يرسل لك نتائج تنفيذ tormon.py في رسالة بريد إلكتروني. بريد.


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   جيكوكالاني قال

    حسنًا ، لحسن الحظ ، أعرف بعض اللغة الإنجليزية. لقد فعلتها مع YaRSS. انظر إذا كان يعمل.

  2.   جيكوكالاني قال

    نعم جميل. لكن لا أحد يشرح كيفية استخدام FlexRSS. كل شيء على صفحتك جميل جدًا ولكني لم أجد طريقة لإضافته إلى الطوفان ... يقولون أيضًا أن Deluge يأتي مع واحد افتراضيًا وهذا ليس صحيحًا.

    تحياتي

  3.   ميكيل مايول طور قال

    لدى Qbittorrent وغيرها أنظمة جدولة مدمجة. سيكون من الجيد أن أشرح كيف يعمل كل منهم ، وعادة ما أشرح microtorrent لـ MS WOS و Qbittorrent لنظام Linux. في spoiler ، كان هناك برنامج تعليمي ، لكنك بالتأكيد ستجمع العديد من الزيارات إذا قمت بإنشاء مقاطع فيديو مع كل برنامج تورنت شائع ، مضيفًا على سبيل المثال EZ

  4.   لنستخدم لينكس قال

    شكرا ميكيل! سوف آخذه بعين الاعتبار ، مثل جميع تعليقاتكم واقتراحاتكم!
    أبعث لك عناق كبير! بول.

  5.   الأعشاب البحرية قال

    هنا مستودع يحتوي على هذا البرنامج:
    https://launchpad.net/~lopeztobal/+archive/maths
    عن طريق: http://linuxmusica.com/

  6.   شريك قال

    توقف عن التبشير باستخدام النواة ونشر استخدام نظام التشغيل!

  7.   لنستخدم لينكس قال

    هيهي ...