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

mfaraj57

مسؤول فريق الدريم بوكس (رحمه الله)
إنضم
24 أوت 2007
المشاركات
10.037
مستوى التفاعل
49.813
للاسئله والنقاش في هذا الموضوع
مشاكل وأسئلة برمجة وتطوير الاضافات والسكين وبناء الصور للانيجما
بناء على طلب الكثيرين اضع هنا ما اعرفه عن هذا الموضوع لكي يساعد من يفكر الدخول في هذا المجال
سيكون الشرح مبسطا قدر الامكان بدون الدخول في تعقيدات البرمجه
ربما لست بالشخص المناسب لوضع هكذا شرح لاني لست متخصصا ولا دارسا لعلم البرمجه ولكن رايت وضع ما اعرفه في هذا المجال راجيا من اساتذتي محترفي البرمجه تصحيحي اذا وقعت في خطأ ما.
اضافات كودي و TSmedia تمتاز عن غيرها انها سهله ومكتوبه بلغة python وليس لها علاقه بمكونات وقوانين الانيجما او برنامج كودي لذلك يمكن برمجتها بشكل كامل على الحاسوب سواء على نظام ويندوز او لينكس بدون استخدام اجهزة الانيجما وبدون الدخول في متاهات كود TSmedia أو Kodi
الامور التي ساتطرق اليها:
البرامج اللازمه.
اساسيات python.
برمجة الاضافات ل TSmedia.
برمجة وفحص الاضافات على نظام ويندوز بشكل كامل بدون استخدام اجهزة الانيجما.
برمجة الاضافات لكودي.
سيثبت الموضوع هنا مؤقتا ثما سينقل الى قسم الشروحات بعد انتهاء النقاش
سيتم شرح هذه المواضيع تباعا حسب الوقت المتوفر لي ومفتوح النقاش او الاسئله بعيدا عن كلمات الشكر والمديح
اتمنى مشاركه الاخوة الذين لهم دراية في البرمجه والاجابه عن الاسئله.
افضل طريقه لتعلم البرمجه بشكل عام
معرفة الاساسيات
وضع هدف او برنامج ومحاولة انجازه
البحث عن حل لاي مشكله اولا في النت او في كود البلغنات المفتوحة المصدر
وعملية البحث هذه تفيد كثيرا في التعلم
وفي حال استنفاذ الجهد لحل المشكله بالطريقه المذكوره تلجأ الى سؤال من له خبره اكثر منك وبطريقه كامله وبسيطه ومدعومه بالكود لشرح المشكله
 
التعديل الأخير:
البرامج اللازمه على نظام ويندوز
اختار رابط البرنامج الذي يتناسب مع نظامك
32 bit او 64 bit

wTSmedia

برنامج python
Python Release Python 2.7.15
فيديو يوضح استعمال python IDLE
برنامج winscp ftp
WinSCP :: Official Site :: Download

vlc

potplayer

فيديو يوضح كيفية استعمال winscp , python idl لفتح ملفات بايثون على الجهاز او على ويندوز
http://tunisia-dreambox.info/TSmedia/tutorial/1.mp4
http://[email protected]/TSmedia/tutorial/2.mp4
 
التعديل الأخير:
اساسيات python

لمعرفة الاساسيات يجب الرجوع الى احد الكتب او المواقع المتوفره على النت وهي كثيره ومنها
Python Websites and Tutorials
انصح التعلم باللغه الانكليزيه لانها لغة البرمجه المعتمده قد يكون هناك صعوبات في البدايه ولكن مع مرور وقت قصير ستزول الصعوبات
فقط اريد ان اركز على بعض الاساسيات المهمه التي نستعملها مرارا في بيئة الانيجما
الجمله البرمجيه statement
كل ما يلي هو جمله برمجيه statement
simple statement
كود:
x=1
if statment
كود:
if x==1:
    y=2
error exception statement
كود:
                    try:

                            href=re.findall(regx,block, re.M|re.I)[0]
                    except:
                            trace_error()
              

 continue

for statement
كود:
                for block in blocks:
                    i=i+1
                    if i==1:
                            continue

المحاذاة indentation
في بايثون يلجأ الى المحاذاه indentation لفصل الجمله البرمجيه code statement عن بعضها
المحاذاه Indentation نقصد بها المسافه من الهامش الايسر وحتى بدايه الجمله البرمجيه
هذا التنسيق لن يقبله python
كود:
    print "blocks",len(blocks)

                for block in blocks:
                    i=i+1
                    if i==1:
                            continue
هذا الصحيح
كود:
                print "blocks",len(blocks)

                for block in blocks:
                    i=i+1
                    if i==1:
                            continue

