2014-12-11 2 views
0

Моя основная цель - получить страницу, проанализировать текст и периодически создавать подстраницу в зависимости от текста. Для того, чтобы получить страницу, создать и войти в систему, я следующий код .php версия-5.3.3, сервер: локальныйКак создать страницу периодически с помощью wiki bot

private function login($username, $password, $wiki) { 
     $response = $this->postAPI($wiki, 'api.php?', 'action=login&lgname=' . urlencode($username) . '&lgpassword=' . urlencode($password)); 
     if ($response['login']['result'] == "Success") { 
      //Unpatched server, all done 
     } elseif ($response['login']['result'] == "NeedToken") { 
      //Patched server, going fine 
      $token = $response['login']['token']; 
      $newresponse = $this->postAPI($wiki, 'api.php?', 'action=login&lgname=' . urlencode($username) . '&lgpassword=' . urlencode($password) . '&lgtoken=' . $token); 
      if ($newresponse['login']['result'] == "Success") { 
       //All done 
      } else { 
       echo "Forced by server to wait. Automatically trying again.<br />\n"; 
       sleep(10); 
       $this->login($username, $password, $wiki); 
      } 
     } else { 
      //Problem 
      if (isset($response['login']['wait']) || (isset($response['error']['code']) && $response['error']['code'] == "maxlag")) { 
       echo "Forced by server to wait. Automatically trying again.<br />\n"; 
       sleep(10); 
       $this->login($username, $password, $wiki); 
      } else { 
       die("Login failed: " . $response . "\r<br />\n"); 
      } 
     } 
    } 

Функция, чтобы получить страница:

public function get_page($page, $wiki = "")//get page's content 
    { 
     $response = $this->callAPI($wiki, 'api.php?action=query&prop=revisions&titles=' . urlencode($page) . '&rvprop=content'); 
     if (is_array($response)) { 
      $array = $response['query']['pages']; 
      $array = array_shift($array); 
      $pageid = $array["pageid"]; 
      return $response['query']['pages'][$pageid]['revisions'][0]["*"]; 
     } else { 
      echo "Unknown get_page error.<br />\n"; 
      return false; 
     } 
    } 

У меня есть проблема с логином. Я всегда получаю принуждение сервером ждать. Автоматически повторять попытку, независимо от моего пароля и идентификатора. Infact Ури работает должным образом, если данный manually.And, если я пытаюсь создать страницу или получить категорию, я получаю следующее сообщение об ошибке:

Cannot modify header information - headers already sent by (output started at serverlocation/Phpwikibot.php:188) in serverlocation/includes/WebResponse.php

Может кто-нибудь помочь мне с этим вопросом?

+1

Пожалуйста, используйте поддерживаемое программное обеспечение бота, а затем дайте нам знать. https://www.mediawiki.org/wiki/API:Client_code – Nemo

ответ

0

Вы говорите «localhost», поэтому у вас есть серверный доступ, и вы должны использовать внутренний PHP API, а не веб-API. В частности, для редактирования страницы вы можете использовать maintenance/edit.php. См. a real world example Я использовал для некоторых Викимедиа wikis:

#!/bin/bash 
{ 
    # Stuff 
    # Fetch stuff 
    echo -e $stuff 
} | php edit.php --user "FuzzyBot" \ 
    --bot --summary "Update stats" "Meta:Babylon/Translation_stats"