الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ارجو من اهل الخبرة مساعدتي في قراءة ميتا داتا

بدأه Web Crawler في 11 نوفمبر 2010 · 14 رد · 1,403 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

الاعضاء الافاضل ارجو مساعدتي في التعديل على هذا الكود لجعل الاسكريبت يقرا الميتا داتا من المواقع العربيه مثل التايتل و الوصف الخاص بالموقع

كودي يشتغل في حاله الموقع انجليزي فقط ارجو المساعده

الاكواد في المرفقات

class.metatags.php

Usage.php

#2

السلام عليكم ورحمة الله وبركاته

ارجو من الاخوة المبرمجين و الخبراء مساعدتي و لكم جزيل الشكر

#3

يا جماعة معقول لا يوجد خبير في php في هذا المنتدى العريق ليساعدني في قراءة metadata لمواقع عربية

#4

و عليكم السلام و رحمة الله و بركاته

اخى الكريم عدلتلك الكود و تجده فى المرفقات يعمل مع المواقع العربية بإذن الله

بالنسبة للتعديلات فهى فى الملف الخاص بعرض الـ metadata حيث ان هناكخطأ بالترميز ، فأضفت هذا السطر فى البداية :

header('Content-type: text/html;charset=windows-1256');

هذا كفيل بحل المشكلة

و لكن هناك امر اخر بعيد عن هذه المشكلة

فى السطر 76 فى ملف class.metadata.php :

eregi("<title>(.*)</title>", $line, $out)

فان الدالة eregi تم الاستغناء عنها بدءاً من الاصدار PHP 5.3.0 و الان يتم استخدام preg بدلا منها ( Perl Compatible Regular Expression )

فالافضل ان تستبدل هذه الدالة بـ :

preg_match("/<title>(.*)<\/title>/i",$line, $out)

اضفت هذا التعديل ايضا على ملف class.metadata.php ( يمكنك الاستغناء عنه اذا اردت )

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

بالتوفيق ان شاء الله smile.gif

Ar-Metadata.zip

تم تعديل هذه المشاركة بواسطة SamDev في 14 نوفمبر 2010 في 01:14

I don't care how you code , i have my own style and i like it

#5

جزاك الله الف خير يا اخي الفاضل اعذرني على عدم الرد لاني كنت ذاهب للحج

و اسأ ل الله لك الفردوس الاعلى من الجنة

لقد قمت بأختبار التعديلات الموجوده على الكود و عندنا طلبت من البرنامج ان يعرض الميتا داتا لموقع قوقل اعطاني الخطأ التالي

