سوالف اندرويد




العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > PHP
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
عضو فعال
#1  
مقدمة في خدمات الانترنت:التدوين عن بعد

السلام عليكم

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

لكن ما هي اللغة المشتركة او البروتوكول الذي يربط بين كل هذه المركبات ؟

في الحقيقة يوجد أكثر من بروتوكول ، لكن ما يخصنا في ال php هو بشكل اساسي بروتوكلين اساسيين:
  1. soap
  2. xml-rpc
هذه البروتوكولات مستعملة للاتصال بين التطبيقات ولغات البرمجة المختلفة ، فجميع اللغات المعروفة لديها مكتبات للتعامل مع هذه البروتوكولات، وتستطيع فهم وتحليل المعلومات المرسلة ويمكن ايضًا ان ترسل معلومات تستطيع ان تفهمها التطبيقات الاخرى.
بشكل عام هذه التطبيقات تتّبع هندسة معينة وهي client\server أي انه يوجد برنامج يوفر الخدمة وهو السيرفر، مثلا موقع اليوتيوب الذي يوفر خدمة استضافة وعرض الفيديوهات، وهناك المستخدم او العميل والذي يطلب الخدمة من الخادم(طلب الفيديوهات للمشاهدة).

سوف نتكلم في هذا الموضوع عن بروتوكول xml-rpc ، وهو بروتوكول يقوم بارسال واستقبال الطلبات والمعلومات عن طريق ال xml،كما ان الطلب يجب ان يكون بصيغة او مبنى خاص، لكن لحسن الحظ لن تضطر لكتابة اي شيء بهذه اللغة
اذ ان ال php تحوي دوال خاصة بتحويل المصفوفة ل xml وبالعكس.

عندما نرسل طلب للسيرفر، يجب علينا ان نحدد اسم الدالة التي نريد طلبها، مثل دالة لتغيير الستاتوس في الفيسبوك، او احضار الرسائل او غيره..
ويجب علينا ايضًا ان ندخل في الطلب البارمترات المطلوبة مثل اسم العضو وكلمة المرور وغيره من المعلومات المطلوبة.

في البداية دعنا نتعرف على دوال ال xml-rpc في لغة ال php:

هذه قائمة بالدوال:
http://www.php.net/manual/en/ref.xmlrpc.php

أما اهم الدوال فهي:
xmlrpc_server_create
http://www.php.net/manual/en/functio...ver-create.php

تستعمل لانشاء سيرفر

تستخدم لتسجيل دالة
xmlrpc_server_register_method
http://www.php.net/manual/en/functio...ter-method.php

دوال لتحويل الطلب من وإلى صيغة xml
http://www.php.net/manual/en/functio...de-request.php
http://www.php.net/manual/en/functio...de-request.php

هكذا يتم بناء السيرفر:
كود PHP:
function greeting_func($method_name$params$app_data)
{
$name $params[0];
$lname $params[1];
return 
"Hello, $name $lname. How are you today?";
}

$xmlrpc_server xmlrpc_server_create();

xmlrpc_server_register_method($xmlrpc_server"greeting""greeting_func");

$request_xml $HTTP_RAW_POST_DATA;

$response xmlrpc_server_call_method($xmlrpc_server$request_xml'');
print 
$response;

xmlrpc_server_destroy($xmlrpc_server); 
يتم انشاء السيرفر لتلقي الطلبات من العميل
xmlrpc_server_create
ثم يتم تسجيل الدوال التي نرغب باتاحة استعمالها للعميل
وذلك عن طريق الدالة
xmlrpc_server_register_method
وهي هنا دالة greeting_func، اما اسمها الذي يطلبه العميل فهو greeting
اذ اننا لا نريد للعميل ان يعرف اسماء الدوال التي لدينا، لذا نعطيه اسم اخر ونربط الاسم
بالدالة.

بعد ذلك نقوم باستدعاء دالة نقوم بالتقاط الطلب المرسل من قبل العميل
xmlrpc_server_call_method
طبعًا هذه الدالة يتم استدعائها عند تلقي الطلب

