شرح بسيط لكيفية اضافة موقع في TSIPLAYER

الحالة
مغلق و غير مفتوح للمزيد من الردود.

rgysoft

نجم المنتدى
عضو قيم
إنضم
29 أوت 2010
المشاركات
2.486
مستوى التفاعل
12.633
سنقوم بشرح بسيط لكيفية اضافة موقع في TSIPLAYER و سيكون على عدة ايام حتى يتمكن من يريد المتابعة و التعلم
سيكون العمل على موقع TukTukCinema
اولا باسم الله

أول شيئ نأخذ ملف جديد يكون فيه هذه الاسطر التي لا بد منها في كل هوسة جديد:
كود:
# -*- coding: utf-8 -*-
from Plugins.Extensions.IPTVPlayer.tools.iptvtools import printDBG
from Plugins.Extensions.IPTVPlayer.tsiplayer.libs.tstools import TSCBaseHostClass

def getinfo():
    info_={}
    info_['name'] = 'TukTukCinema'
    info_['version']='0.1'
    info_['dev']='Tunisia-Sat'
    info_['cat_id']='21'
    info_['desc']='هنا معلومات عن الموقع'
    info_['icon']='https://tuktukcinema.net/wp-content/uploads/2021/01/lela.png'
    return info_
 
class TSIPHost(TSCBaseHostClass):
    def __init__(self):
        TSCBaseHostClass.__init__(self,{})
        self.MAIN_URL      = 'https://tuktukcinema.net'
             
    def showmenu(self,cItem):
        printDBG('start menu0')
       
    def start(self,cItem):
        mode=cItem.get('mode', None)
        if mode=='00':
            self.showmenu(cItem)


- getinfo هي function لاعطاء المعلومات العامة للهوسة يكفي تعميرها بما يناسب
- class TSIPHost هو البرنامج الرئيسي الذي سنعمل عليه و سيحتوي على عدة مكتبات
- في هذا ال class يجب توفر هذه الأشياء:
• __init__ لوضع كل ما نحتاجه في اول البرنامج مبدئيا لن نغير شيئ فيه ماعدا domaine الموقع
• Start هذه ال function ستقوم بتوجيهنا الى ال menu المطلوب , اول ما يبدئ البرنامج سيكون ال mode الذي سنتحدث عنه بعد قليل 00 , يعني سنتوجه الى showmenu التي هي فارغة حاليا و ستحتوي على القائمة الرئيسية
ستكون النتيجة هكذا (اعادة تشغيل enigma واجبة بعد كل تغيير)

image01.jpg


- لكي نقوم بالقائمة الرئيسة يجب الكتابة في showmenu :
بعد النضر في الموقع نلاحض انه يحتوي أربعة اقسام أفلام, مسلسلا, انمي و برامج
البرامج موجودة في قسم المسلسلات يعني لا داعي لاضافتها
اذا سنضيف قائمة تحتوي على 3 عناصر
نلاحظ ان في كل الاقسام هناك تقسيم حسب النوع لذلك سنقوم بتوجيههم الى قائمة اختيار النوع
اذا سنضيف هذه الاسطر
كود:
    def showmenu(self,cItem):
        printDBG('Start menu0')
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Film'   ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/movies/'})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Anime'  ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/انمي/'})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'TV'     ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/series/?sercat=all'})

كما نلاحظ لاضافة عنصر الى القائمة يجب استعمال addDir التي تحتوي على بعض الكلمات المفاتيح:
• Import و category لا نغير فيها شيئ نكتبها دائما هكذا للربط مع e2iplayer
• Title تحتوي على اسم القائمة
• Icon صورة للقائمة اذا اردنا ذلك
• url رابط الصفحة التي سنستخرج منها القائمة
• mode يحتوي على رقم التوجيه الموجود في start
الmode هنا 10 يعني سنضيف سطر في start يحتوي على هذا الرقم يوجهنا الى menu جديد سنسميه showgenre

كود:
    def start(self,cItem):
        mode=cItem.get('mode', None)
        if mode=='00':
            self.showmenu(cItem)
        if mode=='10':
            self.showgenre(cItem)

و نضيف function جديدة فارغة حاليا اسمها showgenre

