اسئلة واستفسارات python وبرمجة الاضافات ل TSmedia و TSiplayer

تحليل ال source code للموقع الاصلي II
II analysis website source code
regular expression

لتبسيط هذه العمليه نرجع الى مثالنا السابق عن الاشخاص persons

كود:
ata='''
--method demonstate splitting data for blocks
class="person"
name="mahmoud"
job="doctor"
sex="male"
children="3"

class="person"

name="ali"
job="programmer"
sex="male"
children="4"

class="person"

name="liala"
job="secretory"
sex="female"
children="2"
'''

blocks=data.split('class="person"')

print "blocks count",len(blocks)


print "first block",blocks[0]
print "second block",blocks[1]

نفتحه في python idle
قمنا بتقسيم المعلومات عن الاشخاص الى بلوكات blocks وكل block يحتوي على معلومات شخص معين
نريد ان حصل الان على الاسم والمهنه job من احد البلوكات ونأخذ مثلا البلوك الثاني
نستخدم هنا ما يدعى ب regular expression وهي وسيله برمجيه لاستخلاص المعلومات
انظر الى مثالنا كيف نستخدمها
في المثال نريد ان نستخلص الاسم من معلومات الاشخاص وتكوين regular expression
نأخذ احد الاسطر المكتوب فيها الاسم
كود:
name="mahmoud"
نضع مكان الاسم هذذ الرمز
(.*?)
فيصبح هكذا
كود:
name="(.*?)"
الان نشكل جملة regular expression statement

كود:
regx='''name="(.*?)"'''

لتطبيق هذه الجمله على معلومات الاشخاص والحصول على اسم الشخص في البلوك الثاني
اولا في اعلى الصفحه نستورد مكتبة regular expression بواسطة هذه الجمله
كود:
import re

ثما نشكل جملة استخلاص الاسم من المعلومات
كود:
name=re.findall(regx,blocks[1], re.M|re.I)[0]

نطبق الكود في python idle
كود:
import re
data='''
--method demonstate splitting data for blocks
class="person"
name="mahmoud"
job="doctor"
sex="male"
children="3"

class="person"

name="ali"
job="programmer"
sex="male"
children="4"

class="person"

name="liala"
job="secretory"
sex="female"
children="2"
'''

blocks=data.split('class="person"')

print "blocks count",len(blocks)


print "first block",blocks[0]
print "second block",blocks[1]      
################extract name and job from data-second block
###regx='''name="mahmoud"
regx='''name="(.*?)"'''
name=re.findall(regx,blocks[1], re.M|re.I)[0]
print "***********************************"
print "name:" +name

لاحظ نتيجة التطبيق حصلنا على اسم الشخص من البلوك الثاني
screenshot-122.png


نريد ان نحصل على كل المعلومات عن الشخص في البلوك الثاني

كود:
import re
data='''
--method demonstate splitting data for blocks
class="person"
name="mahmoud"
job="doctor"
sex="male"
children="3"

class="person"

name="ali"
job="programmer"
sex="male"
children="4"

class="person"

name="liala"
job="secretory"
sex="female"
children="2"
'''

blocks=data.split('class="person"')

print "blocks count",len(blocks)


print "first block",blocks[0]
print "second block",blocks[1]      
################extract name and job from data-second block
###regx='''name="mahmoud"
regx='''name="(.*?)"'''
name=re.findall(regx,blocks[1], re.M|re.I)[0]
regx='''job="(.*?)"'''
job=re.findall(regx,blocks[1], re.M|re.I)[0]
regx='''sex="(.*?)"'''
sex=re.findall(regx,blocks[1], re.M|re.I)[0]
regx='''children="(.*?)"'''
children=re.findall(regx,blocks[1], re.M|re.I)[0]


print "***********************************"
print "name:" +name
print "job:" +job
print "sex:" +sex
print "chidren:" +children

النتيجه
screenshot-123.png

للحصول على المعلومات عن كل كل الاسماء في كل البلوكات نلجأ الى ما يسمى
for statment

كود:
import re
data='''
--method demonstate splitting data for blocks
class="person"
name="mahmoud"
job="doctor"
sex="male"
children="3"

class="person"

name="ali"
job="programmer"
sex="male"
children="4"

class="person"

name="liala"
job="secretory"
sex="female"
children="2"
'''

blocks=data.split('class="person"')

print "blocks count",len(blocks)


