MTでMediaWiki記法を使う

  • 投稿日:
  • by
  • カテゴリ:

Wikiのような記法をMTで使いたい場合,標準でMarkdown記法がサポートされています。
ただ,管理人はMediaWikiをよく使っているため,MediaWikiの記法とMarkdown記法が似ているぶん,両者の記法が混乱してしまい,プレビューを見て直すということがしばしばあります。
そこで,MTでMediaWiki記法を可能にするプラグインMT-Plugin-Mediawikiを試してみることにしました。 プラグインは以下のリンクから入手できます。

MT-Plugin-Mediawiki 作ってみた | 勤務先と無関係なことを書く日記

ダウンロードしたファイルを解凍後,pluginsフォルダにアップロードすれば使用可能になります。

PageButeプラグインによるページネーション

  • 投稿日:
  • by
  • カテゴリ:

PageButeプラグインによるページネーションを導入しました。
いろいろな方法があるなかでPageButeプラグインを選んだのは,次の理由からです。

  • 静的なままでページネーションを実現できる
  • プラグインのメンテナンスが最近まで続いている
  • 日本語による解説が充実している

PageButeプラグインは以下のページから入手できます。

静的ページ用ページ分割プラグイン:PageBute | エンジニアブログ - スカイアーク

導入はプラグインディレクトリにアップロード後,分割したいページのテンプレート(メインページ,カテゴリ別ブログ記事リスト,月別ブログ記事リストなど)を編集して行います。編集の仕方は次の記事を参考にしました。

PageBute プラグインによるページ分割 | 小粋空間

1.<mt:Entries>を<mt:PageContents>で囲む

<mt:Entries>~</mt:Entries>を<mt:PageContents>~</mt:PageContents>で囲みます。
<mt:PageContents>のcountオプションで何件の記事ごとに区切るか指定します。
区切りは<mt:PageContents>のほうで指定するので<mt:Entries>ではlimitオプションは指定しません。

2.<mt:PageSeparator />タグで分割位置を指定

<mt:PageContents>~</mt:PageContents>の間に<mt:PageSeparator />を記述してページの分割位置を指定します。
記事ごとに区切ることがほとんどだと思いますので</mt:Entries>の直前に記述すればよいでしょう。

3.ページ移動のためのリンクを作成

<mt:PageLists />,<$mt:PageBefore$>,<mt:IfPageBefore>,<$mt:PageNext$>,<mt:IfPageNext>でページ移動用のリンクを作成します。



実際のコードは次のようになります。

指定件数ごとに記事を分割

<mt:PageContents count="5">

<mt:Entries>

...

<mt:PageSeparator />
</mt:Entries>

</mt:PageContents>

前後のページへのナビゲーション

<mt:IfPageBefore>
 <span><$mt:PageBefore delim="<"$></span>

</mt:IfPageBefore> <mt:PageLists /> <mt:IfPageNext>

 <span><$mt:PageNext delim=">"$></span>

</mt:IfPageNext>

MTへのページネーションの導入

  • 投稿日:
  • by
  • カテゴリ:

トップページとアーカイブページにページネーションを導入しました。
MTのページネーションには,本体のみで実現する方法,プラグインを使う方法いずれも複数の方法がありますが,検討時に調べたものを下記にリストアップします。
なお,実際にはPageButeプラグインを利用する方法を採用しました。その導入などについてはまた別の記事で。

プラグインを必要としない方法

ダイナミックパブリッシングによるページ分割

MT4.2から導入された
実験的な機能でサポート対象外とされている

http://www.movabletype.jp/documentation/designer/pagination.html

スタティックページのページ分割

MT4.3から導入された
1ページ目はスタティックに生成,2ページ目以降はmt-search.cgiを利用して動的に生成される
検索機能を利用しているため,2ページ目以降はURLが検索クエリを含んだ長いものになる

http://www.movabletype.org/documentation/designer/pagination-static.html

公式が英語なので,小粋空間さんの日本語の解説記事も

http://www.koikikukan.com/archives/2009/07/29-005555.php