كود:
    def showgenre(self,cItem):
        printDBG('Start menu Genre')

ستكون النتيجة هكذا:

1_0_1_4295_2BC0_13E_820000_0_0_0_20210322093022.jpg


نأتي الان على كتابة showgenre
اول شيئ نقوم ب تحميل الصفحة التي تحتوي على الاختيارات ثم نبحث فيها على المعلومات التي نريد و في المرحلة الأخيرة نقوم باضهار القائمة
سيكون الكود هكذا

كود:
    def showgenre(self,cItem):
        printDBG('Start menu Genre')
        URL = cItem.get('url','')
        sts, data = self.getPage(URL)
        if sts:
            data = re.findall('(?:class="genresCat">|class="sercat">)(.*?)</ul>', data, re.S)
            if data:
                Liste_els = re.findall('<li.*?href="(.*?)".*?>(.*?)</li>', data[0], re.S)
                for (url,titre) in Liste_els:
                    titre = self.cleanHtmlStr(titre)
                    self.addDir({'import':cItem['import'],'category' : 'host2','title':titre,'icon':'','mode':'20','url':url})

طبعا هنا دخلنا في لب الموضوع:
- أولا قمنا ب اخذ ال url باستعمال cItem الذي يحتوي جميع المعلومات السابقة
- ثم نقوم باستعمال getPage لتحميل الصفحة وتحويلها الى string موجودة في data
- sts تعطنا نتيجة عملية التحميل: يعني if sts = اذا التحميل انتهى بشكل صحيح
- ثم نقوم بالبحث عن الفقرة التي تحتوي على قوائم الاختيار
• سنستعمل ال regex لذلك , لا ننسى إضافة import re في الأول
• طبعا لكي نتمكن من إيجاد patern مناسب لاسخراج الفقرة المطلوبة يجب التجربة و تعلم regex وكل ما كان الاختيار افضل للpatern كانت النتائج اسرع
- ثم نبحث في وسط الفقرة عن القوائم باسعمال كالعادة regex باستعمال patern مناسب يعطينا في حالنا هذا list تحتوي على قائمة url و أسماء قائمة الاختيار
- ثم نقوم باضهار النتائج باستعمال addDir كما رأينا سابقا و هذه المرة نختار mode جديد 20 مثلا لتوجيهنا الى ال menu القادم الذي سنسميه مثلا showitms ولا ننسى إضافة ذلك في start كما رأينا
و ستكون النتيجة هكذا

1_0_1_4295_2BC0_13E_820000_0_0_0_20210322105605.jpg


والكود النهائي هكذا:
كود:
# -*- coding: utf-8 -*-
from Plugins.Extensions.IPTVPlayer.tools.iptvtools import printDBG
from Plugins.Extensions.IPTVPlayer.tsiplayer.libs.tstools import TSCBaseHostClass
import re

def getinfo():
    info_={}
    info_['name'] = 'TukTukCinema'
    info_['version']='0.1'
    info_['dev']='Tunisia-Sat'
    info_['cat_id']='21'
    info_['desc']='هنا معلومات عن الموقع'
    info_['icon']='https://tuktukcinema.net/wp-content/uploads/2021/01/lela.png'
    return info_
 
class TSIPHost(TSCBaseHostClass):
    def __init__(self):
        TSCBaseHostClass.__init__(self,{})
        self.MAIN_URL      = 'https://tuktukcinema.net'
             
    def showmenu(self,cItem):
        printDBG('Start menu0')
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Film'   ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/movies/'})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Anime'  ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/انمي/'})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'TV'     ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/series/?sercat=all'})  

    def showgenre(self,cItem):
        printDBG('Start menu Genre')
        URL = cItem.get('url','')
        sts, data = self.getPage(URL)
        if sts:
            data = re.findall('(?:class="genresCat">|class="sercat">)(.*?)</ul>', data, re.S)
            if data:
                Liste_els = re.findall('<li.*?href="(.*?)".*?>(.*?)</li>', data[0], re.S)
                for (url,titre) in Liste_els:
                    titre = self.cleanHtmlStr(titre)
                    self.addDir({'import':cItem['import'],'category' : 'host2','title':titre,'icon':'','mode':'20','url':url})

       
    def start(self,cItem):
        mode=cItem.get('mode', None)
        if mode=='00':
            self.showmenu(cItem)
        if mode=='10':
            self.showgenre(cItem)

