مستخدم:وهراني/صفحات التوضيح
المظهر
روبوت صفحات التوضيح برنامج آلي لإضافة وتحديث صفحات التوضيح
طریقة العمل
[عدل]هذا الروبوت يجمع قائمة المقالات التي تشترك في نفس الاسم (مثل أثينا وأثينا (أوريغون) وأثينا (إلينوي) ..). ويقوم تحديث/استحداث صفحة التوضيح بروابط لمقالات القائمة. وبعد ذلك يربط هذه المقالات بصفحة التوضيج.
قد يتضمن العمل استحداث صفحة التوضيح (من شاكلة اسم_مشترك_(توضيح)) وصفحة تحويل نحو صفحة التوضيح عنوانها الاسم المشترك.
الإشكالات
[عدل]يرجى وضع كل حالة خاطئة لاحظتموها في صفحة النقاش لهذه الصفحة.
الكود المصدري
[عدل]لاستعمال هذا الكود : راجع مساعدة:الشروع في العمل مع بيشي
<?php
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);
require_once( /* PATH TO PEACHY */ . '/Init.php' );
define('MSG_HDR','[[مستخدم:وهراني/صفحات التوضيح|عملية توضيح]] : ');
function Distinguish($title,$titles,$wiki = false){
// عنوان صفحة التوضيح
$tdis = $title." (توضيح)";
//صفحة العنوان الرئيسي
$pprinc =$wiki->initPage($title,null, /*$followRedir =*/ false);
//صفحة التوضيح
$pdis =$wiki->initPage($tdis);
if($pprinc->get_exists() ) {
// الصفحة الرئيسية موجودة
if(in_array('تصنيف:صفحات توضيح',$pprinc->get_categories()))
// لفترة : تجاوز حالة الصفحة الرئيسية هي صفحة التوضيح
return -1;
$txt = $pprinc->get_text();
if(strpos($txt,"#تحويل") === false and strpos($txt,"#redirect") === false ) {
// pprinc article ==> ajout liens
if(!in_array($tdis, $pprinc->get_links()) && $pdis->redirectFollowed() ===false) {
$txt = "{{وضح|3=".$tdis."}}\n".$txt;
$pprinc->edit($txt,MSG_HDR."إضافة رابط لصفحة التوضيح");
}
}else {
//الصفحة الرئيسية هي تحويل :: لا شيء يغير
}
} else {
// الصفحة الرئيسية غير موجودة ==> استحداثها على شكل تحويلة نحو صفحة التوضيح
if($pdis->redirectFollowed() ===false)
$pprinc->edit("#redirect [[".$tdis."]]",MSG_HDR."تحويل نحو صفحة التوضيح");
}
/// Dis
if($pdis->get_exists() ) {
// صفحة التوضيح موجودة
if(!in_array('تصنيف:صفحات توضيح',$pdis->get_categories()))
//ليست صفحة توضيح لعدم ارتباطها بتصنيف صفحات التوضيح
return -2;
$l2add = array();
//البحث عن الصفحة التي لا يوجد رابط لها في صفحة التوضيح
foreach($titles as $t)
if(strpos($t,'توضيح') === false && !in_array($t, $pdis->get_links())) $l2add[] .= $t;
if(count($l2add)>=1)
{
$txt = $pdis->get_text();
$txt = str_replace(array("{{توضيح}}\n","\n{{توضيح}}"),'',$txt);
$cpos = strpos($txt,"\n*");
if($cpos) {
$part1 = trim(substr($txt,0,$cpos));
$part2 = substr($txt,$cpos);
$txt = $part1;
foreach($l2add as $ll) $txt .= "\n* [[".$ll."]]";
$txt .= $part2;
} else {
$txt = trim($txt);
foreach($l2add as $ll) $txt .= "\n* [[".$ll."]]";
}
$txt ="{{توضيح}}\n".$txt;
$pdis->edit($txt,MSG_HDR."تحديث");
}
else return -3;
//لا يوجد رابط لاضافته
} else {
//صفحة التوضيح غير موجودة ==> استحداثها + الروابط
$txt = "قد يقصد من '''«".$title."»''' :";
foreach($titles as $t)
if(strpos($t,'توضيح') === false) $txt .="\n* [[".$t."]]";
$txt ="{{توضيح}}\n".$txt;
$pdis->edit($txt,MSG_HDR."استحداث صفحة توضيح");
}
//الصفحات الأخرى
foreach($titles as $t) {
// اضافة رابط نحو صفحة التوضيح لكل الصفحات
cecho( "\n\t ---->[ $t|INFO] \n");
if(strpos($t,'توضيح') !== false || $title ==$t) continue;
$pt =$wiki->initPage($t);
if(!$pt->get_exists() || $pt->redirectFollowed()) continue;
if(!in_array($tdis, $pt->get_links()) && $pt->redirectFollowed() ===false) {
$txt = $pt->get_text();
$txt = "{{وضح|3=".$tdis."}}\n".$txt;
$pt->edit($txt,MSG_HDR."إضافة رابط لصفحة التوضيح");
}
}
return 0;
}
$w = Peachy::newWiki(null, /*Username*/ 'BotName', /*password*/ 'BotPassword', 'https://ar.wikipedia.org/w/api.php',);
//استرجاع قائمة المقالات مرتبة أبجديا
$leArray = array(
'list' => 'allpages',
'_code' => 'ap',
'apdir' => 'ascending',
'apnamespace' => array(0),
'apfilterredir' => 'nonredirects',
'apfilterlanglinks' => 'all',
'_limit' => 5000
);
if(file_exists(dirname(__FILE__).'/lastpage.txt')) $from= trim(file_get_contents(dirname(__FILE__).'/lastpage.txt'));
else $from = "د";
cecho("\n"."\n\n >>>> البداية من : [".$from."|INFO]\n\n");
if( $from ) $leArray['apfrom'] = $from; //
if( $prefix ) $leArray['apprefix'] = $prefix; //
$allpages =$w->listHandler( $leArray );
if(count($allpages)<5) {file_put_contents(dirname(__FILE__).'/lastpage.txt',''); cecho ("\n\n\t***** [نهاية القائمة|COMMENT]\n\n"); exit();}
$pages = array();
foreach($allpages as $page) {$pages[]=$page['title']; $lastpage= $page['title']; }
$l1=$l2=array();
foreach($pages as $ll){
if(strpos($ll,'(') !== false) {
$s = strstr($ll,' (',true);
if(trim($s) == '') continue;
if(in_array($s,$pages)) $l1[$s][]=$s;
$l1[$s][]=$ll;
}
}
foreach($l1 as $k=>$v) { if(count($v)>2) $l2[$k]=array_unique($v);}
foreach($l2 as $k=>$v){
$v = array_unique($v);
// البحث فقط عن المقالات المتشابهة بعدد أكثر من 3
if(count($v)>3) {
cecho ("\n************ [ $k |INFO] *****************\n");
print_r($v);
$r = Distinguish(strval($k),$v,$w);
cecho("\n**************[res: $r |".(($r==0) ?'INFO':'ERROR')."]***************\n");
file_put_contents(dirname(__FILE__).'/lastpage.txt',$lastpage = array_pop($v));
}
}
?>