https://bugzilla.wikimedia.org/show_bug.cgi?id=22005





--- Comment #2 from Amqui <lebo.bel...@gmail.com>  2010-01-04 06:54:49 UTC ---
I tries on en.wikinews just to make sure and I got the same error.

Here's the functions that I use : 
public function create_page($page, $text, $summary, $minor = false, $bot =
false, $wiki = "")//create a new page
      {
          $response = $this->callAPI($wiki,
"api.php?action=query&prop=info|revisions&intoken=edit&titles=" .
urlencode($page));
          $this->editdetails = $response["query"]["pages"];
          if (!isset($this->editdetails[-1])) {
              echo "Page $page already exists. Call edit_page instead.<br
/>\n";
              return false;
          }
          if ($this->put_page($page, $text, $summary, $minor, $bot, $wiki)) {
              return true;
          } else {
              echo "^^^ Error with put_page called from edit_page.<br />\n";
              return false;
          }
      }
      public function edit_page($page, $text, $summary, $minor = false, $bot =
true, $wiki = "")//edit a page which already exists
      {
          $response = $this->callAPI($wiki,
"api.php?action=query&prop=info|revisions&intoken=edit&titles=" .
urlencode($page));
          $this->editdetails = $response["query"]["pages"];
          if (isset($this->editdetails[-1])) {
              echo "Page $page does not already exist. Call create_page
instead.<br />\n";
              return false;
          }
          if ($this->put_page($page, $text, $summary, $minor, $bot, $wiki)) {
              return true;
          } else {
              echo "^^^ Error with put_page called from edit_page.<br />\n";
              return false;
          }
      }
      private function put_page($name, $newtext, $summary, $minor = false, $bot
= true, $wiki = "")//edit a page, regardless of whether it exists before or not
      {
          foreach ($this->editdetails as $key => $value) {
              $token = urlencode($value["edittoken"]);
              $sts = $value["starttimestamp"];
              if (isset($this->editdetails[-1])) {
                  $ts = $sts;
                  $extra = "&createonly=yes";
              } else {
                  $ts = $value["revisions"][0]["timestamp"];
                  $extra = "&nocreate=yes";
              }
          }
          $newtext = urlencode($newtext);
      $rawoldtext = $this->get_page($name, $wiki);
          $oldtext = urlencode($rawoldtext);
          $summary = urlencode($summary);

          if ($newtext == $oldtext) {
              //the new content is the same, nothing changes
              echo "The new content for " . $name . " is exactly the same as
the current content, so the page wasn't edited.<br />\n";
              return false;
          }
          if ($newtext == "") {
              //the new content is void, nothing changes
              echo "Error: you were about to blank the page of " . $name .
".<br />\n";
              return false;
          }

          $post =
"title=$name&action=edit&basetimestamp=$ts&starttimestamp=$sts&token=$token&summary=$summary$extra&text=$newtext";
          if ($bot) {
              if (!$this->allowBots($rawoldtext)) {
                  echo "Bot edits, or those specifically from this bot, have
been blocked on this page.<br />\n";
                  return false;
              }
              $post .= "&bot=yes";
          }
          if ($minor) {
              $post .= "&minor=yes";
          } else {
              $post .= "&notminor=yes";
          }
          $response = $this->postAPI($wiki, 'api.php', $post);
          if ($response["edit"]["result"] == "Success") {
              echo "Successfully edited " . $response["edit"]["title"] . ".<br
/>\n";
              sleep($epm);
              return true;
          } elseif (preg_match('/^Waiting for (.*) seconds lagged/', $result))
{
              echo "Error: max lag hit, not posted<br />\n";
              return false;
          } elseif (isset($response["error"])) {
        echo "Error - [".$response["error"]["code"]."] ".
$response["error"]["info"] ."<br />\n";
                return false;
          } else {
              echo "Error - " . $response["edit"]["result"] . "&nbsp;<br />\n";
              return false;
          }
      }
      private function wiki($wiki)//manager wiki different from default wiki
      {
          if ($wiki == "") {
              //if not declarated put default wiki
              return $this->wiki;
          } elseif (strpos($wiki, "://") == false) {
              //if is a mediawiki project the user write only code language
              return "http://"; . $wiki . ".wikipedia.org/w/";
          }
          //if it is a other wiki project
          return $wiki;
      }
      private function callAPI($wiki, $url, $format = "php") {
          $wiki = $this->wiki($wiki);
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
          curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
          curl_setopt($ch, CURLOPT_URL, ($wiki . $url . "&maxlag=" .
$this->max_lag . "&format=$format"));
          $response = curl_exec($ch);
          if (curl_errno($ch)) {
              return curl_error($ch);
          }
          curl_close($ch);
          return unserialize($response);
      }
      private function postAPI($wiki, $url, $postdata = "") {
          $wiki = $this->wiki($wiki);
          $ch = curl_init();
          $url = $wiki . $url;
          if ($postdata !== "") {
              $postdata .= "&";
          }
          $postdata .= "format=php&maxlag=" . $this->max_lag;
          //echo "Final postdata: $postdata<br />\n";
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_POST, 1);
          curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
          curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
          curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:
application/x-www-form-urlencoded;charset=UTF-8'));
          curl_setopt($ch, CURLOPT_HEADER, false);
          $response = curl_exec($ch);
          if (curl_errno($ch)) {
              return curl_error($ch);
          }
          curl_close($ch);
          echo $response;
         return unserialize($response);
      }

The error message is in the response from the server that I got in the postAPI
function in $response.

Amqui


-- 
Configure bugmail: https://bugzilla.wikimedia.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

_______________________________________________
Wikibugs-l mailing list
Wikibugs-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikibugs-l

Reply via email to