سنكتفي اليوم بهذا و في الأيام القادمة سنكمل الهوسة تدريجيا
طبعا يمكن التجربة على مواقع أخرى و نضيف القوائم التي نريد
واذا هناك مشكل يمكن طرح أسئلة مع نسخة من الكود المستعمل
قبل الختام اريد ان انبه ان هناك طرق عديدة لاضافة هوسة, قمت ببداية شرح لاسهل طريقة ممكنة وتعمل مع اغلب الهوستات ولكن اذا كانت هوستات محمية فالامر سيختلف كثيرا
قمت مؤخرا بالقيام بطريقة جديدة لكتابة الهوستات تكون اسرع و اقل جهد و لكن يجب المرور و تعلم المراحل السابقة لكي نتمكن من فهمها و مثلا عوضا عما كتبنا سابقا سيكون الكود النهائي هكذا و باستعمال فقط add_menu التي تحتوي على كل ما تكلمنا عنه:

كود:
# -*- coding: utf-8 -*-
from Plugins.Extensions.IPTVPlayer.tsiplayer.libs.tstools import TSCBaseHostClass

def getinfo():
    info_={}
    info_['name'] = 'TukTukCinema'
    info_['version']='0.1'
    info_['dev']='Tunisia-Sat'
    info_['cat_id']='21'
    info_['desc']='هنا معلومات عن الموقع'
    info_['icon']='https://tuktukcinema.net/wp-content/uploads/2021/01/lela.png'
    return info_
 
class TSIPHost(TSCBaseHostClass):
    def __init__(self):
        TSCBaseHostClass.__init__(self,{})
        self.MAIN_URL      = 'https://tuktukcinema.net'
             
    def showmenu(self,cItem):
        TAB = [('Film','/category/movies/','10',''),('Anime','/category/انمي/','10',''),('TV','/category/series/?sercat=all','10','')]
        self.add_menu(cItem,'','','','','',TAB=TAB)      

    def showmenu1(self,cItem):
        self.add_menu(cItem,'(?:class="genresCat">|class="sercat">)(.*?)</ul>','<li.*?href="(.*?)".*?>(.*?)</li>','','20')

طبعا هي فقط عملية اختصار وربما أقوم بتفسير ذلك يوم من الايام
الملفان النهائيان لهذه المرحلة في المرفق
يجب الانتباه عند الكتابة في python حتى espace في مكان خاطئ فلن يعمل
شكرا
 

المرفقات

  • TS_1.PNG
    TS_1.PNG
    122,6 KB · المشاهدات: 250
  • host_tuktukcinema.zip
    933 بايت · المشاهدات: 48
  • host_tuktukcinema2.zip
    693 بايت · المشاهدات: 30
التعديل الأخير بواسطة المشرف:
نكمل اليوم و سنقوم ب انشاء قائمة الأفلام و المسلسلات
أولا نظيف showitms الى start هكذا:
كود:
        if mode=='20':
            self.showitms(cItem)

ثم نضيف showitms فارغة كالعادة و نبدئ كتابة هذه ال function
هنا سنبحث عن كل فيلم او مسلسل موجود في صفحة url ونقوم باضهاره
وسيكون الكود كما يلي:

كود:
    def showitms(self,cItem):
        printDBG('Start menu showitms')
        URL = cItem.get('url','')
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="MovieItem">.*?title="(.*?)".*?href="(.*?)".*?src="(.*?)".*?cats">(.*?)</ul>', data, re.S)
            for (titre,url,image,categorie) in Liste_els:
                desc = 'Cat: ' + self.cleanHtmlStr(categorie)
                self.addDir({'import':cItem['import'],'category' : 'host2','title':titre,'icon':image,'desc':desc,'mode':'21','url':url})