print "first block",blocks[0]
print "second block",blocks[1]      
################extract name and job from data-second block
###regx='''name="mahmoud"
i=0
for block in blocks:
    i=i+1
    if i==1:##first block usually does not have any data so ask code to continue to secod block
        continue
    regx='''name="(.*?)"'''
    name=re.findall(regx,block, re.M|re.I)[0]
    regx='''job="(.*?)"'''
    job=re.findall(regx,block, re.M|re.I)[0]
    regx='''sex="(.*?)"'''
    sex=re.findall(regx,block, re.M|re.I)[0]
    regx='''children="(.*?)"'''
    children=re.findall(regx,block, re.M|re.I)[0]


    print "***********************************"
    print "name:" +name
    print "job:" +job
    print "sex:" +sex
    print "chidren:" +children

النتيجه معلومات كل الاشخاص
screenshot-124.png


ارجو فهم وتطبيق ما ذكر مرارا لانه الاساس فس عملية استخلاص المعلومات من الموقع
نأخذ احد البلوكات الموجوده في ال source code للموقع الاصلي
screenshot-125.png

كود:
    <div class="poster">
        <a href="https://www.moviflex.net/movies/the-last-boy/"><img src="https://cdn.moviflex.net/wp-content/uploads/2019/01/ygUsgb6WSTZ4iyZJXpjswgngqBY-185x278.jpg" alt="The Last Boy"></a>
                <div class="rating"><span class="icon-star2"></span> 8</div>
                        <span class="quality">720p</span>    </div>
    <div class="data">
        <h3>
                <a href="https://www.moviflex.net/movies/the-last-boy/">The Last Boy</a>
        </h3>
                <span>2019</span>
            </div>
    <div class="animation-1 dtinfo">
    <div class="title">
        <i class="dt-movies"></i>
        The Last Boy    </div>
    <div class="texto">The world at an end, a dying mother sends her young son on a quest to find the place that grants wishes.

مشاهدة فيلم الدراما والخيال العلمي The Last Boy 2019 <div class="degradado"></div></div>
    <div class="rating">
 
        <div class="datareviews">
            <div class="datarating">
                <span class="rating-stars-a">
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                </span>
                <span class="rating-stars-b" style="width: 80%;">
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                </span>            
            </div>
            <div class="rating_right">
            <span class="rating-value">8</span>
            <b>/1</b>
            </div>
        </div>
    </div>
</div>
</article>

نلصقه مكان معلومات الاشخاص في python idle
فيصبح هكذا الكود
كود:
import re
data='''
    <div class="poster">
        <a href="https://www.moviflex.net/movies/the-last-boy/"><img src="https://cdn.moviflex.net/wp-content/uploads/2019/01/ygUsgb6WSTZ4iyZJXpjswgngqBY-185x278.jpg" alt="The Last Boy"></a>
                <div class="rating"><span class="icon-star2"></span> 8</div>
                        <span class="quality">720p</span>    </div>
    <div class="data">
        <h3>
                <a href="https://www.moviflex.net/movies/the-last-boy/">The Last Boy</a>
        </h3>
                <span>2019</span>
            </div>
    <div class="animation-1 dtinfo">
    <div class="title">
        <i class="dt-movies"></i>
        The Last Boy    </div>
    <div class="texto">The world at an end, a dying mother sends her young son on a quest to find the place that grants wishes.

مشاهدة فيلم الدراما والخيال العلمي The Last Boy 2019 <div class="degradado"></div></div>
    <div class="rating">
 
        <div class="datareviews">
            <div class="datarating">
                <span class="rating-stars-a">
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                </span>
                <span class="rating-stars-b" style="width: 80%;">
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                </span>            
            </div>
            <div class="rating_right">
            <span class="rating-value">8</span>
            <b>/1</b>
            </div>
        </div>
    </div>
</div>
</article>

'''
اذا تمعنا في معلومات الفلم الموجوده في البلوك بالاعلى نجد ان اسم الفلم مذكور هنا
كود:
alt="The Last Boy"
رابط الفلم
كود:
href="https://www.moviflex.net/movies/the-last-boy/"
بوستر الفلم
كود:
src="https://cdn.moviflex.net/wp-content/uploads/2019/01/ygUsgb6WSTZ4iyZJXpjswgngqBY-185x278.jpg"