طيب كيف يعمل العميل:
كود PHP:
<?php
$request 
xmlrpc_encode_request("greeting", array('ahmad','sadiq'));
$context stream_context_create(array('http' => array(
    
'method' => "POST",
    
'header' => "(anti-spam-(anti-spam-content-type:)) text/xml",
    
'content' => $request
)));
$file file_get_contents("http://localhost/xml-rpc/rpc_server.php"false$context);
$response xmlrpc_decode($file);
if (
is_array($response) && xmlrpc_is_fault($response)) {
    
trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
} else {
    
print_r($response);
}
?>
هذا الكود يقوم بارسال طلب post ، تمامًا مثل الforms العادية. لكنه هنا يرسل اسم الدالة التي نريد طلبها من السيرفر ، وايضًا البارمترات المطلوبة وهي الاسم واسم العائلة.
وهناك ايضًا الدالة xmlrpc_is_fault
والتي تحدد اذا ما كان هناك خطأ قد حصل بالسيرفر نتيجة لسوء استدعاء الدالة.

طبعًا الموضوع اصبح طويل قليلًا لذا سأحاول الاختصار...

حتى نفهم جيدًا مبدأ خدمات الانترنت سوف نقوم ببناء سيرفر xml-rpc هو عبارة عن مدونة بسيطة مرتبطة بقاعدة البيانات.
أما العميل او طالب الخدمة فهم كتّاب المدونة حيث سيسمح لهم بارسال المواضيع بعد تنسيقها من داخل برنامج الوورد أو برنامج windows live writer ، طبعًا هذا بعد ان يدخلوا اسم المستخدم وكلمة المرور للتحقق من عضوياتهم.


اذ ان هذه الخدمة متاحة عن طريق الوورد من هنا:


وهذا ما سيظهر لنا



ربما لاحظت ان الوورد يدعم رفع الصور كما هو ظاهر في الصورة...

طيب كيف سيتخاطب برنامج الوورد مع السكربت الذي لدينا، خصوصًا ان ميكروسوفت حتمًا لا تعرف شيئًا عنه، وكذلك نحن لا نعرف شيئًا عن برمجة الوورد الداخلية؟

الحل هو استخدام بروتوكول او لغة مشتركة بين تطبيقنا والوورد، بحيث يكون هناك دوال لانشاء\تعديل موضوع، وايضًا دوال لرفع الصور وخلافه.

اللغة المشتركة جاهزة ومعروفة وهي ال xml-rpc ، لكن كيف سيعرف الوورد اسماء الدوال التي
نستخدمها في موقعنا حتى يقوم باستدعائها وارسال المواضيع؟

الحل يكون ب api (وهو عبارة عن مجموعة كلاسات\دوال نعرف اسماءها) مشترك بيننا
وهنا سوف نستخدم api اسمه metaweblog
وهو عبارة عن مجموعة دوال خاصة بالمدونات وفيها الدوال التي نحتاجها بالضبط
وهذه هي الدوال التي فيها:
http://msdn.microsoft.com/en-us/library/bb259697.aspx
في الواقع يوجد اكثر من api
مثل
wordpress api
blogger api
وغيرها

لكن هنا سوف نستعمل مجموعة الدوال هذه، والتي يعرفها الوورد ويستطيع التفاعل معها.

الرجاء الانتباه ان هذه الدوال غير مبرمجة وانما هي الدوال التي يجب علينا برمجتها
والظاهر في الموقع اعلاه هو فقط اسماءها وما تأخذ من بارمترات وما تعيد

هذا هو الكلاس الذي نفذنا فيه هذا ال api
كود PHP:
<?php
require_once("includes/mySQLAdapter.php");