- أولا استخرجنا url الصفحة التي سنبحث فيها عن الأفلام و المسلسلات
- كالعادة نقوم بتحميل الصفحة
- ثم نستخرج كل الأفلام الموجودة باستعمال regex
- و أخيرا نقوم باضهار النتائج باستعمال addDir
• url يمثل صفحة الفيلم او المسلسل
• Icon صورة الفيلم
• desc سيتم اضهارها اسفل و تحتوي هنا على نوع الفيلم او غيره
• و طبع title العنوان
• ال mode هنا 21 رقم جديد مختلف سيوجهنا الى function جديدة سنسميها showelms
و ستكون النتيجة هكذا:

i1.jpg


- ننتقل الان الى البحث عن الحلقات بالنسبة للمسلسلات:
كنا يمكن ان نحدد mode للأفلام و mode مختلف للمسلسلات: غالبا نبحث عن الحلقات في صفحة url , اذا وجدنا حلقات سنضيفها و اذا لم نجد يعني انه فيلم, و نعيد اضهار نفس السطر. لكن ك video وليس كمجلد
في هذا الموقع سيختلف الامر قليلا لانه حسب متابعة ال code source للموقع يتبين انه للحصول على قائمة المسلسلات يجب القيام ب post حسب معلومات نجدها في url المسلسل
يعني هذه المرة سنبحث عن هذه الصورة

img2.png

اذا وجدنها يعني فيلم و نضهر نفس السطر مع تغيير ال url الجديد فقط و اذا لم نجدها نبحث عن معلومات ال post و نقوم بال post ثم نبحث عن قائمة الحلقات و نضيفها
- أولا نقوم بإضافة الكود الجديد في start هكذا:

كود:
        if mode=='21':
            self.showelms(cItem)

- ثم نضيف function جديدة باسم showelms
- و سيكون الكود كما يلي:

كود:
    def showelms(self,cItem):
        printDBG('Start menu showelms')
        URL = cItem.get('url','')
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="watchAndDownlaod".*?href="(.*?)"', data, re.S)
            if Liste_els:
                url = Liste_els[0]
                self.addVideo({'import':cItem['import'],'category' : 'host2','title':cItem['title'],'url':url ,'desc':cItem['desc'],'icon':cItem['icon'],'good_for_fav':True,'hst':'tshost'})
            else:
                url_post = self.MAIN_URL + '/wp-admin/admin-ajax.php'
                id_ = slug_ = parent_ = ''
                # search for id
                id_tab = re.findall('data-id="(.*?)"', data, re.S)              
                if id_tab:
                    id_ = id_tab[0]
                # search for slug
                slug_tab = re.findall('data-slug="(.*?)"', data, re.S)              
                if slug_tab:
                    slug_ = slug_tab[0]                      
                # search for parent
                parent_tab = re.findall('data-parent="(.*?)"', data, re.S)              
                if parent_tab:
                    parent_ = parent_tab[0]                
                post_data = {'action':'getTabsInsSeries','id':id_,'slug':slug_,'parent':parent_}
                sts, data = self.getPage(url_post,post_data=post_data)
                if sts:
                    data = re.findall('class="tabContents">(.*?)</section>', data, re.S)                    
                    if data:
                        Liste_els = re.findall('<a href="(.*?)".*?<h2>(.*?)</h2>', data[0], re.S)
                        for (url,titre) in Liste_els:
                            self.addDir({'import':cItem['import'],'category' : 'host2','title':titre,'icon':cItem['icon'],'desc':cItem['desc'],'mode':'21','url':url})

- أولا نقوم بتحميل الصفحة
- نبحث عن watchAndDownlaod اذا وجدنا ذلك نضيف المادة الى القائمة و انتهى
- اذا لم نجد أي watchAndDownlaod يعني هناك حلقات يجب البحث عنها
- نبحث عن معلومات ال post في نفس الصفحة السابقة id & slug & parent
- نقوم بتحميل الصفحة الجديدة باستعمال المعلومات التي بحثنا عنها باستعمال regex او اخذناها مباشرة من ال codde source مثل action & url_post
- نبحث كالعادة في هذه الصفحة عن المواد الموجودة و نقوم باضهارها باستعمال addDir
- هذه المرة ال mode سيكون دائما 21 يعني سنعيد البحث عن watchAndDownlaod مرة أخرى في المواد الجديدة و طبعا هذه المرة سنجد الفيديو