プラグインを利用する方法

MTPaginateプラグインを利用する方法

PHP化が必要
非商用フリー,商用利用は有償
2007年3月で更新がとまっている

http://www.nonplus.net/software/mt/MTPaginate.htm?page=all

ArchivePageプラグインを利用する方法

MT3.3対応

http://www.boundless-ocean.ne.jp/2007/02/archivepage.html

Pagerプラグインを利用する方法

MT4.1と4.2で動作確認がされている

http://junnama.alfasado.net/online/2008/08/movable_type_developer_confere.html

PageButeプラグインを利用する方法

MT4,MT5対応

http://www.skyarc.co.jp/engineerblog/entry/2642.html

Paged Archivesプラグイン

MT3.2~5.1まで対応(2012年12月現在)

http://www.aldenbates.com/plugins/pagedarchives.html

MT4.2系へのzenbackの設置

  • 投稿日:
  • by
  • カテゴリ:

管理人自身でさえめったにアクセスしないこのブログ・・・
久しぶりに更新したついでにzenbackを設置してみました。

MTは最新では5.12が出ていますが,私が使っているのはいまだにMT4.2系(本稿執筆時のバージョンは4.292)・・・
5系を特に避けているというわけでもないのですが,セキュリティリリースが出ている間は4.2系でいこうかなと思っています。
ということで,需要はほとんどないと思いますが,自分の備忘もかねて設置方法をメモ。

設置はzenbackのサイトで発行されたコードを表示したい位置にあわせてコードに貼り付ければいいわけですが,「ブログ記事」などのテンプレートに直接コードを貼り付けるよりも,テンプレートモジュールを使うことで既存のテンプレートにほとんど手をつけることなく設置することができます。


1.zenback用テンプレートモジュールの作成

  1. 管理画面を[デザイン]-[テンプレート]とたどり,テンプレートモジュールの項目のところで「テンプレートモジュールを作成」をクリックします。
  2. 新規テンプレートの作成画面が開くので適当な名前を付け(「zenback」などでいいと思います),本文にはzenbackのサイトで発行されたコードを貼り付けます。
  3. 保存を押して元の画面に戻ります。

2.アーカイブテンプレートの編集

zenbackを設置したいアーカイブテンプレートにさきほど作成したテンプレートモジュールを追加します。ブログの各記事に表示されるようにするには「ブログ記事」テンプレートを編集します。

  1. 「ブログ記事」テンプレートをクリックして編集画面を開きます。
  2. zenbackを表示させたい位置に<$mt:Include module="作成したzenback用テンプレートモジュールの名前"$>を貼り付けます。このブログのように各記事の下に表示させる場合は<$mt:Include module="コメント"$>の下でよいと思います。
  3. テンプレートを保存して記事を再構築するとzenbackが表示されるようになります。


最初はテンプレートモジュールではなくてウィジェットを使ってzenback用のウィジェットを作ってそれをウィジェットセットに組み込むことで既存のテンプレートを一切編集することなしにサイドバーなどに表示させることができると考えました。
しかし,サイドバーなどはブログ全体に適用されるウィジェットセットなので,単に発行されたコードだけの内容でウィジェットを作成すると,個別記事だけでなくトップページやカテゴリ,月別などのアーカイブにもzenbackが表示されてしまいます。
それを避けるためにはアーカイブウィジェットグループのようにアーカイブ名などで条件分岐を作るための知識が必要になってきます。
そこで,既存のテンプレートを1行だけとはいえ編集することにはなってしまいますが,テンプレートモジュールを使う方法を選択しました。

Mediawikiでは通常のコンテンツだけでなく特別ページも一部を除いて,誰でも閲覧可能になっている。
しかし,個人でWikiを運用している場合,特別ページの閲覧を制限したいことがある。
特に気になるのはデータの外部書き出しなどだろうか。
自分の運営するサイトのコンテンツをまとめてコピーできる機能を誰でも使えるというのは,好ましくない場合もあるだろう。

