2017-04-12 15 views
0

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%が欠けている)を私に与えていないことを認識しました。

+0

あなたのwikiに多くの編集がありますか(分単位で複数編集)ですか?または、一度すべてのページを一度に行き、行を追加し、スクリプトの実行中に作成/移動/編集されたページを無視するだけで満足できますか? – leo

+0

新しいページや編集したページを無視して、すべてのページを読むだけで満足できます。 –

+1

次に、興味のある名前空間内のすべてのページを取得するために['action = query&list = allpages'](https://www.mediawiki.org/wiki/API:Allpages)あなたのコードスニペットを追加するには、['action = edit'](https://www.mediawiki.org/wiki/API:Edit)のprependtext'オプションを使用してください。 – leo

答えて

-1

コメントのヒントとヒントのおかげで、スクリプトを正しく実行することができました。私は自分の質問に編集しました。

+0

この回答はおそらく私が答えではないために削除されるため、これについて新しい質問を作成してください。 – leo

+0

...質問が編集されたので、それは答えより多くのコメントです:D あなた自身の質問に答えるには、上記の質問を明確に述べてください。ここでのアイデアは、Q&Aを他の人にできるだけ便利にすることです。ほとんどのユーザーはあなたの質問の編集履歴全体を見ていないため、多くの指導を受けることができません – leo