هذه المعلومات الاساسيه التي نريدها وهناك معلومات اخرى عن التقييم والقصه سنرجئهاالى ما بعد
انظر الى الكود كيف نستخلص هذه المعلومات بمساعدة regular expression
كود:
# -*- coding: utf-8 -*-
import re
data='''
    <div class="poster">
        <a href="https://www.moviflex.net/movies/the-last-boy/"><img src="https://cdn.moviflex.net/wp-content/uploads/2019/01/ygUsgb6WSTZ4iyZJXpjswgngqBY-185x278.jpg" alt="The Last Boy"></a>
                <div class="rating"><span class="icon-star2"></span> 8</div>
                        <span class="quality">720p</span>    </div>
    <div class="data">
        <h3>
                <a href="https://www.moviflex.net/movies/the-last-boy/">The Last Boy</a>
        </h3>
                <span>2019</span>
            </div>
    <div class="animation-1 dtinfo">
    <div class="title">
        <i class="dt-movies"></i>
        The Last Boy    </div>
    <div class="texto">The world at an end, a dying mother sends her young son on a quest to find the place that grants wishes.

مشاهدة فيلم الدراما والخيال العلمي The Last Boy 2019 <div class="degradado"></div></div>
    <div class="rating">
 
        <div class="datareviews">
            <div class="datarating">
                <span class="rating-stars-a">
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                </span>
                <span class="rating-stars-b" style="width: 80%;">
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                    <i class="icon-star2"></i>
                </span>            
            </div>
            <div class="rating_right">
            <span class="rating-value">8</span>
            <b>/1</b>
            </div>
        </div>
    </div>
</div>
</article>

'''


regx='''alt="(.*?)"'''###title of the movie
title=re.findall(regx,data, re.M|re.I)[0]
regx='''href="(.*?)"'''##link for movie
href=re.findall(regx,data, re.M|re.I)[0]
regx='''src="(.*?)"'''###image of the movie
image=re.findall(regx,data, re.M|re.I)[0]


print "***********************************"
print "title:" +title
print "href:" +href
print "image:" +image

نتيجة تطبيق هذا الكود نحصل على المعلومات الاساسيه عن الفلم الموجود في هذا البلوك
screenshot-126.png


الان نطبق ما تم للحصول على كل معلومات الافلام المذكوره في الموقع
كود:
import re
import re,urllib2
def readnet(url):
    try:
        import requests
        session = requests.Session()
        USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:30.0) Gecko/20100101 Firefox/30.0'
        session.headers.update({'User-Agent': USER_AGENT})
        return session.get(url, verify=False).content
    except:
 
       print "download error"



 
url='https://www.moviflex.net/movies/'
data=readnet(url)
##split data for blocks
blocks=data.split('class="poster">')

#print number of blocks,same as number of movies in first page in the link above
print "blocks count",len(blocks)

i=0  #counter
for block in blocks:#for loop to iterate all blocks to get movie information
    i=i+1 #counter
    if i==1:## if block number continue to next block,because first block does not have movie information
        continue


    regx='''alt="(.*?)"'''###title of the movie
    title=re.findall(regx,data, re.M|re.I)[0]
    regx='''href="(.*?)"'''##link for movie
    href=re.findall(regx,data, re.M|re.I)[0]
    regx='''src="(.*?)"'''###image of the movie
    image=re.findall(regx,data, re.M|re.I)[0]


    print "***********************************"
    print "title:" +title
    print "href:" +href
    print "image:" +image

نتيجة تشفيل الكود الحصول على معلومات 26 فلم مذكوره في الصفحه الاولى
screenshot-127.png


الان نعود الى ملف default.py ونطبق ما تعلمناه
كود:
def getmovies(name,url,page):##movies
                data=readnet(url)
                blocks=data.split('class="poster">')

                #print number of blocks,same as number of movies in first page in the link above
                print "blocks count",len(blocks)

                i=0  #counter
                for block in blocks:#for loop to iterate all blocks to get movie information
                    i=i+1 #counter
                    if i==1:## if block number continue to next block,because first block does not have movie information
                        continue


                    regx='''alt="(.*?)"'''###title of the movie
                    title=re.findall(regx,block, re.M|re.I)[0]
                    regx='''href="(.*?)"'''##link for movie
                    href=re.findall(regx,block, re.M|re.I)[0]
                    regx='''src="(.*?)"'''###image of the movie
                    image=re.findall(regx,bock, re.M|re.I)[0]


                    print "***********************************"
                    print "title:" +title
                    print "href:" +href
                    print "image:" +image
                    addDir(title,href,1,image,name,1)
