2

私は次の例を実装しました: Mediawiki と Python

Get wikipedia abstract using pythonHow to parse/extract data from a mediawiki mark-up article via pythonなどを読みました。

カテゴリに関連付けられたウィキペディアのスタブのダンプを取得し、それらを内部のセマンティック メディアウィキ サイトに挿入しようとしています。この例では、「Somali_Region」カテゴリを使用しています。スクリプトは、mediawiki API を使用してデータを取得し、データを解析して、必要なすべてのテンプレート情報を削除します。

from wikitools import wiki
from wikitools import category
import mwparserfromhell

wikisite = "http://en.wikipedia.org/w/api.php"
parse_category = "Somali_Region"

wikiObject = wiki.Wiki(wikisite) 
wikiCategory = category.Category(wikiObject, parse_category)
articles = wikiCategory.getAllMembersGen(namespaces=[0])

for article in articles:
   wikiraw = article.getWikiText()
   parsedWikiText = mwparserfromhell.parse(wikiraw)
   for template in parsedWikiText.filter_templates():
      parsedWikiText.remove(template)
   print parsedWikiText

ウィキペディアからダンプして挿入しようとすると、内部セマンティック メディアウィキ サイトが失敗するため、これはオプションではありません。セマンティック メディアウィキ サイトにデータを挿入するために API を使用することは可能ですか? mediawiki API edit pageを読みましたが、python の例が見つかりませんでした。

4

1 に答える 1

1

私の理解が正しければ、あなたはparsedWikiTextそれを非公開ウィキに保存してください。

そのようなことを行うために私が持っているものは次のとおりです (どこかに保存する必要があります。私は構成ファイルを使用しますが、より安全な方法がありますUSERNAME) 。PASSWORDあなたのforループの直前からピックアップします...

# Set up and authenticate into the target wiki if you need to.
from wikitools import wiki, page
target_wiki = wiki.Wiki('http://wiki.example.com/w/api.php')
site.login(USERNAME, PASSWORD)

for article in articles:
    wikiraw = article.getWikiText()
    parsedWikiText = mwparserfromhell.parse(wikiraw)
    for template in parsedWikiText.filter_templates():
        parsedWikiText.remove(template)

    # Use the API's edit function to save the new content.
    target_title = article.title
    target_page = page.Page(target_wiki, target_title)
    result = target_page.edit(text=parsedWikiText, summary="Imported text")

    # Check to see if it worked.
    if result['edit']['result'] == 'Success':
        print 'Saved', target_title
    else:
        print 'Save failed', target_title

parsedWikiTextここでは、新しいページに保存することを想定しています。ウィキのページに既に何かがある場合は、まずそれを読んでからtarget_page.getWikiText()、新しいテキストを何らかの方法で混ぜる必要があります。また、この記事はウィキペディアと同じ名前になると想定しています。そうでない場合は変更しtarget_titleます。

于 2014-06-25T19:07:53.830 に答える