TweetANew

提供: きまぐれ手記 Kimagurenote
移動先: 案内検索

MediaWiki Extension:TweetANew を使い、MediaWikiの新着/更新情報が自動的にtwitterに流れるようにした。

MediaWiki 1.29 からの仕様変更に伴う修正

注意: Extension:TweetANew からダウンロードできる最新の REL-1.29 では下記の修正が反映されているようなので(修正したならphabricatorに一言くれればいいのにと思うが)、最新版に更新すればpatchを当てなくても動きそう。--2017年8月30日 (水) 21:48 (JST)

Hooks

TweetANew では下記3つのHookが使われているが、これらは全て旧処理で非推奨となっており、上2つは 1.28.x までは使えるものの、次の 1.29 では打ち切られてしまうようだ。

  1. ArticleInsertComplete
  2. ArticleSaveComplete
  3. EditPageBeforeEditChecks

とはいえ、上2つは代替処理が用意されているので、そちらを使うよう書き換える。

困ったのは3つめの EditPageBeforeEditChecks で、これは(すぐに打ち切られることはないとは思うが)まだ代替処理に関する解説が無い。

探すと、似たようなことが出来そうな物 EditPageGetCheckboxesDefinition が見つかったが、これはまだ実装されておらず、1.29.0 から実装予定のようだ。

そこで、まず上2つは新しい処理に書き換える。3つめのはひとまず残し、新処理を加えて、$wgVersion を見て分岐させることにする。

MediaWiki 1.29 での動作確認はしていないが、RELEASE版が出た後で改めて試してみたいと思う。

MediaWiki 1.29 の Hooks/EditPageGetCheckboxesDefinition 対応

MediaWiki 1.29.1 を入れたので、ようやくパッチの動作を試せるようになった…

マニュアルも更新されていた。Hookで編集するarrayの書き方は EditPage::getCheckboxesDefinition() を見ろとある(includes/EditPage.php のコードを見るのが早い)。

更新された仕様に合わせてパッチを書き換え。これで、1.29以降で実装された新処理でチェックボックスが出るようになり、ツイートもできるようになった。

なお、しばらくは旧処理のままでも動くと思われるが(1.29.1では旧処理も動いていた)、チェックボックスのデザインも変わっていた(旧処理ではチェックボックスの見た目も古いままになり違和感がある)ので、新処理への更新がお勧め。 --2017年8月30日 (水) 20:20 (JST)

Article→WikiPage

1.28.xTweetANew 1.28 の組み合わせで使うと下記のエラーが発生してMediaWikiが止まってしまう。

Fatal error: Call to undefined method WikiPage::estimateRevisionCount()
	in /path/to/MediaWiki/extensions/TweetANew/TweetANew.body.php on line 120

Fatal error: Call to undefined method WikiPage::getContext() in /path/to/MediaWiki/extensions/TweetANew/TweetANew.body.php on line 202

※修正しながら動かしていたので、行番号はずれているかもしれない。

コードを眺めていると、Article を直接呼んでいる箇所が複数あるが、今はこうした操作は保証外で、替わりにWikiPageを使うことが推奨されているようなので、該当する処理を全て書き換える。

なお、このうち (Article)->getContext()->msg は wfMessage() に換えればよい

patch

TweetANew.1.28.patch を更新しました。以前のパッチは1.29以降でうまく動かないので、新しいパッチで書き換えてください。(TweetANew.body.1.28.patch の方は変更無し) --2017年8月30日 (水) 20:20 (JST)

install

  1. 以前のバージョンがインストール済みの場合は事前に移動しておく
  2. ここ から 1.28 をダウンロードして、MediaWiki の extensions ディレクトリ下に展開
  3. 上記2つのパッチをダウンロードして同じ場所に置く
  4. patch適用
% cd /path/to/MediaWiki/extensions
% mv TweetANew TweetANew.old
% wget https://extdist.wmflabs.org/dist/extensions/TweetANew-REL1_28-541a296.tar.gz
% tar xzf TweetANew-REL1_28-541a296.tar.gz
% cd TweetANew
% wget http://kimagurenote.net/file/TweetANew.1.28.patch
% wget http://kimagurenote.net/file/TweetANew.body.1.28.patch
% patch -p < TweetANew.1.28.patch 
% patch -p < TweetANew.body.1.28.patch 

report

https://phabricator.wikimedia.org/T168842 にて報告しておいた。以前Bugzillaを使っていた頃から今回Phabricatorに変わっていてアカウント作成が面倒だった…--2017年6月26日 (月) 19:42 (JST)

MediaWiki 1.28 までの仕様変更に伴う修正

1.27.x を飛ばして 1.28.x に更新したところ、TweetANewが原因で動作しなくなってしまった。

一旦無効にして更新を進め、後にエラーログを確認した所、下記のエラーが出ていた。

Fatal error: Call to undefined function wfMsg()
	in /path/to/MediaWiki/extensions/TweetANew/TweetANew.php on line 227

調べると、 wfMsg() が MediaWiki 1.27 LTS までで削除されたとある。

最新の TweetANew 1.28 では対策済みになっていたので、これをインストールして動かすと、次に異なるエラーが発生。

Fatal error: Call to undefined method WikiPage::estimateRevisionCount()
	in /path/to/MediaWiki/extensions/TweetANew/TweetANew.body.php on line 120

…なんだか根が深そうだx_x

#MediaWiki 1.29 からの仕様変更に伴う修正 につづく

過去の不具合

ここで2014年までに報告した不具合(マルチバイト文字への対応を含む)は、全て修正済みになっていた。

インストール

基本的に mw:Extension:TweetANew#Installation の通りでいいんだけど…

2014年までに報告した不具合修正は反映済みになっていたので、少なくとも MediaWiki 1.26.x までは、ここから最新版を入手して普通にインストールすれば使えるはずです。