في الماضي وتحديدا من قبل شهر ابريل 2010 (تاريخ غير دقيق) كنا كمبرمجين نستطيع الحصول على تغريدات اي شخص في تويتر على شكل تغذيات RSS حيث كان يتوفر رابط rss جاهز لهذا الامر يزودنا بالتغريدات على شكل تغذيات rss, ولكن بعد هذا التاريخ لم يعد ذلك الامر ممكننا بالطريقة المعتادة.
فما الحل لو اردت ان احصل على تغريدات شخص معين في تويتر على شكل تغذيات rss؟
وما هي الطريقة المطلوبة لو اردت الحصول على نتيجة بحث معينه في توتير على شكل rss feeds؟
هذا ما احاول الاجابة عليه في هذا المقال وباكثر من طريقة.
كان تويتر في السابق يقدم رابط تغذيات rss يمكننا من خلالها الحصول على تغريدات اي مستخدم في توتير على شكل تغذيات rss وهذا الامر لم يعد ممكننا بشكل مباشر والحل هو اتباع مجموعة من الطرق التي ساتحدث عن احدها اليوم.
الطريقة الاولى: الاتصال مع twitter api وتكوين تغذيات rss عن طريق مخرجات الاتصال مع api تويتر.
الطريقة الثانية: تكوين تغذيات rss بعد عمل web scrapping لمحتوى صفحة المستخدم المطلوب في تويتر.
والان دعني اتطرق للطريقة الاولى علما بانني سافرد تدوينة منفصلة للطريقة الثانية في المستقبل باذن الله
الطريقة الاولى: عن طريق الاتصال بـ twitter api
يمكننا استخدام المكتبة الجاهزة “PHP Twitter Feed” المبرمجة من قبل “Manuel Lemos” والمكتوبة بلغة PHP في جلب التغريدات لمستخدم معين او البحث في تويتر عن كلمة معينه او هاشتاق معين عن طريق الاتصال بـ twitter api. وللعلم هذه المكتبة تتطلب بعض المكتبات الاخرى الموجودة على موقع phpclasses وقد قمت بتجميع كامل المكتبات المطلوبة مع الملفات والتي سوف اشرحها هنا ، ويمكنك تحميل كامل الملفات من خلال ملف مظغوط من خلال الرابط التالي.
حيث تقوم هذه المكتبة بالاتصال بـ twitter api واسترجاع المطلوب ومن ثم توليد تغذيات RSS 2.0، واستخدام twitter api يتطلب منك الحصول على صلاحية استخدام من تويتر.
ان اهم 3 ملفات في حزمة الملفات هما الملفات التالية:
configuration.php get_search.php get_statuses.php
اما باقي الملفات فهي ملفات مساندة.
بعد تحميل الملف المضغوط وفك ظغطة في المكان المناسب لك قم على تحرير الملف “configuration.php” وادخل معلومات حساب Twitter API الخاص بك وللعلم يمكنك انشاء حساب API من هنا وذلك بانشاء تطبيق جديد.
بعد ادخال معلومات ال API الخاص بك في ملف “configuration.php” وحفظ الملف الان تستطيع استخدام المكتبة “PHP Twitter Feed” في جلب التغريدات وصياغتها كتغذيات RSS. وذلك عن طريق الملفين الاخرين وهما get_search.php و get_statuses.php.
حيث يمكنك استخدام الملف get_search.php في البحث عن نص معين في التغريدات الموجودة في تويتر. يمكنك تحرير الملف ووضع اي عبارة بحث ترغب بها. او بتمرير المعطيات عن طريق البرامتر q كمتغير GET. والتالية هي محتويات الملف للمعاينة
<?php /* * get_search.php * * @(#) $Id: get_search.php,v 1.2 2013/06/21 12:46:36 mlemos Exp $ * */ require('http.php'); require('oauth_client.php'); require('xml_writer_class.php'); require('rss_writer_class.php'); require('twitter_feed.php'); $parameters = array( 'q'=>(IsSet($_GET['q']) ? $_GET['q'] : '#الاردن') ); $twitter = new twitter_feed_class; $twitter->debug = false; $twitter->debug_http = true; require('configuration.php'); if(strlen($twitter->access_token) == 0 || strlen($twitter->access_token_secret) == 0) die('Please access the get_token.php script and set the access_token'. ' and access_token_secret in the line '.$token_line.' of the '. $token_file.' configuration script.'); if(($success = $twitter->Initialize())) { $success = $twitter->GetSearch('tweets', $parameters); $success = $twitter->Finalize($success); } if($twitter->exit) exit; if($success) { $twitter->Output(); } else { Header('HTTP/1.1 503 Service Temporarily Unavailable'); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Twitter Feed error</title> </head> <body> <h1>Twitter feed error</h1> <pre>Error: <?php echo HtmlSpecialChars($twitter->error); ?></pre> </body> </html> <?php } ?>
ويمكن عن طريق الملف get_statuses.php جلب تغريدات مستخدم معين في تويتر وصياغتها على شكل تغذيات RSS ويمكنك تحرير الملف وتحديد اسم المستخدم او عن طريق تمرير اسم المستخدم في المتغير screen_name الوارد الى الملف عن طريق GET. والتالية هي محتويات الملف للمعاينة
<?php /* * get_statuses.php * * @(#) $Id: get_statuses.php,v 1.3 2013/06/24 01:25:53 mlemos Exp $ * */ require('http.php'); require('oauth_client.php'); require('xml_writer_class.php'); require('rss_writer_class.php'); require('twitter_feed.php'); /* * Statuses may be mentions_timeline, user_timeline, home_timeline, * retweets_of_me */ $statuses = (IsSet($_GET['statuses']) ? $_GET['statuses'] : 'user_timeline'); $parameters = array( 'screen_name'=>(IsSet($_GET['screen_name']) ? $_GET['screen_name'] : 'mshannaq') ); $twitter = new twitter_feed_class; $twitter->debug = false; $twitter->debug_http = true; require('configuration.php'); if(strlen($twitter->consumer_key) == 0 || strlen($twitter->consumer_secret) == 0) die('Please access the get_token.php script and set the access_token'. ' and access_token_secret in the line '.$token_line.' of the '. $token_file.' configuration script.'); if(($success = $twitter->Initialize())) { $success = $twitter->GetStatuses($statuses, $parameters); $success = $twitter->Finalize($success); } if($twitter->exit) exit; if($success) { $twitter->Output(); } else { Header('HTTP/1.1 503 Service Temporarily Unavailable'); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Twitter Feed error</title> </head> <body> <h1>Twitter feed error</h1> <pre>Error: <?php echo HtmlSpecialChars($twitter->error); ?></pre> </body> </html> <?php } ?>
[box type=”warning” align=”aligncenter” ]ولكن للعلم فان استخدام twitter api محكوم بعدد اقصى يمكنك تنفيذه من الطلبات، راجع حدود استخدام twitter api لمعرفة الحد الاقصى من الطلبات الذي يمكنك طلبه من خلال twitter api. وكمثال فقط فانه يمكنك طلب استرجاع تغريدات مستخدم معين بمعدل 300 طلب كل 15 دقيقة ان كنت تنفذ الطلب عن طريق صلاحيات تطبيق او 150 طلب كل 15 دقيقة ان كنت تنفذ الطلب عن طريق صلاحيات مستخدم. وبالتالي اذا كنت تنوي برمجة نظام ضخم قد يتعدى 300 طلب كل 15 دقيقة فانك قد تحتاج لاستخدام اكثر من حساب API او قد تلجا لاستخدام طرق اخرى لجلب التغريدات.[/box]
علما بانني سوف اتحدث عن طرق اخرى في تدوينات منفصلة لاحقا باذن الله.
ويمكنك مراجعة الاداة التالية التي قمت ببرمجتها على عجالة بالاعتماد على ما تم ذكره في هذه التدوينه على الرابط التالي http://shannaq.com/tools/twitt الذي يوضح مثالا عمليا على جلب تغريدات مستخدم معين من تويتر عن طريق twitter api.
تدوينة رائعة جدا كنت أبحث عنها
لدي بعض الإسفسارات حول الحد الأقصى من الطلبات لاسترجاع تغريدات مستخدم معين عن طريق التطبيق
ذكرت أخي العزيز الحد الأقصى 300 طلب كل 15 دقيقة
لنفرض ان لدي 1000 مستخدم أريد أن أسترجع آخر 20 تغريدة لكل مستخدم
كم من الوقت ستسغرق عملية الإسترجاع بحيث لا أنتهك سياسة الإستخدام الخاصة بموقع تويتر
هل ان كل عملية لإسترجاع آخر 20 تغريدة لمستخدم معين تعتبر طلب واحد أو أنها تعتبر 20 طلب.
وارجو أن أكون وفقت في توضيح الفكرة وأن تكون مفهومة بالنسبة لك.
ودمتم في حفظ الله ورعايته
الاخ الكريم ، كل عملية طلب على تويتر API تعتبر طلبا واحدا بمعنى اذا طلبت تغريدات مستخدم معين فسوف تعود لك اخر 20 تغريدة وسوف تحتسب على انها طلب واحد فقط.
بالنسبة لمثالك في ان لديك 1000 مستخدم وتريد طلب تغريداتهم دون ان تنتهك سياسات تويتر فهناك اكثر من حل واكثر من طريقة ومن احدها الذي يخطرني الان هو ان تجعل برنامجك يعمل من خلال المهام المجدولة وتقوم بوضع عداد يحسب عدد الطلبات التي قمت بها ففي حال وجدت البرنامج ان عدد الطلبات وصل ل 300 فانه يتوقف عن الطلب. وفي المقابل تقوم بعمل اليه اخرى عن طريق المهام المجدولة تقوم بتصفير ذلك العداد كل 15 دقيقة مثلا. (على الرغم من ان هذا المثال يجب تحسينه الا انه يمكن ان يخدم ربما كمثال سيء)
انصحك بمراجعة الرابط التالي لمعرفة حدود استخدام تويتر API
https://dev.twitter.com/rest/public/rate-limiting
استفساري ايضا حول الحد القصى لطلب تغريدات مستخدم معين هل ينطبق ذلك الحد على طلبات كلمة معينة في البحث بمعنى ان لديا كلمة بحث معينة اريد جلب تغريدات هذا البحث اكثر من هذا الحد المذكور فهل ذلك ممكن …اتمنى استفساري واضح واشكرك جزيل الشكر
الاخ بن علي
اي طلب من خلال تويتر يعتبر طلبا سواء كان لمستخدم او لهاش تاج او بحثا عن كلمة معينة في تويتر. بالتالي اذا كنت تستخدم API تويتر بصلاحيات مستخدم فان اقصى حد مسموح به للطلبات هو 150 طلب في ال 15 دقيقة. اما اذا كنت تستخدم تويتر API بصلاحيات تطبيق فان اقصى طلب هو 300 طلب في ال 15 دقيقة. وهذا الامر لا يمكن القفر عنه تلاعبا على تويتر API ولكن يمكن التغلب على المشكلة بجعل برنامجك يعمل عن طريق المهام المجدولة كما هو مذكور في رد سابق لي في هذه التدوينة.