في addVideo لن نستعمل mode فالتحول سيكون مباشرة الى function تسمى اجباريا get_links
- استعملنا في addVideo كلمات جديدة وهي good_for_fav و hst
- hst تعلمنا ان كان ال video مباشر او يستحق resolve او يستحق بحث عن هوستات : يمكن تكون direct or none or tshost
- good_for_fav اذا كانت true يعني يمكن اضافت المادة الى المفضلة
و تكون النتيجة النهائية هكذا:

هكل3.jpg


img4.jpg


imag5.jpg


image6.jpg


هكذا أكملنا المرحلة الثانية وهي استخراج ال videos
طبعا هذا الموقع فيه استخراج فيديووات الأفلام سهل جدا و لكن استخراج المسلسلات أصعب قليلا و غالبا كذلك و يجب استعمال المتصفح لاستخراج و فهم بعض الأمور لنتمكن من استخراج الفيديووات بنجاح
في المرة القادمة سنبحث عن الهوستات
هناك بعض الأشياء لم نذكرها وهيا كثيرة مثل next page و info و البحث ربما نعود إليها في اخر الشرح
الملف النهائي للمرحلة في المرفق
شكرا
 

المرفقات

  • host_tuktukcinema.zip
    1,4 KB · المشاهدات: 23
نكمل الان مع البحث عن الهوستات لكل video
لذلك يجب اضافة function باسم get_links وجوبا.
وسيكون الكود كما يلي:
كود:
    def get_links(self,cItem):    
        urlTab = []  
        URL=cItem['url']
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="serverItem.*?server="(.*?)".*?>(.*?)</li>', data, re.S)
            for (url,titre) in Liste_els:
                titre = self.cleanHtmlStr(titre)
                url = url+'|Referer='+URL
                urlTab.append({'name':titre, 'url':url, 'need_resolve':1})  
        return urlTab
- دائما نفس الشيئ, اولا تحميل الصفحة
- ثم البحث عن ال links التي ستوجهنا لمشاهدة المحتوى طبعا دائما باستعمال regex
- cleanHtmlStr تقوم بتنضيف الاسم و ازالة ال html balises
- هنا لكل url اضفنا Referer لان سرفر moshahada يحتاج لذلك لكي يعمل
- ونضيف ال links المتحصل عليها بهذه الطريقة
كود:
urlTab.append({'name':titre, 'url':url, 'need_resolve':1})

فتكون النتيجة هكذا:

1_0_19_2333_442_1_C00000_0_0_0_20210325160033.jpg


الان الملف جاهز للعمل
طبعا مازال ينقص بعض الاشياء التي بمراجعة الهوستات الاخرة يمكن اضافتها و فهمها
فقط سنضيف خاصية البحث لاهميتها و الصفحة الموالية في قائمة الافلام و المسلسلات:
نبدئ بخاصية البحث: يجب اضافة سطر جديد في showmenu
لتصبح showmenu هكذا:
كود:
    def showmenu(self,cItem):
        printDBG('Start menu0')
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Film'   ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/movies/'})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Anime'  ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/انمي/'})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'TV'     ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/series/?sercat=all'})  
        self.addDir({'import':cItem['import'],'category' : 'search','title': _('Search'), 'search_item':True,'page':1,'hst':'tshost','icon':cItem['icon']})
السطر المتعلق بالبحث يكون دائما بتلك الطريقة و لا يتغير :
- يمكن تغيير ال icon و ال title كما نشاء طبعا
page =1 يعني البحث سيكون متعدد الصفحات, page=-1 يعني لن يكون هناك صفحة موالية في البحث

بعد ذلك نضيف function جديدة اسمها وجوبا SearchResult وسيكون الكود هكذا:

كود:
    def SearchResult(self,str_ch,page,extra):
        URL=self.MAIN_URL+'/search/'+str_ch+'/page/'+str(page)
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="MovieItem">.*?title="(.*?)".*?href="(.*?)".*?src="(.*?)".*?cats">(.*?)</ul>', data, re.S)
            for (titre,url,image,categorie) in Liste_els:
                desc = 'Cat: ' + self.cleanHtmlStr(categorie)
                self.addDir({'import':extra,'category' : 'host2','title':titre,'icon':image,'desc':desc,'mode':'21','url':url,'hst':'tshost' })