لتخزين معلومات الافلام ليقرأها TSmedia فقط نضيف جملة addDir

انقل الملف المرفق الذي يحتوي على الكود الذي كتبناه الى موقعه في TSmedia بعد restart enigma
افتح الموقع في TSmedia
لترى النتيجه

screenshot-128.png

screenshot-129.png

مرفق ملف default.py لنقله الى
كود:
/usr/lib/enigma2/python/Plugins/Extensions/TSmedia/addons/arabic/moviflex/
وتشغيل الاضافه

تعليق:
اعرف ان ما ورد ليس سهلا فهمه خاصة للذين لا يملكون خبرات برمجيه في لغات اخرى ولكن حاولت قدر الامكان تبسيط الشرح
ولكن باعادة قراءة الشرح والتحلي بالصبر وطول البال وتطبيق ما ذكر مرارا سيصبح الشرح سهلا ومفهوما ويزول الغموض نهائيا
يتبع.....
قراءة روابط البث لفلم معين
extracting movie streaming movie link
 

المرفقات

  • default.rar
    1 KB · المشاهدات: 40
التعديل الأخير:
قراءة روابط البث لفلم معين
extracting movie streaming movie link


هذه المهمه قد تكون صعبه وقد تكون سهله حسب الموقع
ومعرفة بايثون ليس بها دور رئيسي في هذه المرحله
نفتح السورس كود للموقع على غوغل chrome
المواقع عادة تضع روابط البث من خلال سيرفرات مثل openload او روابط مباشره او الاثنان معا.
ناخذ احد الافلام في موقع moviflex على سبيل المثال الفلم last boy
ونفتحه فنجد كبسة سيرفر تحتوي على ثلاثة سيرفرات
Openload
Streamango
Libidvideo
screenshot-133.png

الان مهمتنا استخلاص روابط هذه السيرفرات.
عادة روابط السيرفرات توضع داخل iframe syntax في السورسكود
نبحث عن iframe في ال source code فنجد اولا سيرفر openload ورابطه
screenshot-134.png


كود:
<iframe id="iframe_" class="metaframe rptss" src="https://openload.co/embed/7yZdZcrVK-Y/The.Last.Boy.2019.720p.WEBRip.x264-Moviflex.net.mp4" frameborder="0" scrolling="no" allowfullscreen="true"></iframe>
نعمل نسخ لمعلومات السيرفر ونلصقها في def getservers في default.py

يتبع.....
 
التعديل الأخير:
قراءة روابط البث لفلم معين
extracting movie streaming movie link
II

نبدأ بتجهيز الوظيفه function def getservers في الملف default.py
اول امر هو احضار السورسكود source code للفلم
كود:
def getservers(name,url,image):##get servers
            
         data=readnet(url)###get source code of the movie website
      
         return

نبدأ بتجهيز regular expression لتحضير لنحصل على روابط البث
ننظر في ما نسخناه سابقا من سورسكود الفلم
نجد رابط سيرفر openload هنا
screenshot-135.png


نضع مكان الرابط هذا الرمز
كود:
(.*?)
فيصبح هكذا
كود:
def getservers(name,url,image):##get servers
            
         data=readnet(url)###get source code of the movie website
      
         regx='''<iframe id="iframe_" class="metaframe rptss" src="(.*?)" frameborder="0" scrolling="no" allowfullscreen="true"></iframe>'''
         return
ننفذ regular expression لنحصل على جميع الروابط
كود:
def getservers(name,url,image):##get servers
            
         data=readnet(url)###get source code of the movie website
      
         regx='''<iframe id="iframe_" class="metaframe rptss" src="(.*?)" frameborder="0" scrolling="no" allowfullscreen="true"></iframe>'''
         hrefs=re.findall(regx,data, re.M|re.I)
         for href in hrefs:
                 print "href",href
                 server,img,issupported=getDomain(href) ###function to get name,image if server and if supported by TSmedia
                 #store information about servers to be read by TSmedia
                 addDir(server,href,2,image,name,1)
         return
وهكذا حصلنا على جميع روابط السيرفرات
ضع الملف المرفق في المسار moviflex في TSmedia
وبعد restart e2 وافتح الاضافه

screenshot-136.png

screenshot-137.png


screenshot-138.png


يتبع........
اضافة الصفحه الثانيه next page لشاشة الافلام
 

المرفقات

  • default.zip
    1,3 KB · المشاهدات: 20
