VoteNY拡張をウィキに追加して、すべてのユーザーが互いに評価できるようにしました。この拡張機能には、各ページに入稿可能な行番号各ページの上に特定の行を追加する方法(Mediawiki)
が必要です。 今私はに最初にを書こうとしていますが、これらの行を各ページ(〜10000ページ)の上にプログラムで書き込みます。私はすでに新しい記事が作成されたときにその行を追加するフックを見つけました。しかし、すべてのページにこの行があるはずです。
これは私がこれまで持っているものです。
<?php
$TitleList = [];
# get the edit ticket
$jsn = file_get_contents('http://wiki/api.php?action=query&meta=tokens&format=json');
$json_a = json_decode($jsn, true);
$token = $json_a['query']['tokens']['csrftoken'];
# populate the list of all pages
$urlGET = 'http://wiki/api.php?action=query&list=allpages&format=json';
$json = file_get_contents($urlGET);
$json_b = json_decode($json ,true);
foreach ($json_b['query']['allpages'] as $page)
{
array_push($TitleList, $page['title']);
}
# //add the line on top of every page
foreach ($TitleList as $title)
{
$data = array(
'action' => 'edit',
'title' => $title,
'prependtext' => '<vote type="1"></vote>',
'token' => $token);
# Create a connection
$url = 'http://wiki/api.php?';
$ch = curl_init($url);
# Form data string, automatically urlencode
$postString = http_build_query($data, '', '&');
# Setting our options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
# Get the response
$response = curl_exec($ch);
curl_close($ch);
echo($response);
}
は、これは、これまでに機能可能です。しかし、私は&list=allpages
が私のwikiのすべてのページ(40%が欠けている)を私に与えていないことを認識しました。
あなたのwikiに多くの編集がありますか(分単位で複数編集)ですか?または、一度すべてのページを一度に行き、行を追加し、スクリプトの実行中に作成/移動/編集されたページを無視するだけで満足できますか? – leo
新しいページや編集したページを無視して、すべてのページを読むだけで満足できます。 –
次に、興味のある名前空間内のすべてのページを取得するために['action = query&list = allpages'](https://www.mediawiki.org/wiki/API:Allpages)あなたのコードスニペットを追加するには、['action = edit'](https://www.mediawiki.org/wiki/API:Edit)のprependtext'オプションを使用してください。 – leo