Mediawiki:如何从外部脚本更新页面内容?

Mediawiki: how to update page content from external script?

我想通过 cron 运行 脚本更新我们 wiki 的 Main_Page。

除了页面内容本身,在pagecontent.old_text中,我还需要更新什么?

如果我只更新“old_text”字段,则不会显示新内容。我得到了以前的内容,大概是从某个地方的缓存中得到的。在 LocalSettings.php 我有 $wgMainCacheType = CACHE_NONE;。所以我想我还需要更新 Mediawiki 数据库中的其他内容?

(以防万一,这是在 Debian 10 上使用 Apache 和 PostgreSQL 的 Mediawiki 1.31.10)

使用 maintenance/edit.phpedit API, Pywikibot 等。尝试通过直接数据库操作进行更改是一个相当糟糕的主意。

更新 page.page_touched 中的时间戳可以使 wiki 显示新内容。

此示例使用的是 PostgreSQL 数据库,因此如果与更常见的 MySQL 数据库一起使用,可能需要进行一些调整。

要更新由页面名称标识的页面文本,需要连接 pagerevisionpagecontent 表。此示例更新名为“草稿”的页面:

UPDATE pagecontent
SET old_text = 'New page content'
FROM page, revision
WHERE page.page_title='Drafts'
  AND pagecontent.old_id=revision.rev_text_id
  AND page.page_latest=revision.rev_id;

并更新页面时间戳以便 wiki 显示新内容:

UPDATE "page"
SET page_touched = now()
WHERE page_namespace = '0'
  AND page_title = 'Drafts';

另一种避免直接修改数据库的方法是使用像 External Data. There are examples to embed a text file in a page, and here 这样的扩展来嵌入数据库查询的输出。