متغيرات python variables:
تختلف python عن غيرها من اللغات في انها لا تعرف المتغيرات مسبقا
string نص
variable name
ممكن كتابته على عدة اشكال وكلها صحيحه
كود:
name="mahmoud"
#or
name='mahmoud'
#or
name='''mahmoud'''

integer عدد صحيح
variables x,y
بدون علامات تنصيص
كود:
x=10
y=12
list variable
يضم مجموعه من القيم سواء integers , strings او متغيرات اخرى

كود:
list1=[3,"mahmoud",4,"ali"]
print list1[0]
>>>3
print list1[1]
>>>>mahmoud
print list[3]
>>>ali

dictionary variable
القاموس
ويضم مفتاح وقيمه key,value

كود:
dict1={"name":"mahmoud","job":"doctor","gender":"male"}
print dict1['name']
>>>> mahmoud
print dict1['gender']
>>>> male
تستخدم # لاضافة تعليق comment
ولا تنفذ الجمله
كود:
#python is good language


فيديو يوضح ما ذكر
http://tunisia-dreambox.info/TSmedia/tutorial/pythonbasic.mp4

يتبع........
 
التعديل الأخير:
-تركيب ومسار الاضافه
addon structure and directory

الاضافه ل kodi او TSmedia هي عباره عن مجلد directory تحتوي على ملفات ومجلدات فرعيه
هذا تركيب اضافة moviflex مثلا
addon-structure.png

مجلد img وهو يحتوي على الصور والبوسترات للقائمه الرئيسيه

__init__.py ملف فارغ ضروروي ان يكون موجود

addon.xml وهو ملف xml يحتوي على المعلومات الاساسيه للاضافه
وهذا تركيبه
addon-structure.png




default.py وهو اهم ملف موجود ويحتوي على الكود الذي ينفذ عمل الاضافه وسنأتي الى تفصيله لاحقا

icon.png وهو ايقون الاضافه وهو الذي يظهر مع الاضافه في صفحة الاضافات في TSmedia
ويفضل ان يكون حجمه 200*200
addon-structure.png

fanart.jpg
وهي الخلفيه التي تظهر عند استعراض الاضافه في TSmedia
ويفضل حجمها 1000*700
addon-structure.png


ملف params
ايضا مثل addon.xml يحتوي على معلومات الاضافه وهذا تركيبه
addon-structure.png


sicon.png ايقونه صغيره للاضافه


عند كتابه اضافه جديده فقط نحتاج نقل هذه الملفات من اضافه اخرى والتعديل عليها
بالنسبه للصور والايقونات ممكن اخذها والبحث عنها بواسطة google image

يتبع.........



 
-تركيب ملف default.py
default module structure
نأتي لاهم موضوع في الشرح وهو يحتاج الى تركيز شديد لفهم كيف تتم الامور
اولا يجب معرفة اقسام ملف default.py
سنأخذ مثلا default.py من الاضافه moviflex
الرأسيه Header وهو ل TSmedia ثابت تقريبا ولا يجب التعديل عليه بدون خبره ومعرفه سابقه ولن يتم شرح مكوناته لتفادي التعقيد وسيتم فهم مكوناته لاحقا من خلال التطبيق

addon-structure.png


الجسم body وهو يحتوي على الكود المنفذ للاضافه

addon-structure.png


الذيل footer
وهو القسم الاخير من default.py وهو له تركيب معين ويجب التعديل عليه بعنايه وهو يعين مسار تنفيذ الكود
هذا القسم يجب ان يبدأ ب
كود:
def start():
وينتهي ب
كود:
return endDir()
addon-structure.png


يتبع كتابة القائمه الرئسيه للاضافه...........
 
برمجة القائمه الرئسيه للاضافه
writing addon main menu

بعد التعرف على اقسام ملف default.py نبدأ بشرح انشاء القائمه الرئيسيه
يلزمنا في هذه المرحله متصفح الانترنت وانصح باستعمال google chrome

هذا الكود هو المنفذ للقائمه الرئيسيه للاضافه وسنأخذ اضافة moviflex مثلا لسهولتها
addon-structure.png


كود:
def showmenu():
 
 
    addDir('الافلام','https://www.moviflex.net/movies/',100,'img/1.png','',1)
اول سطر في القائمه الرئيسيه يبدأ بالوظيفه addDir
وهذه تقوم بتخزين المعلومات الوارده في هذا السطر لاستعمالها من قبل TSmedia
اول متغير في هذا الوظيفه هو اسم القسم وهو في هذا المثال الافلام
addon-structure.png

المتغير الثاني وهو يحتوي على رابط القسم في الموقع الاصلي
للحصول عليه نفتح الموقع في متصفح الانترنت ونفتح القسم المراد اي الافلام ثمن ننسخ رابط االقسم الى الكود
addon-structure.png


addon-structure.png