class 
rpc_handler
{
private 
$server;
private 
$data;

private 
$actions = array(
'metaWeblog.newPost'=>'newPost',
'metaWeblog.editPost'=>'editPost',
'metaWeblog.getPost'=>'getPost',
'metaWeblog.getCategories'=>'getCategories',
'metaWeblog.getRecentPosts'=>'getRecentPosts',
'metaWeblog.newMediaObject'=>'newMediaObject',
'blogger.getUsersBlogs'=>'getUsersBlogs',
'blogger.deletePost'=>'deletePost',
'blogger.getUserInfo'=>'getUserInfo'
);

function 
__construct($data){


$this->server xmlrpc_server_create();
foreach (
$this->actions as $k=>$v):
xmlrpc_server_register_method($this->server,$k,array($this,$v));
endforeach;

$this->data=$data;

}
public function 
handle($request)
{
return 
xmlrpc_server_call_method($this->server$request'');
}
public function 
destroy()
{
xmlrpc_server_destroy($this->server);
}
public function 
newPost($method_name$params$app_data)
{

$usr $params[1];
$pwd $params[2];

$blogid $params[0];
$content $params[3];
$publish $params[4];

$auth $this->data->authUser($usr,$pwd);


if (!
$auth) return -1;
if (!
is_array($content)) return -2;



return 
$this->data->addPost($content['title'],$content['description'],$auth);
}

public function 
editPost($method_name$params$app_data)
{
$usr $params[1];
$pwd $params[2];

$pid $params[0];
$content $params[3];
$publish $params[4];

$auth $this->data->authUser($usr,$pwd);


if (!
$auth) return -1;
if (!
is_array($content)) return -2;



return 
$this->data->editPost($pid,$content['title'],$content['description']);

}

public function 
getPost($method_name$params$app_data)
{
$pid $params[0];
$usr $params[1];
$pwd $params[2];

$auth $this->data->authUser($usr,$pwd);
if (!
$auth) return -1;

$content $this->data->getPost($pid);

return array(
'title'=>$content['title'],'description'=>$content['body']);
}

public function 
getCategories($method_name$params$app_data)
{
$usr $params[1];
$pwd $params[2];

$auth $this->data->authUser($usr,$pwd);
if (!
$auth) return -1;

$cat $this->data->getCategories();
if (!
$cat) return -3;

$all = array();

foreach (
$cat as $c)
$feed['title']= $c;

$all[]=$feed;

return (
$all);
}

public function 
getRecentPosts($method_name$params$app_data)
{
$usr $params[1];
$pwd $params[2];

$auth $this->data->authUser($usr,$pwd);
if (!
$auth) return -1;

$posts $this->data->getRecentPosts();
if (!
$posts) return -3;

$all = array();

foreach (
$posts as $c)
$feed['title']= $c;

$all[]=$feed;

return (
$all);
}

public function 
newMediaObject($method_name$params$app_data)
{
$usr $params[1];
$pwd $params[2];

$auth $this->data->authUser($usr,$pwd);
if (!
$auth) return -1;

$media $params[3];
$name basename($media['name']);
$ext  pathinfo($media['name'], PATHINFO_EXTENSION);

 
$bits $media['bits'];
 
 if (
file_exists("uploads/".$name)) $name uniqid().".".$ext;


$ifp fopen"uploads/".$name"wb" );
@
fwrite$ifp,  $bits->scalar);
fclose$ifp ); 

  
return array(
"url"=>URL.'/uploads/'.$name);
}

public function 
getUsersBlogs($method_name$params$app_data)
{

$usr $params[1];
$pwd $params[2];

$auth $this->data->authUser($usr,$pwd);
if (!
$auth) return -1;



$response = array('url'=>URL,"blogid"=>"1","blogName"=>"ahmad");
return array(
$response);
}

public function 
deletePost($method_name$params$app_data)
{
$pid $params[0];
$usr $params[1];
$pwd $params[2];

$auth $this->data->authUser($usr,$pwd);
if (!
$auth) return -1;

return  
$this->data->deletePost($pid);


}