التعديل الأخير:
اضافة الصفحه الثانيه next page لشاشة الافلام
ربما لاحظ احد انه لا يوجد الصفحه الثانيه next page عندما احضرنا قائمة الافلام
لعمل ذلك نفتح صفحة الافلام في الموقع الاصلي ونفتح الصفحه الثانيه
screenshot-139.png


نأخذ رابط الصفحه الثانيه
screenshot-142.png


نضع الرابط في اعلى كود getmovies في default.py
كود:
https://www.moviflex.net/movies/page/2/
screenshot-143.png

كود:
def getmovies(name,url,page):##movies
                if page>1:
                       url=url+'page/'+str(page)+'/' ## this line create link for next page



      
                data=readnet(url)
                blocks=data.split('class="poster">')

                #print number of blocks,same as number of movies in first page in the link above
                print "blocks count",len(blocks)

                i=0  #counter
                for block in blocks:#for loop to iterate all blocks to get movie information
                    i=i+1 #counter
                    if i==1:## if block number continue to next block,because first block does not have movie information
                        continue


                    regx='''alt="(.*?)"'''###title of the movie
                    title=re.findall(regx,block, re.M|re.I)[0]
                    regx='''href="(.*?)"'''##link for movie
                    href=re.findall(regx,block, re.M|re.I)[0]
                    regx='''src="(.*?)"'''###image of the movie
                    image=re.findall(regx,block, re.M|re.I)[0]


                    print "***********************************"
                    print "title:" +title
                    print "href:" +href
                    print "image:" +image
                    addDir(title,href,1,image,name,1)
                if len(blocks)>25: #25number  of movies in one page
                       addDir("next page",url,100,"img/next.png",name,str(page+1))####add this line to store code for next page

مرفق default.py

يتبع....
اضافة المسلسلات الى القائمه الرئيسيه
ِPut series in main menu
 

المرفقات

  • default.rar
    1,4 KB · المشاهدات: 9
التعديل الأخير:
اضافة المسلسلات الى القائمه الرئيسيه
ِPut series in main menu

نفتح كود showmenu ونضيف هذا السطر ما يخص احضار المسلسلات
كود:
def showmenu():     
      
      
    addDir('الافلام','https://www.moviflex.net/movies/',100,'img/1.png','',1)

        addDir('المسلسلات','https://www.moviflex.net/tvshows/',200,'img/2.png','',1)
هذا السطر يشبه سطر احضار الافلام مع اختلاف المعلومات
المتغير الاول عنوان القسم المسلسلات
المتغير الثاني رابط قسم المسلسلات في الموقع الاصلي
المتغير الثالث Mode ونستخدم 200 للمسلسلات
ما تبقى من المتغيرات لبوستر القسم والصفحه
الان نضيف كود احضار المسلسلات الى default.py
لا داعي لكتابته مره ثانيه فهو نفسه كود احضار الافلام
ننقل محتوى def getmovies ونلصقه في def getseries
مع تغيير Mode من 100 الى 200 في هذا السطر
كود:
addDir(title,href,1,image,name,1)

to

addDir(title,href,201,image,name,1)

لان mode 1 تامر الكود بالذهاب الى صفحة السيرفرات ولكن في حالة المسلسلات نريد ان يذهب تنفيذ الكود الى الحلقات episodes
,والسطر هو تغيير Mode في سطر next page من 100 الى 200
كود:
def getseries(name,url,page):##TVshows
                if page>1:
                       url=url+'page/'+str(page)+'/' ## this line create link for next page



      
                data=readnet(url)
                blocks=data.split('class="poster">')

                #print number of blocks,same as number of movies in first page in the link above
                print "blocks count",len(blocks)

                i=0  #counter
                for block in blocks:#for loop to iterate all blocks to get movie information
                    i=i+1 #counter
                    if i==1:## if block number continue to next block,because first block does not have movie information
                        continue


                    regx='''alt="(.*?)"'''###title of the movie
                    title=re.findall(regx,block, re.M|re.I)[0]
                    regx='''href="(.*?)"'''##link for movie
                    href=re.findall(regx,block, re.M|re.I)[0]
                    regx='''src="(.*?)"'''###image of the movie
                    image=re.findall(regx,block, re.M|re.I)[0]


                    print "***********************************"
                    print "title:" +title
                    print "href:" +href
                    print "image:" +image
                    addDir(title,href,202,image,name,1)
                if len(blocks)>25: #25number  of movies in one page
                       addDir("next page",url,200,"img/next.png",name,str(page+1))####add this line to store code for next page

