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.php
、edit API, Pywikibot 等。尝试通过直接数据库操作进行更改是一个相当糟糕的主意。
更新 page.page_touched
中的时间戳可以使 wiki 显示新内容。
此示例使用的是 PostgreSQL 数据库,因此如果与更常见的 MySQL 数据库一起使用,可能需要进行一些调整。
要更新由页面名称标识的页面文本,需要连接 page
、revision
和 pagecontent
表。此示例更新名为“草稿”的页面:
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 这样的扩展来嵌入数据库查询的输出。
我想通过 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.php
、edit API, Pywikibot 等。尝试通过直接数据库操作进行更改是一个相当糟糕的主意。
更新 page.page_touched
中的时间戳可以使 wiki 显示新内容。
此示例使用的是 PostgreSQL 数据库,因此如果与更常见的 MySQL 数据库一起使用,可能需要进行一些调整。
要更新由页面名称标识的页面文本,需要连接 page
、revision
和 pagecontent
表。此示例更新名为“草稿”的页面:
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