特別ページの閲覧制限はLockdownエクステンションを利用することによって実現できる。
なお,LockdownエクステンションはMediawkiのバージョン1.12では利用できないということなので注意が必要である。
管理人は1.16.0で作業を行った。

Extension:Lockdown/ja

1.エクステンションの導入

(1)上記ページより取得したファイルをextensionsディレクトリにコピー
  ファイルが複数あるのでextentionsディレクトリの下にLockdownなどという名前のディレクトリを作成し,その中にまとめて入れるとよい。

(2)LocalSettings.phpの編集
下記の1行を追加する

require_once("$IP/extensions/Lockdown/Lockdown.php");

2.エクステンションの設定

閲覧制限の設定もLocalSettings.phpを編集して行う。
個別の特別ページの閲覧を特定のグループに制限するには,

$wgSpecialPageLockdown['ページ名'] = array('グループ名');

のように記述する。
ページデータの書き出しをsysopのみに限定する場合は次のようになる。

$wgSpecialPageLockdown['Export'] = array('sysop');

ページ名は,日本語で運用している場合であっても,「ページデータの書き出し」ではなく「Export」のように英語で定義されているものを指定する必要がある。
ページ名の定義はincludesディレクトリの中にあるSpecialPage.phpにあるので,それを参照する。

なにかと話題のTwitter。APIもいろいろ公開されていて,自分もなにか作ってみたいと思っていました。

巷には凝ったサイトがいろいろあるけど,最初からそれを目指すのは無理!ということで,
練習としてTwitter Search APIを使ってTwitterのつぶやきに現れるユーザーが買っているものを抽出して表示するページを作ってみました。
その名も「買ったったー」。
「買ったもの」の抽出にはYahooキーフレーズ抽出APIを利用しています。

手順の概略

1.Twitter Search APIで「買った」「ゲット」「購入」を含んでいるつぶやきを取得

2.正規表現を使ってURLや@id,ハッシュタグなどを除去

3.つぶやきを数個(現在は10個ずつに設定)ずつ結合 (雑音情報の軽減のため)

4.Yahooキーフレーズ抽出APIを使ってキーフレーズを抽出

5.結果を静的HTMLに書き出し

上記の手順をcronを使って定期的に実行

参考ページ
PHPで Twitterの Search APIを使って検索する例|floatingdays

テキスト解析 - キーフレーズ抽出|Yahoo!デベロッパーネットワーク


データの表示形式


データの表示形式について,最初はタグクラウドのように1行に何個も抽出されたキーフレーズが並ぶという形式を考えました。
しかし,実際やってみると,1行に複数並べるよりは,1行に1つずつ表示したほうが見やすいと感じました。
現段階ではキーフレーズに「重み」情報がついているわけでもないので,たくさんの単語が同じ大きさで並ぶというのは視認性があまりよくないのかもしれません。
そこで,キーフレーズごとに改行して表示という形式に改めました。

ただし,その副作用として今度は「ページの右側が大きく空いてとてもさびしい」という状況が発生しました。
もともとデザインにはこだわっていないのですが,それにしてもちょっと殺風景すぎるなあと。

そこで,抽出されたキーフレーズを検索することもあるかもしれない?ということでamazonのサーチウィジェットを貼り付けました。
スクロールとともに移動する仕組みはCALM-WEB.COMのm_script.jsを利用させていただいております。うまく移動しない場合は一度ウィンドウ内のどこかをクリックすると動くようになるようです。

もっとも,amazonでそのまま検索して出てくるようなフレーズはあまり抽出されてこないんですよね(笑)
googleの検索を置いたほうが実用的かも?ただ,文字情報中心なのでメインであるキーフレーズの一覧が目立たなくなってしまうかもしれません。

参考ページ:CALM-WEB.COM


検索語の選定理由