الان نريد احضار حلقات مسلسل ما عند النقر عليه
نتصفح السوركود لاي مسلسل موجود في الموقع مثلا لمسلسل Last kingdom
screenshot-144.png

هذا الجزء الذي يهمنا ويحتوي على معلومات الحلقات وروابطها
screenshot-145.png

نقسم المعلومات الى بلوكات blocks كما فعلنا في قسم الافلام
وهذ هو الكود لن اشرحه لان فكرته تشابه ما عملناه في صفحة الافلام
كود استخلاص الحلقات موجود في function def getepisodes Mode 202
كود:
def getepisodes(name,url,img,page):##TVshows
              
                data=readnet(url)##to get source code of moviflex series page
                blocks=data.split('class="imagen"')##split episodes info to blocks

                #print number of blocks,same as number of movies in first page in the link above
                print "blocks count",len(blocks)

                i=0  #counter
                for block in blocks:#for loop to iterate all blocks to get series information
                    i=i+1 #counter
                    if i==1:## if block number continue to next block,because first block does not have movie information
                        continue


                    regx='''<div class="numerando">(.*?)</div>'''###to get season number and episode number
                    title=re.findall(regx,block, re.M|re.I)[0]
                    title="episode-"+title# add word episode to extracted title
                    regx='''href="(.*?)"'''##link for episode
                    href=re.findall(regx,block, re.M|re.I)[0]
                    regx='''src="(.*?)"'''###to get poster of the episode
                    image=re.findall(regx,block, re.M|re.I)[0]


                    print "***********************************"
                    print "title:" +title
                    print "href:" +href
                    print "image:" +image
                    addDir(title,href,1,image,name,1)#mode 1 to go getservers funtion
ننقل الملف المرفق الى مساره في TSmedia الى الجهاز وبعد e2 resatrt نفتح قسم الملسلات في الموقع
يتبع......
اضافة خاصية البحث search
 

المرفقات

  • default.rar
    1,6 KB · المشاهدات: 11
التعديل الأخير:
اضافة خاصية البحث search

نفتح موقع moviflex لنرى الية البحث التي يعتمدها بالبحث عن فلم او مسلسل مثلا اي فلم او مسلسل يحتوي على كلمة prison
screenshot-147.png


نأخذ الرابط الناتج ونلصقه في function search() mode 103

كود:
https://www.moviflex.net/?s=prison

ننقل كود function getmovies هنا مع تغيير فقط
كلمة فصل السورسكود الى بلوكات
تغيير Mode الى 1 او 202 حسب اذا كان فلما او مسلسلا
كود:
blocks=data.split('class="result-item"')#split data to blocks


                    if 'tvshows' in href:## if link includes tvshows word then it is series
                            mode=202
                     else:##else should be movie
                             mode=1
                    addDir(title,href,mode,image,name,1)

كود:
def search(name,sterm,page):
                url='https://www.moviflex.net/?s='+sterm ##sterm presents the name of movies to search for
    
                data=readnet(url)##get source code
                blocks=data.split('class="result-item"')#split data to blocks

                #print number of blocks,same as number of movies in first page in the link above
                print "blocks count",len(blocks)

                i=0  #counter
                for block in blocks:#for loop to iterate all blocks to get movie information
                    i=i+1 #counter
                    if i==1:## if block number continue to next block,because first block does not have movie information
                        continue


                    regx='''alt="(.*?)"'''###title of the movie
                    title=re.findall(regx,block, re.M|re.I)[0]
                    regx='''href="(.*?)"'''##link for movie
                    href=re.findall(regx,block, re.M|re.I)[0]
                    regx='''src="(.*?)"'''###image of the movie
                    image=re.findall(regx,block, re.M|re.I)[0]


                    print "***********************************"
                    print "title:" +title
                    print "href:" +href
                    print "image:" +image
                    if 'tvshows' in href:## if link includes tvshows word then it is series
                            mode=202
                     else:##else should be movie
                             mode=1
                    addDir(title,href,mode,image,name,1)
اضافة search الى القائمه الرئيسيه
كود:
def showmenu():     
      
        addDir('Search','https://www.moviflex.net/?s=prison',103,'img/search.png','',1)
    addDir('الافلام','https://www.moviflex.net/movies/',100,'img/1.png','',1)

        addDir('المسلسلات','https://www.moviflex.net/tvshows/',200,'img/2.png','',1)