الرقم 100 وهو ما نسميه Mode وهو يحدد مسار تنفيذ الكود وعادة 100 للافلام , 200 للمسلسلات
المتغير الرابع يحتوي على مسار البوستر الذي سيرافق هذا القسم في ظهوره في TSmedia
المتغير الخامس عادة فارغ وفي القائمه الرئيسيه وسنأتي على وظيفته فيما بعد
المتغيير الاخير 1 وهو يدل على رقم الصفحه وهو عادة 1 في القائمه الرئيسيه ولا ينصح بتغييره

الاضافه المرفقه تحتوي على ما شرحناه
انقلها الى
كود:
/usr/lib/enigma2/python/Plugins/Extensions/TSmedia/addons/arabic/
بواسطة برنامج winscp
واعمل restart 2 وستجدها في صفحة الاضافات
حاول التعديل على القائمه الرئيسيه في اسم القسم مثلا ولا حظ التغيير الذي يحدث عليها في TSmedia
addon-structure.png


addon-structure.png


كتمرين للمهتمين ممكن اضافة سطور على نفس النمط للتصنيفات مثل action ,drama,horrer
ولاحظ التغيير في القائمه في TSmedia
طبعا عند الضغط على العنوان الافلام بالريموت لن يحدث شىء او تعطي error لانها غير مفعله
تابع الشرح التالي لكيفية تفعيلها وعرض الافلام
يتبع......
استخلاص المعلومات من المصدر او الموقع
parsing data from source site
 

المرفقات

  • moviflex.zip
    262 KB · المشاهدات: 64
التعديل الأخير:
استخلاص المعلومات من المصدر او الموقع
parsing data from source site


كما قلنا سابقا عند النقر قسم الافلام في moviflex في TSmedia لا يحدث شىء لانها غير مفعله
الان نأتي لكيفية تفعيلها من خلال الكود من خلال الوظيفه getmovies function

ننظر الى تركيب الوظيفه هذه
والتي تحتوي على المتغيرات التاليه
name وقيمتها هنا مثالنا الافلام
url وهو رابط الافلام في الموقع الرئيسي كما كتب في تشكبل القائمه الرئيسيه شاهد أحدث الافلام - Moviflex
page وقيمتها 1
addon-structure.png


فنجده فارغا الا من الجمله return statement
نبدأ باضافة الكود
اول سطر من الكود يقوم باحضار source code للموقع الاصلي
ومن المتصفح نحصل عليه بواسطة view source code ب right mouse click

screenshot-110.png


screenshot-111.png


هذه المعلومات نستطيع احضارها بواسطة الكود بهذه الجمله
كود:
data=readnet(url)

screenshot-112.png


المتغير variable data الان يحتوي على source code للموقع الاصلي للافلام في moviflex وهو جاهز لمعالجته واستخلاص المعلومات منه
يتبع....
معالجة source code للموقع الاصلي
 
التعديل الأخير:
معالجة source code للموقع الاصلي
سنخرج قليلا عن الموضوع لتوضيح عملية تبسيط الحصول على المعلومات
انظر الى المثال التالي وضعه في python idle على ويندوز
كود:
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]

screenshot-115.png


نلاحظ ان المعلومات المذكوره تحتوي على اسماء اشخاص ومعلومات عنهم وكل اسم يبدأ ب الجمله
كود:
class="person"

لكي يتم استخلاص المعلومات بسهوله يجب تقسيم المعلومات الى blocks بلوكات
وكل block يحتوي على معلومات شخص
نقوم بهذه العمليه باستخدام هذه الجمله البرمجيه
كود:
blocks=data.split('class="person"')
الان نحصل على البلوكات كلها ونطبع اول block والثاني من خلال الامر print
screenshot-116.png


يجب التمرن على ما سبق وفهمه لانه يشابه عملية استخلاص المعلومات من source code للموقع الاصلي

يتبع.....
تحليل ال source code للموقع الاصلي
 
التعديل الأخير:
تحليل ال source code للموقع الاصلي
analysis website source code

ننظر الى source code للموقع الاصلي
مقسم الى بلوكات بواسطة الجمله
كود:
class="item movies"

screenshot-117.png

screenshot-118.png


ومثل ما فعلنا بمثالنا في السابق عن الاشخاص person
نقسم معلومات قسم الافلام الى blocks
screenshot-119.png


كود:
def showmenu():      
       
       
    addDir('الافلام','https://www.moviflex.net/movies/',100,'img/1.png','',1)


                 
def getmovies(name,url,page):##movies
             
                data=readnet(url)
                blocks=data.split('class="item movies"')
                print "blocks count",len(blocks)
                print "second block",blocks[1]
                return

يتبع......
تحليل ال source code للموقع الاصلي II
II analysis website source code
regular expression
 
التعديل الأخير:
أعلى