- اولا نقوم بتحضير url البحث بالاستعانة بال web browser
ونعيد كتابة ما كتبناه في showitms بالضبط تقريبا
فقط extra مكان cItem['import'] و اضفة كلمة hst لكي يتعرف بحث e2iplayer على هذا (لا نغير هذه الاشياء دائما)

والنتيجة تكون هكذا:

1_0_19_2333_442_1_C00000_0_0_0_20210325161944.jpg

1_0_19_2333_442_1_C00000_0_0_0_20210325162426.jpg


الان سنضيف nextpage في showitms:
كما قمنا في البحث يجب تحضير الurl قبل تحميل الصفحة فسيكون الكود الجديد:
كود:
    def showitms(self,cItem):
        printDBG('Start menu showitms')
        page = cItem.get('page',1)
        URL = cItem.get('url','')+'&offset='+str(page)
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="MovieItem">.*?title="(.*?)".*?href="(.*?)".*?src="(.*?)".*?cats">(.*?)</ul>', data, re.S)
            for (titre,url,image,categorie) in Liste_els:
                desc = 'Cat: ' + self.cleanHtmlStr(categorie)
                self.addDir({'import':cItem['import'],'category' : 'host2','title':titre,'icon':image,'desc':desc,'mode':'21','url':url})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Next Page','icon':cItem['icon'],'desc':'','mode':'20','url':cItem['url'],'page':page+1})

قمنا أولا ب اخذ الصفحة, اذا لم نجدها فهذا يعني انها الصفحة الاولى
ثم نقوم باعداد ال url
والباقي كما فسرنا سابقا
فقط اضفنا سطر جديد سيعيد توجيهنا لنفس ال function يعني mode 20 بنفس المعطيات فقط نقوم باضافة page التي ستحتوي الصفحة الموالية

وسيكون الكود النهائي للهوسة هكذا:

كود:
# -*- coding: utf-8 -*-
from Plugins.Extensions.IPTVPlayer.tools.iptvtools import printDBG
from Plugins.Extensions.IPTVPlayer.tsiplayer.libs.tstools import TSCBaseHostClass
import re

def getinfo():
    info_={}
    info_['name'] = 'TukTukCinema'
    info_['version']='0.1'
    info_['dev']='Tunisia-Sat'
    info_['cat_id']='21'
    info_['desc']='هنا معلومات عن الموقع'
    info_['icon']='https://tuktukcinema.net/wp-content/uploads/2021/01/lela.png'
    return info_
 