public function 
getUserInfo($method_name$params$app_data)
{
$usr $params[1];
$pwd $params[2];

$auth $this->data->authUser($usr,$pwd);
if (!
$auth) return -1;

$data $this->data->getUsersInfo($auth);

$response = array("nickname"=>$data->name,"userid"=>$data->id,'url'=>"http://google.com",
'email'=>$data->email);
return array(
$response);
}
}
الموضوع طال قليلًا لذلك اترك لكم البحث في الكود المرفق
وكفاية انني عرفتكم على هذا البروتوكول اذا لم تكونوا تعرفوه
طبعًا الملف المرفق فيه ملف كونفيج وملف لقواعد البيانات
قوموا بالتعديلات اللازمة

كذلك هناك ملف اسمه xml.rsd يستعمل للتعرف السريع على الاعدادت، ويعمل مع windows live writer ،بحيث تدخل للبرنامج عنوان الموقع الرئيسي فيقوم بالتعرف على مكان سيرفر ال xml-rpc، قوموا بالتعديل عليه ايضًا بتغيير الروابط التي فيه إلى الروابط الملائمة لتطبيقاتكم.
ويستخدم ملف ال xml.rsd عن طريق تضمينه بالصفحة الرئيسية للمدونة عن طريق التاغ:
كود PHP:
 <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://localhost/xml-rpc/rsd.xml" /> 
سلامات







آخر تعديل بواسطة ahmad sadiq في 12-05-2011 الساعة 01:17 AM.
ahmad sadiq is offline   قديم 12-02-2011, 10:09 PM
الرد مع إقتباس
عضو سوبر نشيط
#2  

مقال مميز من شخص مميز

صراحة مقال رائع ، لكني غير مهتم بهذه التقنيات على الاقل حاليا

سلمت يديك على الموضوع

ونتمنى ان نرى مواضيع اكثر من هذه النوعية وما شابهها

تحياتي لك






__________________
زورونا في موقع الحياة للنقاشات والأسئلة والأجوبة :
- php >> وهو لحل مشاكل php وما حولها
- Ideas >> وهو لعرض الأفكار وتقييمها وايضا لمناقشة الأفكار
عبدالله أبولبن is offline   قديم 12-02-2011, 10:34 PM
الرد مع إقتباس
عضو فعال
#3  

إقتباس:
المشاركة الأصلية بواسطة عبدالله أبولبن مشاهدة مشاركة
مقال مميز من شخص مميز

صراحة مقال رائع ، لكني غير مهتم بهذه التقنيات على الاقل حاليا

سلمت يديك على الموضوع

ونتمنى ان نرى مواضيع اكثر من هذه النوعية وما شابهها

تحياتي لك
تسلم والله شيخ عبد الله

انصحك ان تهتم بهذه التقنيات لأنها تفتح المجال للتعاون بين المواقع والتطبيقات المختلفة
وكذلك من شأنها ان تسوّق لموقعك، وهنا اذكر موقع الاخ خشباوي عندما عمل api وعمل اضافة مخصصة للوردبرس ،وبذلك قام بتوسيع مجال مستخدمي موقعه إلى اصحاب وزوار مدونات الوردبرس وبذلك زاد مستخدمو وزوار موقعه.
وانت ايضًا اذا كان لديك موقع خدمي ووفرت برنامج موبايل مرتبط به، وكان برنامج متميز في مجاله(ممكن اذ ان هذه الاسواق لا تزال ناشئة)
سوف تجذب لك مئات الاف المستخدمين الجدد(+الاعلان في ال app store)

هناك بروتوكول اخر بصدد الكتابة عنه وهو soap وسوف اكمل الموضوع في الأيام القادمة باذن الله

شكرًا







آخر تعديل بواسطة ahmad sadiq في 12-02-2011 الساعة 10:53 PM.
ahmad sadiq is offline   قديم 12-02-2011, 10:49 PM
الرد مع إقتباس
عضو نشيط
#4  

موضوعك جميل جدا اخي ahmad sadiq