لتطبيق ما ذكر ننقل الملف المرفق الى مساره في TSmedia

يتبع....
خاتمه مؤقته
 

المرفقات

  • default.rar
    1,8 KB · المشاهدات: 15
التعديل الأخير:
خاتمه مؤقته
انتهينا من المفاهيم الاساسيه لصنع اضافه addon ل TSmedia
انصح بقراءة ما ورد مرتين او ثلاثه اعرف ان هناك مفاهيم جديده وقد تكون غامضه ولكن مع الممارسه والتصميم سيصبح الامر سهلا ويمكن انجاز اضافه في اقل من 15 دقيقه.
هناك الكثير ممكن اضافته الى الاضافه التي تم شرحها وممكن اضافة اقسام اخرى مثل التصنيفات. action,drama ....
اتركها لكم للتمرن عليها باتباع المفاهيم الاساسيه التي تم شرحها.
ايضا ممكن اضافة regular expression للتقييم للقصه وجودة الفلم ايضا اتركها للتمرن عليها
نفس الشرح ينطبق اذا كانت الاضافه تحتوي على فيديو كالافلام والمسلسلات او ملفات صوتيه مثل الاغاني او حتى تحتوي على صور فقط.
النظام الذي اتبعته في برمجة الاضافه مبني على خبرتي القصيره في هذا المجال والذي شكلته اخذا بعين الاعتبار البساطه وعدم والتعقيد وكتابة الاضافه في اقل وقت وبعدد قليل من الاسطر.
على سبيل المثال لو قارنا الاسطر التي اضفناها مع اي اضافه مشابه لكودي لوجدنا ان اضافات كودي تحتوي على اربع اضغاف الاسطر ناهيك عن التعقيد الذي ليس له داعي مع ان الهدف نفسه.
اخيرا ليس الهدف الرئيسي للشرح هو البرمجه ل TSmedia وانما تطبيق الشرح وفهمه سوف يفتح الطريق الى البرمجه في شتى مجالات البرمجه للانيجما منها برمجة البلاكنات وصنع الاضافات لكودي وغيره الكثير.
هناك فقط اختلاف فقط في صنع اضافه لقنوات youtube ولكنها اسهل بكثير وسيتم شرح عمل اضافه ل youtube channel في الشرح التالي.
يتبع....
صنع اضافه من youtube channel
 
التعديل الأخير:
صنع اضافه من youtube channel
العمل بسيط ولا يحتاج لاي معرفه برمجيه مسبقه
قنوات يوتيوب كثيرة العدد وتضم مواد تعليميه ودينيه وترفهيه
صنع اضافه من قناة youtube لعرضها على TSmedia سهل جدا وباسطر قليله
نأخذ مثلا قناة
AJ+ كبريت

وهي قناة تحتوي على قنوات اخرى ترفيهيه وسياسيه وعلميه منها السليط الاخباري الدحيح اسبتاليا

ننزل مسار الاضافه المرفق ychannel ليجري التعديل عليه

نغير اسم المجلد الى اي اسم يناس الاضافه بدون مسافه بالاسم وبالانكليزي فقط واحرف صغيره وبدون احرف ليست مألوفه
نختار اسم plusaj
نعدل الملف addon.xml الموجود في المجلد حسب معلومات الاضافه الجديده



كود:
<?xml version="1.0" encoding="UTF-8"?>
<addon
 id="plusaj"
  version="1.0.0"
 name="+AJ كبريت"
 provider-name="TSmedia Team">
 <requires>
        <import addon="xbmc.python" version="2.1.0" optional="true" />

  </requires>
  <extension point="xbmc.python.pluginsource"
            library="default.py">
    <provides>video</provides>
  </extension>
  <extension point="xbmc.addon.metadata">
    <summary> youtube channels from +AJ   </summary>
    <description>   All videos from +AJ كبريت   </description>
   <platform>all</platform>
  </extension>
</addon>

نعدل ملف params الموجود في المجلد المرفق
كود:
plugin_title==+AJ كبريت
plugin_id==plusaj
section==arabic
subsection==general
version==1.0.0
provider==TSmedia Team
textsize==20
textcolor==#00ffe875
metadata==False

نحضر ايقونه من صفحة القناة على اليوتيوب ونضعها بالمجلد باسم icon.png
عادة استخدم تطبيق postimage application لهذه الغايه