どうして「買った」という言葉に注目したかというと,以前からTwitterの検索機能を使って「買った」とか「食べ(た)」「読んだ」「見た」などの動詞を使って検索するのが面白いと思っていました。
しかし,「食べた」は「パスタなう」など,「なう」で置き換えられてしまいますし,「読んだ」は本だけではなく新聞やWEB上の記事など対象が広がりすぎる傾向があります(それも含めて調べることも意味はあるとは思いますが)。
また,「見た」もテレビなどの視聴は「なう」が使われてしまい,しかも流行っているものほどその傾向が強いように思います。
これらに比べて「買った」は本当に買ったというつぶやきがリストアップされる率が高く,「ゲット」「購入」をカバーすればそれ以外に置き換えられることもあまりないと感じていました。(ただし,「購入」には広告も多いですが)。
そこで,Twitter Search APIを使ったプログラミングの最初の練習として,「買ったもの」を抽出するものを作成することにしました。


感想


テスト段階も含めてまだ2,3日動かしただけですが,その中で感じたこと。

思った以上に結果がかぶらない
正午付近では食べ物に関するフレーズが増えるといったような傾向はあるものの,同じフレーズがヒットすることはあまりない

1度に100個のつぶやきしか取得していないので,その中でかぶらないのは当然な面もあるのですが,時間を置いてみても同じものはあまり出てきません。
(時間が近いと前と同じつぶやきを拾っているらしい挙動でかぶるということはあります。)
現在はログをとっていないですが,ログを記録して週や月単位で集計するとなにかが見えてくるかもしれませんが。
その場合は表記のゆれをどう集約するかなども課題になりそう。
買われているものがTwitter上でバズるというのはとてもハードルの高いのことなのかもしれません。

MediaWikiには標準でサイトマップの出力機能が備わっているが(一つ前の記事を参照),この機能を使うにはコマンドラインから命令を実行する必要がある。
コマンドラインが使えない場合にはエクステンションを使ってサイトマップを出力することができる。

MediaWikiでサイトマップを出力するエクステンションとしてはGoogleSitemapエクステンションが有名だが,2006年9月以降更新が停止している。2009年6月現在,それに代わり,ManualSitemapエクステンションが提供されている。

ManualSitemapエクステンションは,GoogleSitemapエクステンションのバグが修正されているほか,インストール方法もより簡単なものとなっている。
本記事ではManualSitemapエクステンションの導入方法を紹介する。

なお,エクステンションの紹介ページでは,このエクステンションを使用するより標準機能を使用することを推奨している(more appropriate)。コマンドラインが使える環境(自動化することを考えればcronが使える環境)がある場合には,標準機能を使うとよいと思われる。
標準機能との主な違いは,サイトマップに含めることのできるページ数が500まで(標準機能の初期値は50000?)であることと,更新を自動化できないことである(他にも違いはあると思うが実用上問題になるのはこの2つであると思われる)。


手順

1. ファイルのアップロード

エクステンションの紹介ページからmanualsitemap.zipをダウンロードする。
ファイルを解凍し,extensionsディレクトリにアップロードする。

ダウンロードは以下のページから
Extension:ManualSitemap


2. LocalSettings.phpの変更


Localsettings.phpに次の一行を追加

require_once($IP.'/extensions/ManualSitemap/ManualSitemap.php');

使用法

1. サイトマップの作成

サイトマップの作成は手動で行う必要がある。 インストールが成功すると,「特別ページ」の「その他特別ページ」にManual Sitemapへのリンクが作られる。 Manual Sitemapのページでオプションを選択しUpdate Sitemapボタンを押すと,MediaWikiのルートにsitemap.xmlが作られる。 管理人が試した環境(ロリポップ)では上記手順だけでうまくいったが,xmlファイルが作成されない場合は,空のsitemap.xmlをあらかじめ作成しておくとよいかもしれない。

2. サイトマップを検索エンジン等に登録

作成されたファイルを参照してもらうにはgoogle等に登録する必要がある。

3. サイトマップの更新

サイトマップの内容はcronが使える場合と異なり自動的に更新されないため,サイトにページを追加した場合等には,手動でManual SitemapページのUpdate Sitemapボタンによりサイトマップの更新を行う必要がある(google等への登録は最初に1回だけやればよい)。