__________________
راسلني من خلال البريد : aboahmed855 @ gmail.com
Abo-Ahmed is offline   قديم 27-03-2011, 06:03 AM
الرد مع إقتباس
عضو فعال
#5  

تسلم والله شيخ ابو احمد

كنت ناوي اكمل الموضوع لكن للاسف لا يوجد اهتمام بهذه التقنيات






ahmad sadiq is offline   قديم 28-03-2011, 06:33 AM
الرد مع إقتباس
عضو سوبر نشيط
#6  

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

وشكراً لك و راح احاول اقرا الموضوع و اعمل تطبيق عملي اول ما يكون جهازي جاهز للعمل

وشكراً لك و اسف مره ثانيه






__________________
اللهم أغفر لنا ولوالدينا وللمؤمنين والمؤمنات والمسلمين والمسلمات
الأحياء منهم والأموات يا أرحم الراحمين

موقع بلاكبيري
حمد مبارك is offline   قديم 03-06-2011, 02:40 PM
الرد مع إقتباس
عضو نشيط جدا
#7  

شكراً اخي الكريم على هذة المقالة الرائعة

أعتقد ان هذه التقنية مفيدة ايضاً في تقسيم الحمل على سيرفرات بمعني , أن يكون على سيرفر قاعدة البيانات
وعلى سيرفر أخر عميل , فعندما نريد استعلام , نرسل لسيرفر قاعدة البيانات ويرد علينا بمعلومات على شكل xml أو json

شكراً مرة أخر , وننتظر جديدك عن soap






__________________
إصبر على كيد الحسود فإن صبرك قاتله ...
أرسل خريطة موقعك لمحركات البحث
ahmadmarafa is offline   قديم 03-06-2011, 04:45 PM
الرد مع إقتباس
عضو نشيط
#8  

تصفح خفيف للموضوع، لحين الرجوع لقرائته بتأن، وفعلا يضيف لمعلوماتنا الجديد
بارك الله فيك واصل عطاءك..............






هاوي برمجة is offline   قديم 09-06-2011, 03:40 PM
الرد مع إقتباس
عضو نشيط
#9  

الاخ احمد صادق لك كل الشكر والثناء على مشاركاتك التي تثري محتوى سوالف بشكل خاص والعربي بشكل عام
لأننا وللآسف نفتقد مثل هذه المشاركات المفيده .
انا على علم يقين ان البعض قرأ موضوعك ويستطيع ان يزيد النثر نثراً آخر ولكن الخوف من ان يتفوق عليه في المعرفه هو السبب الوحيد في عدم المشاركه
اسف على الاطاله ، ازيد على ما كتبت ان بهذه الخاصيتين تقدر تعمل اتصال بين objective c and php
في ارسال forms عبر NRrequest الى php
وكذالك اخذ ال xml data من php الى objective c
بالطريقتين عملنا synchronous بين البرنامج و الموقع
وعن تجربه شخصيه ربط برنامج بالموقع يزيد من زوارك وتفاعل رهيب يحدث اتمنى من الكل الانتقال الى برمجة الهواتف الذكيه

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






__________________
سوق الكويت
Q8 Developer is offline   قديم 13-06-2011, 08:02 PM
الرد مع إقتباس
عضو فعال
#10  

إقتباس:
المشاركة الأصلية بواسطة حمد مبارك مشاهدة مشاركة
تم إعاادة رفع الموضوع لأهميته للكل و اسف يا صاحب الموضوع حاب اشوف تجارب اكثر على هل طريقه لانه وايد مهمه للمبرمجين

وشكراً لك و راح احاول اقرا الموضوع و اعمل تطبيق عملي اول ما يكون جهازي جاهز للعمل

وشكراً لك و اسف مره ثانيه
إقتباس:
المشاركة الأصلية بواسطة ahmadmarafa مشاهدة مشاركة
شكراً اخي الكريم على هذة المقالة الرائعة