class TSIPHost(TSCBaseHostClass):
    def __init__(self):
        TSCBaseHostClass.__init__(self,{})
        self.MAIN_URL      = 'https://tuktukcinema.net'
             
    def showmenu(self,cItem):
        printDBG('Start menu0')
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Film'   ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/movies/'})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Anime'  ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/انمي/'})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'TV'     ,'icon':'','mode':'10','url':self.MAIN_URL+'/category/series/?sercat=all'})  
        self.addDir({'import':cItem['import'],'category' : 'search','title': _('Search'), 'search_item':True,'page':1,'hst':'tshost','icon':cItem['icon']})  


    def showgenre(self,cItem):
        printDBG('Start menu Genre')
        URL = cItem.get('url','')
        sts, data = self.getPage(URL)
        if sts:
            data = re.findall('(?:class="genresCat">|class="sercat">)(.*?)</ul>', data, re.S)
            if data:
                Liste_els = re.findall('<li.*?href="(.*?)".*?>(.*?)</li>', data[0], re.S)
                for (url,titre) in Liste_els:
                    titre = self.cleanHtmlStr(titre)
                    self.addDir({'import':cItem['import'],'category' : 'host2','title':titre,'icon':'','mode':'20','url':url})

    def showitms(self,cItem):
        printDBG('Start menu showitms')
        page = cItem.get('page',1)
        URL = cItem.get('url','')+'&offset='+str(page)
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="MovieItem">.*?title="(.*?)".*?href="(.*?)".*?src="(.*?)".*?cats">(.*?)</ul>', data, re.S)
            for (titre,url,image,categorie) in Liste_els:
                desc = 'Cat: ' + self.cleanHtmlStr(categorie)
                self.addDir({'import':cItem['import'],'category' : 'host2','title':titre,'icon':image,'desc':desc,'mode':'21','url':url})
        self.addDir({'import':cItem['import'],'category' : 'host2','title':'Next Page','icon':cItem['icon'],'desc':'','mode':'20','url':cItem['url'],'page':page+1})


    def showelms(self,cItem):
        printDBG('Start menu showelms')
        URL = cItem.get('url','')
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="watchAndDownlaod".*?href="(.*?)"', data, re.S)
            if Liste_els:
                url = Liste_els[0]
                self.addVideo({'import':cItem['import'],'category' : 'host2','title':cItem['title'],'url':url ,'desc':cItem['desc'],'icon':cItem['icon'],'good_for_fav':True,'hst':'tshost'})
            else:
                url_post = self.MAIN_URL + '/wp-admin/admin-ajax.php'
                id_ = slug_ = parent_ = ''
                # search for id
                id_tab = re.findall('data-id="(.*?)"', data, re.S)              
                if id_tab:
                    id_ = id_tab[0]
                # search for slug
                slug_tab = re.findall('data-slug="(.*?)"', data, re.S)              
                if slug_tab:
                    slug_ = slug_tab[0]                      
                # search for parent
                parent_tab = re.findall('data-parent="(.*?)"', data, re.S)              
                if parent_tab:
                    parent_ = parent_tab[0]                
                post_data = {'action':'getTabsInsSeries','id':id_,'slug':slug_,'parent':parent_}
                sts, data = self.getPage(url_post,post_data=post_data)
                if sts:
                    data = re.findall('class="tabContents">(.*?)</section>', data, re.S)                    
                    if data:
                        Liste_els = re.findall('<a href="(.*?)".*?<h2>(.*?)</h2>', data[0], re.S)
                        for (url,titre) in Liste_els:
                            self.addDir({'import':cItem['import'],'category' : 'host2','title':titre,'icon':cItem['icon'],'desc':cItem['desc'],'mode':'21','url':url})                          
     
    def get_links(self,cItem):    
        urlTab = []  
        URL=cItem['url']
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="serverItem.*?server="(.*?)".*?>(.*?)</li>', data, re.S)
            for (url,titre) in Liste_els:
                titre = self.cleanHtmlStr(titre)
                url = url+'|Referer='+URL
                urlTab.append({'name':titre, 'url':url, 'need_resolve':1})  
        return urlTab

    def SearchResult(self,str_ch,page,extra):
        URL=self.MAIN_URL+'/search/'+str_ch+'/page/'+str(page)
        sts, data = self.getPage(URL)
        if sts:
            Liste_els = re.findall('class="MovieItem">.*?title="(.*?)".*?href="(.*?)".*?src="(.*?)".*?cats">(.*?)</ul>', data, re.S)
            for (titre,url,image,categorie) in Liste_els:
                desc = 'Cat: ' + self.cleanHtmlStr(categorie)
                self.addDir({'import':extra,'category' : 'host2','title':titre,'icon':image,'desc':desc,'mode':'21','url':url,'hst':'tshost' })
     
    def start(self,cItem):
        mode=cItem.get('mode', None)
        if mode=='00':
            self.showmenu(cItem)
        if mode=='10':
            self.showgenre(cItem)          
        if mode=='20':
            self.showitms(cItem)  
        if mode=='21':
            self.showelms(cItem)

هكذا نكون اكملنا من هذا الشرح القصير
ارجو ان اكون افدتكم بهذا
اكيد ينقص بعض الاشياء لكن كبداية سيكون كافي ان شاء الله
طبعا اذا كان هناك أسئلة فساحاول الاجابة عنها
شكرا
 

المرفقات

  • host_tuktukcinema.zip
    1,6 KB · المشاهدات: 52
التعديل الأخير:
الحالة
مغلق و غير مفتوح للمزيد من الردود.
أعلى