افتح القائمة الرئيسية

مستخدم:وهراني/صفحات التوضيح

روبوت صفحات التوضيح برنامج آلي لإضافة وتحديث صفحات التوضيح

طریقة العملعدل

هذا الروبوت يجمع قائمة المقالات التي تشترك في نفس الاسم (مثل أثينا وأثينا_(أوريغون) وأثينا_(إلينوي) ..). ويقوم تحديث/استحداث صفحة التوضيح بروابط لمقالات القائمة. وبعد ذلك يربط هذه المقالات بصفحة التوضيج.

قد يتضمن العمل استحداث صفحة التوضيح (من شاكلة اسم_مشترك_(توضيح)) وصفحة تحويل نحو صفحة التوضيح عنوانها الاسم المشترك.

الإشكالاتعدل

يرجى وضع كل حالة خاطئة لاحظتموها في صفحة النقاش لهذه الصفحة.

الكود المصدريعدل

لاستعمال هذا الكود : راجع مساعدة:الشروع في العمل مع بيشي

<?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));
    }
}

?>