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

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

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

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

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

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

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

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

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

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

?>