Screen capture tool for Windows — Postimage.org
icon.png

ايضا نبحث عن خلفيه مناسبه بحجم 1000*700 ونسميها fanart.jpg ونضعها في بالمجلد

نبحث عن اسم القناة في youtube.com ونفتحها
نأخذ channel id من المتصفح
screenshot-752.png


وهو في مثالنا
كود:
UC-4KnPMmZzwAzW7SbVATUZQ

نفتح الملف default.py التعديل عليه
نمسح كل الاسطر الموجوده في def infolist اصلا ونضع السطران التاليان الذي يحتوي على اسم القناة channelid
كود:
def infolist():
  list1=[]

  list1.append(('+AJ كبريت','UC-4KnPMmZzwAzW7SbVATUZQ','1001',"img/plusaj.jpg", '',1))## channel id
 
 
 
  return list1

هذا كل شىء
تنقل مسار الاضافه الى
كود:
/TSmedia/addons/arabic
قارنها بالاضافه plusaj الموجوده في المرفقات اذا حصل خطأ
نفتح الاضافه كالمعتاد
screenshot-755.png

screenshot-756.png

screenshot-757.png

screenshot-758.png

الاضافه مرفقه بعد التعديل

يتبع.......
صنع وتجهيز الاضافات على الويندوز بدون استخدام الجهاز
create TSmedia addon on windows




 

المرفقات

  • ychannel.zip
    231,6 KB · المشاهدات: 21
  • plusaj.zip
    223,8 KB · المشاهدات: 17
التعديل الأخير:
صنع وتجهيز الاضافات على الويندوز بدون استخدام الجهاز
create TSmedia addon on windows

13.1.1 download wTSmedia


screenshot-154.png

screenshot-149.png


screenshot-150.png


البرنامج تجريبي نستطيع من خلاله تشغيل اضافات TSmedia على الويندوز
البرنامج ما زال في البدايه اي ممكن ان يكون اخطأء في عمله او تنصيبه
ارائكم تهمني لتحسينه
البرنامج مبرمج من خليط من .net و python
البرنامج يعمل فقط على windows مجرب على windows 8,10
التنصيب فك الضغط عن الملف المرفق وارساله الى درايف e أوc او d
بحيث لا يحتوي مسار التنصيب على اي مسافات no space
مثلا
d:/wTSmedia
c:/wTSmedia
ثما تشغيل الملف wTSmedia.exe
مستلزمات البرنامج
python 2.7x

vlc او potplayer او الاثنان
الافضل تنصيب هذه البرامج في مكانها الافتراضي مع مراعاة النسخه التي تتوافق مع نوع الويندوز 64 او 32 bit
البرنامج فيه جانبان للمشاهده واخر لصناعة الاضافات وتصحيحها بدون استخدام الجهاز نهائيا
الجانب الثاني ساتي على تفصيله في الشرح التالي
يمكن استخدام البرنامج للمشاهده من خلال double click على الاضافه فتفتح القائمه الرئيسيه وهكذا حتى نصل الى الرابط النهائي حيث يتم تشغيله من خلال
vlc او potplayer
لتوضيح هذا الجانب مشاهدة الفيديو التالي
http://tunisia-dreambox.info/TSmedia/tutorial/wtsmedia.mp4

يتبع.....
صناعة وتعديل الاضافات على نظام الويندوز II
Create and edit addons on windows
 
التعديل الأخير:
صناعة وتعديل الاضافات على نظام الويندوز II
Create and edit addons on windows

في الشرح السابق تم عمل الشياء الاساسيه في اضافة moviflex ولكن هناك اشياء لم نضفها مثل قصة الفلم التقييم وجودة الفلم
الان سنقوم باحضارها من الموقع لتعرضها لنا الاضافه ولكن كامل الشرح والتطبيق سيكون على windows TSmedia ولن نحتاج جهاز الانيجما الا بعد الانتهاء لتجربة الاضافه
اولا نفتح wTSmedia ونفعل developer mode من menu/settings
screenshot-760.png



ستظهر لنا قوائم و معلومات جديده سنتعرف عليها من خلال التطبيق
ننسخ مجلد الاضافه moviflex التي عملناها من المرفقات الى القسم العربي في مجلد addons في wTSmedia

screenshot-762.png

screenshot-763.png


يتبع...
 

المرفقات

  • moviflex.zip
    263,1 KB · المشاهدات: 39
التعديل الأخير:
أعلى