المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [شرح] الحصول على معلومات وسم Meta من صفحة أخرى


fire4x
05-12-2008, 08:08 PM
بسم الله الرحمن الرحيم

الحمدلله ، والصلاة والسلام على رسول الله ، وبعد ؛

إخوتي أعضاء منتديات الرحيق معلمين ومتعلمين .. أحببت أن أقدم شيئاً حيث أني لم أقدم شيء لهذا الموقع الغالي الذي قدم لي الكثير ... http://www.swalif.net/softs/images/smilies/frown.gif

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

سوف أشرح القليل عن دالة get_meta_tags ثم نتطرق إلى مثال بسيط بإذن الله تعالى ..

في البداية هذه الدالة ظهرت في PHP 3 منذ الإصدارة 3.0.4 وبقيت في PHP 4 ولا تزال في PHP 5 ..

وظيفة هذه الدالة هي إعادة مصفوفة تحتوي على خصائص وسوم meta من ملف معين ..

صيغة الدالة العامة هي:
كود PHP:
array get_meta_tags ( string filename [, bool use_include_path] )


حيث filename هو عنوان الملف الذي تريد جلب معلومات وسوم meta فيه .. وفي الوسوم التي توجد في الهيدر لتعريف بعض الأمور الخاصة بالصفحة .. ويمكن ان يكون الملف محلي ( ضمن نطاق السيرفر الذي تعمل عليه ) .. أو صفحة انترنت خارج نطاق السيرفر ...
سوف يتم فتح هذا الملف وطباعة محتوياته سطراً سطراً من اسطر وسوم meta انتهاءً بوسم الإغلاق للهيد ..
كود PHP:
</head>


اما الباراميتر الثاني use_include_path والذي هو من نوع منطقي Boolean كما هو واضح في الصيغة العامة للدالة .. فإنه لو كان TRUE فسوف يتم تضمين الملف من مسار مجلد التضمين الأساسي في البي إتش بي .. للمزيد يمكنك الاطلاع على اعدادات البي اتش بي بخصوص هذا الاعداد:
http://www.php.net/manual/en/ini.cor...i.include-path (http://www.php.net/manual/en/ini.core.php#ini.include-path)

لنفرض أنه لدينا وسوم ميتا التالية:
كود PHP:
****** name="author" *******="name">
****** name="keywords" *******="php ********ation">
****** name="DESCRIPTION" *******="a php manual">
****** name="geo.position" *******="49.33;-86.59">
</head> <!-- هنا تتوقف عملية سحب البيانات -->


قيمة الخاصية name في وسم الميتا سيتم اخذها على اساس انها مفتاح للعنصر في تلك المصفوفة .. فكل عنصر يتكون من المفتاح ( اسم الميتا تاج ) .. وقيمة هذا العنصر هي قيمة الخاصبة ******* للميتا تاج ..
إذا كان هناك أكثر من وسم ميتا يتضمن نفس قيمة الخاصية name فسيتم إعادة قيم الوسم الأخير فقط ..!

ملاحظة مهمة: جميع الرموز الخاصة في قيمة اسم الميتا تاج يتم تحويلها إلى "_" .. اما باقي الاحرف فيتم تحويلها الى lowercase ( حروف صغيرة ) ..

لنأخذ مثال بسيط يقوم بطباعة محتويات وسوم الميتا في المثال السابق بعد افتراض تخزين الملف السابق باسم test.html في نفس مسار الملف الذي سوف تنشئه الان :
كود PHP:
<?php

$meta = get_meta_tags('test.html'); // تنفيذ الدالة بحيث يصبح المتغير عبارة عن مصفوفة تحتوي على القيم التي ذكرناها سابقاً

// لاحظ هنا كيف اصبحت جميعها حروف صغيرة واستبدلت "." بـ "_"
echo $tags['author']; // name
echo $tags['keywords']; // php ********ation
echo $tags['description']; // a php manual
echo $tags['geo_position']; // 49.33;-86.59
?>

الآن دعونا نفكر أكثر .. لو أردنا مثلاً تفحص موقع معين لمعرفة هل هو يستخدم vBulletin مثلاً والحصول على إصدار نسخته .. ماذا سنفعل عندها ؟؟
تأمل في الكود التالي قليلاً :
كود PHP:
<?php

$url = "http://www.vbulletin.com/forum";

$meta = get_meta_tags($url);
while (list($key, $value) = each($meta)) {
if ($key == "generator" && preg_match("/^vBulletin/si", trim($value))) {
echo '<span dir="rtl">هذا الموقع يعتمد على برنامج vBulletin الإصدار'. trim(preg_replace("/vbulletin/si", "", $value)) .'</span>';
} else {
echo '<span dir="rtl">لا يستخدم vBulletin.</span>';
}
}

?>

لو فكرت قليلاً لوجدتنا حددنا عنوان الموقع وهو http://www.vbulletin.com/forum (http://www.vbulletin.com/forum) في البداية في متغير قمنا بتسميته url$ ...
ثم جلبنا إلى المتغير meta$ مصفوفة بمعلومات ميتا تاج في تلك الصفحة ...
بعدها بدأنا بتفريغ محتويات تلك المصفوفة بواسطة حلقة while مستخدمين دالة list التي قمت بشرح كيفية استخدامها في 09-01-2006 http://www.swalif.net/softs/images/smilies/tongue.gif في الرابط التالي:
http://www.swalif.net/softs/showthread.php?t=144215 (http://www.swalif.net/softs/swalif45/softs144215/)

وتأكدنا من ان المفتاح key وهو كما ذكرت سابقاً نفس خاصية name في الميتا نفسها .. لذلك فسنضعه نفسه مع جعل الاحرف صغيرة واستبدال الرموز الخاصة بـ "_" .. تأكدنا انه generator حيث هناك يقوم منتدى vBulletin بطباعة النسخة والاصدار ..

وتأكدنا ان المتغير يحتوي على vBulletin في بدايته ثم طبعنا الاصدار بحذف كلمة vBulletin من خاصية ******* التي جعلناها هنا ( value$ ) وطبعنا رقم الاصدار بعد حذف المسافات البيضاء قبله وبعده ..

وان لم يكن vBulletin بعدها سيطبع انه ليس vBulletin ...

أعتقد أن هذا المثال واضح .. ان شاء الله تعالى ..

أما ان كنت تريد الحصول على وسم اخر ليس meta فقد وجدت في المانيوال شخصاً قد كتب هذا الكود وبالطبع يمكن تعديله او استخدام اكودا اخرى تفي بالغرض حيث أنه فقط للمساعدة:
كود PHP:
<?php

$page = "http://www.mysite.com/apage.php";

// tags
$start = '<atag>';
$end = '<\/atag>';

// open the file
$fp = fopen( $page, 'r' );

$cont = "";

// read the *******s
while( !feof( $fp ) ) {
$buf = trim( fgets( $fp, 4096 ) );
$cont .= $buf;
}

// get tag *******s
preg_match( "/$start(.*)$end/s", $cont, $match );

// tag *******s
$*******s = $match[ 1 ];

?>

أتمنى أن يكون أي شخص قد استفاد حتى لو القليل من هذا الدرس .. وانتظروني مرة اخرى في دروس اخرى ان شاء الله تعالى http://www.swalif.net/softs/images/smilies/smile.gif
تحياتي، fire4x of morroco;)

زهرة البنفسج
06-12-2008, 12:32 AM
مشكور اخي العزيز وجزاك الله كل خير