أعتقد ان هذه التقنية مفيدة ايضاً في تقسيم الحمل على سيرفرات بمعني , أن يكون على سيرفر قاعدة البيانات
وعلى سيرفر أخر عميل , فعندما نريد استعلام , نرسل لسيرفر قاعدة البيانات ويرد علينا بمعلومات على شكل xml أو json

شكراً مرة أخر , وننتظر جديدك عن soap
إقتباس:
المشاركة الأصلية بواسطة هاوي برمجة مشاهدة مشاركة
تصفح خفيف للموضوع، لحين الرجوع لقرائته بتأن، وفعلا يضيف لمعلوماتنا الجديد
بارك الله فيك واصل عطاءك..............
إقتباس:
المشاركة الأصلية بواسطة Q8 Developer مشاهدة مشاركة
الاخ احمد صادق لك كل الشكر والثناء على مشاركاتك التي تثري محتوى سوالف بشكل خاص والعربي بشكل عام
لأننا وللآسف نفتقد مثل هذه المشاركات المفيده .
انا على علم يقين ان البعض قرأ موضوعك ويستطيع ان يزيد النثر نثراً آخر ولكن الخوف من ان يتفوق عليه في المعرفه هو السبب الوحيد في عدم المشاركه
اسف على الاطاله ، ازيد على ما كتبت ان بهذه الخاصيتين تقدر تعمل اتصال بين objective c and php
في ارسال forms عبر NRrequest الى php
وكذالك اخذ ال xml data من php الى objective c
بالطريقتين عملنا synchronous بين البرنامج و الموقع
وعن تجربه شخصيه ربط برنامج بالموقع يزيد من زوارك وتفاعل رهيب يحدث اتمنى من الكل الانتقال الى برمجة الهواتف الذكيه

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

شكرًا اخوتي على التفاعل

هناك برنامج أو بالأصح إطار عمل تستطيع من خلاله عمل تطبيقات للموبايل والديسكتوب
عن طريق تقنيات الانترنت مثل الجافاسكربت والهتمل وال css

اسمه appcelerator titanium

وقد اكتشتفته منذ مدة وهو جيد جدًا والتطبيقات التي يتم عملها فيه
تنفع لكل انواع الموبايلات مثل الايفون والاندرويد والبلاك بيري

لكن حاليًا حاطه على جنب بسبب كثرة المشاغل
هناك منه نسخة مجانية ونسخة مدفوعة

http://vimeo.com/8730218

http://www.appcelerator.com/products/download/










آخر تعديل بواسطة ahmad sadiq في 13-06-2011 الساعة 08:31 PM.
ahmad sadiq is offline   قديم 13-06-2011, 08:30 PM
الرد مع إقتباس
الرد على الموضوع



أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
[فكرة] التدوين الحديث و المرسوم عن طريق التدوين القديم اسلام مصطفي الويب والويب 2.0 والـ Semantic Web 4 10-11-2010 05:35 AM
(التدوين/البث الصوتي) و (التدوين/البث المرئي) ولا للمصطلحات الدخيلة على العربية أبو حازم الاسكندراني البودكاست podcast والسكرين كاست screencast 13 31-05-2009 09:29 PM
خدمات جديدة جدا .. مقدمة من دودا فور ديزاين .. ! ( لأصحاب المواقع ) شبكة السيف عروض البيع وطلبات الشراء في البرمجة والتصميم وبناء المحتوى وتبادل الاعلانات 3 09-09-2007 06:59 PM
[ مهم ] أفضـل داتا سنتر مقدمة خدمات سيرفرات قدساوي_متعصب سوالف الاستضافة 46 23-08-2006 02:50 AM
ارخص واسرع بطاقات شحن للتسوق الداخلى والخارجى عبر الانترنت مقدمة من شركة صوت مصر Sotmasr.com.eg عروض البيع وطلبات الشراء في البرمجة والتصميم وبناء المحتوى وتبادل الاعلانات 12 07-10-2005 04:53 AM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 04:30 PM.