MediaWikiでサイトマップを出力する方法には,MediaWiki標準機能を利用する方法とエクステンションを利用する方法がある。
ただし,標準機能によるサイトマップの出力は,コマンドラインからphpのコマンドを実行できる環境が必要なので,レンタルサーバーによっては利用できないことがある。

本ブログを運用しているエックスサーバーはcronによるコマンド実行が可能なので,標準機能によって,サイトマップを出力することができる。

方法

maintenanceの中にあるgenerateSitemap.phpを実行する。

参考:http://www.mediawiki.org/wiki/Manual:GenerateSitemap.php

具体的手順

エックスサーバーでの導入手順を紹介する。 他のサーバーでのcronの設定方法や,絶対パスのディレクトリ構成などは適宜読み替えて参照されたい。

1. Adminsettings.phpの作成

メンテナンススクリプトの実行にはAdminSettings.phpが必要となる。
AdminSettings.sampleにデータベースのユーザー名とパスワードを指定してリネームすればよい。

参考:http://www.mediawiki.org/wiki/Manual:Maintenance_scripts/ja


2. cronによる実行の指定

サーバーパネルからcronの設定を選び,開いた画面からcronの追加をさらに選択する。
スケジュールを適当に設定し,コマンド欄に絶対パスでコマンドを入力。
ホーム直下のwikiディレクトリにMediaWikiをインストールしている場合は次のようになる。

php5 /home/サーバーID/ドメイン名/public_html/wiki/maintenance/generateSitemap.php --fspath=/home/サーバーID/ドメイン名/public_html/wiki/sitemap/

コマンドはphpではなくphp5を使用することがポイント。
エックスサーバーではドメインごとにphpのバージョンを4と5で切り替え可能になっているが,ドメインごとの設定に関わらず,cronでは4系列のphpが利用されている(2009年6月現在)。generateSitemap.phpはphp4では動かないため,phpコマンドでは次のようなエラーが出てしまう(最終行のphpのバージョンに注目)。

PHP Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/サーバーID/ドメイン名/public_html/wiki/maintenance/generateSitemap.php on line 167 Content-type: text/html X-Powered-By: PHP/4.3.9

明示的にphp5コマンドを使用することで,正常にサイトマップを出力させることができる。

なお,上記例では--fspathオプションでサイトマップを出力する場所を指定している。
指定しなければgenerateSitemap.phpと同じ場所(maintenanceディレクトリ内)に出力される。
指定する場合はあらかじめ出力先のディレクトリを作成しておく。


インデックス用のファイルと具体的なサイトマップの内容の書かれたファイル(標準だと圧縮されている。--compressオプションで圧縮しない設定も可能)の2つのファイルが作成される。
google等へはインデックス用のファイルを登録すればよい。

サイドバーに表示される項目の変更はMediaWiki:Sidebarの編集によって行う。

MediaWiki:Sidebarの編集画面にアクセスするためには次の2つの方法がある。

方法1
特別ページへのリンクからたどる方法

特別ページ>表示メッセージの一覧>Sidebar

方法2
ブラウザのアドレスバーで直接URLを指定する方法

MediaWikiのルート/index.php/MediaWiki:Sidebar


通常の編集画面とは書式が異なることに注意

*でナビゲーションバーのタイトル,**で各項目の記載になる

各項目の記載の書式は

** リンクするページ|表示名

通常のリンクのように二重カッコで囲む必要がない。

「Category:索引」を「索引」という表示名でサイドバーに表示させる場合の記述は次のようになる

Category:索引|索引


なお,変更が反映されない場合にはデータベースのキャッシュをクリアする必要がある。

クリアの方法は次の2つがある。

方法1
データベースのobjectcacheテーブルに対してtruncateを行う。
phpMyAdminが使用できる場合は,objectcacheテーブルを選択して「空にする」を実行すればよい。
コマンドラインで行う場合には,次のコマンドを実行する。

mysql>truncate objectcache;


方法2
LocalSettings.phpファイル中でtouchする。

管理人はこちらの方法は試していないので詳細は不明。


参考URL
Manual:Interface/Sidebar/ja