Warning: file_get_contents(http://www.google.com.sa/) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 405 Method Not Allowed in C:\Users\toshiba\Desktop\xampp\htdocs\class.metatags.php on line 48

Error

و ايضا عندما طلبت من ابرنامج ان يعرض الميتا داتا لموقع جامعة الملك سعود اعطاني التالي :

UntitledNone set

فكيف اعالج المشاكل السابقة

تم تعديل هذه المشاركة بواسطة Web Crawler في 22 نوفمبر 2010 في 15:22

#6

up

#7

حضرة الاستاذ SamDev هل تستطيع مساعدتي و لك جزيل الشكر و الامتنان

#8

اعتذر جدا عن التأخير ، لبعض الامتحانات و المشاكل الفترة الماضية

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

هذه المشاكل هى مشاكل المواقع نفسها و لا يوجد مشكلة بالبرنامج

بالنسبة لـ Google فهو لا يسمح باستخدام هذه الدوال

و الموقع الاخر فالمشكلة بالموقع نفسه حيث انه يرفض الاتصال بشكل ما

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

فليس هناك اخطاء من ناحيتك

و للامانه العلمية ، قد تصادف مشاكل ايضا فى هذا البرنامج اذا كان الـ title Tag يحتوى على العلامة ( ' )

تم تعديل هذه المشاركة بواسطة SamDev في 28 نوفمبر 2010 في 04:19

I don't care how you code , i have my own style and i like it

#9

جزاك الله الف خير

#10

اخوي SamDev السلام عليكم ورحمة الله وبركاته

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

الان عندما اقرا من ملف ال url التي ارغب من البرنامج ان يعرض لي الميتا داتا الخاصه بها فأن بعض اللينكات لا تعمل

بينما تعمل عندما اكتبها بهذا الشكل

$meta->getmetadata("http://wahtever.com");

ولكن عندما اقرا سطر سطر ال url من ملف فأن بعضها لا يعمل و انا مستغرب من ذلك فأرجو ان تساعدني في ذلك

أسأل الله لك و لي و لوالدينا جنة الفردوس

us.php

class.metatags.php

welcome.txt

#11

السلام عليكم و رحمة الله و بركاته

هناك مشكلتين عند القراءة من ملف ، المشكلة التى ذكرتها و مشكلة اخرى

بالنسبة للمشكلة التى تحدث عن قراءة الروابط من ملف :

تفسيرها : هو انه عندما يقرأ الكود سطراً معيناً فإنه يقرأه كاملا ، حيث ان السطر الواحد لا يحتوى على الرابط فقط بل ان السطر ايضا يتضمن حرف السطر الجديد " n\ " ، لذلك بدلا ان يكون الكود :

$meta->getmetadata("http://uk.yahoo.com/");

اصبح الكود عند القراءة من الملف بالشكل التالى :

$meta->getmetadata("http://uk.yahoo.com/\n");

لاحظ زيادة " n\ " عند القراءة من الملف و هذا هو سبب المشكلة .

و الحل : هوالتأكد من إزالة كل الفراغات بما فيها " n\ " عند قراءة كل سطر عن طريق الدالة trim قبل معالجة او قراءة الميتا داتا للرابط ، و ذلك بطريقتين : اما ان تكون هذه العملية عند قراءة كل ملف ( اى فى ملف الاستخدام ) او ان تكون قبل معالجة الرابط و قراءة الميتا داخل الكلاس ( اى داخل الدالة getmetadata داخل الكلاس ) و لك حرية الاختيار و لكن اظن ان الطريقة الاخيرة هى الافضل لكى تتجنب تكرار هذه العملية فى المستقبل و لزيادة منطقية الكلاس فى نفس الوقت .

فيكون التعديل على الشكل التالى ، نضع هذا الكود فى بداية دالة getmetadata :

//Exclude White-Spaces
$url = trim($url);

المشكلة الاخرى هى ظهور هذا الخطأ :

اقتباس

Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in /opt/lampp/htdocs/test/general/file/class.metatags.php

تفسيرها : هو وجود بعض السطور الفارغة فى نهاية الملف

و هذه السطور عبارة عن علامة السطر الجديد التى ذكرناها و يتم ازالة هذه العلامة كحل للمشكلة السابقة ، فيتم استخدام الدالة :

$d= file_get_contents("http://",false,$context );

هنا تم استخدامها مع لاشئ او http فقط ، مما يسبب الخطأ

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


if(trim($url) == '')
{
echo $this->error_invalid_url;
exit();
}
//If Url is empty or contain just white-spaces

و يمكن دمجه مع كود حل المشكلة السابقة ليكون حل المشكلتين وضع الكود :


//If Url is empty or contain just white-spaces
if(trim($url) == '')
{
echo $this->error_invalid_url;
exit();
}
//Exclude White-Spaces
else {$url = trim($url);}

فى بداية الدالة

function getmetadata

الان فى حالة قراءة سطور فارغة سيعرض كلمة Error فقط

لاتتردد فى عرض اى مشكلة تقابلك و بالتوفيق

الكلاس بعد الاضافة فى المرفقات smile.gif

class.metatags.php

تم تعديل هذه المشاركة بواسطة SamDev في 1 ديسمبر 2010 في 03:56

1

I don't care how you code , i have my own style and i like it

#12

السلام عليكم ورحمة الله وبركاته

اخوي و الله لا اعلم كيف اشكرك و لكن لا اقول الا جزاك الله جنة عرضها السموات و الارض

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

عندما يكون حجم الفايل كبير و مليان مواقع يعطي خطا في الصفحة و هو انه التايم تجاوز 60 ثانيه فلا اعرف كيف احلها

ايضا هنالك ملف اخر يطلع لي خطأ و هو Fatal error: Call to a member function escape_string() on a non-object in كيف اعالج هذه المشكله الله يبارك فيك

جزاك الله الف خير بارك الله فيك

تم تعديل هذه المشاركة بواسطة Web Crawler في 3 ديسمبر 2010 في 01:25

#13

و عليكم السلام و رحمة الله و بركاته ،

اقتباس
عندما يكون حجم الفايل كبير و مليان مواقع يعطي خطا في الصفحة و هو انه التايم تجاوز 60 ثانيه فلا اعرف كيف احلها

هذا يتعلق بــ max_execution_time بملف الاعدادت php.ini ، فيمكنك تعديل هذا الاعداد ( اذا كان لديك صلاحيات لذلك ) ،

او تعديلها من خلال الكود باستخدام الدالة set_time_limit و هذه الدالة تأخد بارميتر واحد و هو عدد الثوانى الذى تريده ليكون الحد الاقصى لتنفيذ الكود ، مثال على ذلك ( نحدد الحد الاقصى 18 ثانية ) :

<?php
set_time_limit(18);
?>

ايضا قد لا يكون لديك صلاحيات لاستخدام هذه الدالة ، لذلك فهناك حل اخر و هو يشبه الى حد ما فكرة ( تعدد الصفحات ) بمعنى ان لا يتم معالجة جميع الروابط الموجودة فى الملف على مرة واحدة بل تقسيمها على عدة صفحات ، باستخدام متغير $_GET مثلا ليحدد لنا نقطة البداية فى كل صفحة ، و لكن هنا اختلاف ففى نظام تعدد الصفحات نقوم بتقسيم النتائج على اساس عدد النتائج ( اى مثلا كل صفحة تعرض 10 نتائج ) و لكن هنا نقسمها على اساس الوقت المستغرق لتنفيذ الكود ، بمعنى ان نقوم فى البداية بمعالجة الروابط بشكل طبيعى و نتأكد قبل معالجة كل رابط اننا لم نستغرق مثلا 10 ثوانى منذ ان بدأ الكود إلى ان وصلنا إلى هذا الرابط ، فاذا لم نستغرق او نتخطى 10 ثوانى نكمل معالجة الرابط ، اما اذا تخطينا ال 10 ثوانى ، نقوم بعمل redirect لنفس الصفحة و لكن مع متغير فى $_GET يحمل رقم اخر رابط او سطر توصلنا له فى الصفحة السابقة ليكمل من حيث توقفنا و هكذا

أرجو ان تكون الفكرة وضحت ان كان هناك اى غموض او نقاط غير واضحة اخبرنى لافسرها لك بشكل اكبر

اقتباس
ايضا هنالك ملف اخر يطلع لي خطأ و هو Fatal error: Call to a member function escape_string() on a non-object in كيف اعالج هذه المشكله الله يبارك فيك

احتاج للاطلاع على الكود لاخبرك بالمشكلة ، فالاخطاء تتشابه و الاسباب تتعدد ، لذلك لا استطيع الحكم فى هذا الموضوع الان ، اعذرنى

فى الرد القادم ارجو ان تخبرنى ان كانت فكرة الحل الاول وضحت ام تحتاج الى توضيح اكثر فيمكننى توضيحها و لكن التوضيح به بعض الطول فلم ارد ان اطول عليك فى البداية ان لم يكن هناك داعى ، و ارفقلى الكود المسبب للخطأ الثانى smile.gif

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

1

I don't care how you code , i have my own style and i like it

#14

بسم الله الرحمن الرحيم والسلام عليكم ورحمة الله وبركاته

والله ما قصرت في الرد وخدمه الناس يا SamDev بشكرك من كل قلبي لان نادرا ما نري مبرمج متفوق هنا :sleep:

واصل طريقك هكذا لان في الغالب ستكون المدير علي موقع للبرمجة ذو مستوي عالي مش المشرف او العضو . :wink:

وربما سأتعلم منك في المستقبل لان فشل كثير من الناس في تخصص البرمجة .

اهنيك . :blush:

تم تعديل هذه المشاركة بواسطة DieKonigin في 1 أبريل 2011 في 05:40

#15

بواسطة الداله get_meta_tags()

مثال بسيط

<?php

/**
 * Function to read meta information from the given domain.
 *
 * @param string $domain

 */
function getSiteMeta($domain){
  // Read META info
  $tags = get_meta_tags($domain);

  // Check the result and display it.
  if (sizeof($tags) == 0){
    echo '<tr><td>No META information was found!</td></tr>';
  }

  foreach ($tags as $key=>$value) {
    echo "<tr><td>$key: </td><td>$value</td></tr>";
  }

}

 if (isset($_POST['submitBtn'])){

      $domainbase = isset($_POST['domainname']) ? $_POST['domainname'] : '' ;
      $domainbase = str_replace("http://","",strtolower($domainbase));

      echo '<table width="100%">';
    getSiteMeta("http://".$domainbase);
    echo '</table>';
  }

?>


<html>
<body>
   <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="domain">
     <table>
       <tr><td>Site URL: <input name="domainname" type="text"/></td></tr>
       <tr><td><input type="submit" name="submitBtn" value="Get META" /></td></tr>
     </table>  
   </form>

</body>   
</html>
1

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…