« 大曲全国花火競技大会 | メイン | 【友愛で絶交】\(^o^)/オワタのハジマリ【09総選挙☆ナイト】 »

MT4iでうごくひと2の上級版機能を使ってみよう・改

追記:2009/9/7
以下のカスタマイズは、MT4i Ver.3.0以降の場合となります。ver.3.0未満(テンプレートファイルが無いバージョン)の場合は、うごくひと2のマイページで取得したコードをほぼそのまま、mt4i.cgiに追加するのが宜しいかと思います。

******

MT4iを少しいじってみたWolaWola様)

Mt4i × うごくひと2 の動的での導入方法iyahooi.com:blog様)

ご覧いただきまして、ありがとうございます。ご指摘いただいた過不足およびうごくひと2の解析画面でページタイトルを取得する方法に辿り着きましたので、前回不完全な物を公開してしまったお詫びと共に、訂正版をここに記させていただきます。

1.うごくひと2のマイページ⇒HTMLタグ発行からコードを取得

MT4iはperlで書かれていますので、「Perlのコード」を拝借することにします。

▼サンプル
use URI::Escape qw(uri_escape);
use CGI;
my $UH2q = new CGI;
my $UH2url = "http://b14.ugo2.jp/?u=XXXXXX&h=XXXXXX&guid=ON&ut=1&qM=".uri_escape($UH2q->referer()."|Az|".$UH2q->server_port())."|".uri_escape($UH2q->server_name())."|".uri_escape($UH2q->url(-absolute => 1))."|P|&ch=UTF-8&sb=".uri_escape("[page title]");
print '<img src="'.$UH2url.'" width="1" height="1" alt="携帯アクセス解析" border="0" />';

※「XXXXXX」部分はユーザー・サイト毎に異なるので、ユーザー・サイト登録後、うごくひと2のマイページから取得した値の物を使用してください

2.「(MT4iディレクトリ)/mt4i.cgi」の編集

宣言に「use URI::Escape qw(uri_escape);」を追加する。具体的には、30行目付近にある

use strict;
use CGI;
use HTML::Template;
use Storable qw(lock_store lock_retrieve);
use FindBin qw($Bin);
use List::Util qw(first);

の後ろにくっつけて、

use strict;
use CGI;
use HTML::Template;
use Storable qw(lock_store lock_retrieve);
use FindBin qw($Bin);
use List::Util qw(first);
use URI::Escape qw(uri_escape);

こんな感じに。

3.(多分)3900行目付近にある「sub _tmpl_common {」内にコードを追加する。

##################################################
# Sub _Tmpl_Common - Fill the common parameter.
##################################################
sub _tmpl_common {

の箇所を探して、うごくひと2のマイページ>HTMLタグ発行から取得したコードを一部修正してここに貼り付けます。

my $UH2q = new CGI;
my $UH2url = "http://b14.ugo2.jp/?u=XXXXXX&amp;h=XXXXXX&amp;guid=ON&amp;ut=1&amp;qM=".uri_escape($UH2q->referer()."|Az|".$UH2q->server_port())."|".uri_escape($UH2q->server_name())."|".uri_escape($UH2q->url(-absolute => 1))."|P|&amp;ch=UTF-8&amp;sb=".uri_escape("[page title]");
print '<img src="'.$UH2url.'" width="1" height="1" alt="携帯アクセス解析" border="0" />';

まず上記の赤文字部分を削除して、

$tmpl->param(UH2 => encode("shiftjis",decode("euc-jp",$UH2url)));

を追加し、

return $tmpl;

の直前に挿入します。

# Emoticon
$tmpl = __emoticon($tmpl);

my $UH2q = new CGI;
my $UH2url = "http://b14.ugo2.jp/?u=XXXXXX&amp;h=XXXXXX&amp;guid=ON&amp;ut=1&amp;qM=".uri_escape($UH2q->referer()."|Az|".$UH2q->server_port())."|".uri_escape($UH2q->server_name())."|".uri_escape($UH2q->url(-absolute => 1))."|P|&ch=UTF-8&sb=";
$tmpl->param(UH2 => encode("shiftjis",decode("euc-jp",$UH2url)));

return $tmpl;

こんなかんじ。ついでに、赤文字の部分がどうも間違ってる臭いので、修正しておきます。同時に、携帯はShiftJISなのでパラメーター「ch=」の部分も変更しておきます。

# Emoticon
$tmpl = __emoticon($tmpl);

use URI::Escape qw(uri_escape);
use CGI;
my $UH2q = new CGI;
my $UH2url = "http://b14.ugo2.jp/?u=XXXXXX&amp;h=XXXXXX&amp;guid=ON&amp;ut=1&amp;qM=".uri_escape($UH2q->referer())."|Az|".uri_escape($UH2q->server_port())."|".uri_escape($UH2q->server_name())."|".uri_escape($UH2q->url(-absolute => 1))."|P|&ch=SJIS&sb=";
$tmpl->param(UH2 => encode("shiftjis",decode("euc-jp",$UH2url)));

return $tmpl;

これで多分OK。

4.ページタイトル取得用に新しいテンプレート変数を用意する

ここが今回訂正のキモです。これをやらないと、解析画面でページタイトルが表示されるハズもないし、セキュリティ的にも少々×でした。すみませんでした。

追加するのは3箇所です。まずは600行目付近の

########################################
# Sub Individual - 単記事ページの描画
########################################

を探します。この中をぐーっと探して800行目付近でしょうか。

$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",$d_f.&conv_euc_z2h($entry->title))));

という記述がありますので、その直後に追加して

$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",$d_f.&conv_euc_z2h($entry->title))));
$template->param(ENTRY_TITLE_E => uri_escape(encode("shiftjis",decode("euc-jp",$d_f.&conv_euc_z2h($entry->title)))));

とします。同じように、次は1000行目付近の

########################################
# Sub Comment - コメント描画
########################################

を探して、

# 結果を変数に格納
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title))));

に追加して

# 結果を変数に格納
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title))));
$template->param(ENTRY_TITLE_E => uri_escape(encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title)))));

最後に、1800行目付近の

########################################
# Sub CommentForm - コメント投稿フォーム
########################################

を探して、

# 結果を変数に格納
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title))));

に追加

# 結果を変数に格納
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title))));
$template->param(ENTRY_TITLE_E => uri_escape(encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title)))));

これで(多分...)mt4i.cgiの修正は完了です。

5.フッターテンプレートにコードを追加する

次に「(MT4iディレクトリ)/tmpl/footer.tmpl」を開き、「うごくひと」の画像が表示されても良いところに

<a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>

を挿入します。ソース全体は

<p>
<center>
Powered by<br>
<TMPL_UNLESS NAME="ADMIN_MODE"><a href="http://hazama.nu/pukiwiki/?MT4i"></TMPL_UNLESS>MT4i <TMPL_VAR NAME="VERSION"><TMPL_UNLESS NAME="ADMIN_MODE"></a></TMPL_UNLESS>
</center>
</p>
<p align="center">
<!-- ugo -->
<a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>
<!-- ugo end -->

</p>

</body>
</html>

こんなかんじ。

できあがった2つのファイルをそれぞれアップロードして、PCでアクセスします。フッターのイメージした位置に「うごくひと」の画像が表示されていたら、第一段階はクリア。次はページのソースを確認します。

フッター部分の「<img src="http://b14.ugo2.jp/?u=...」で始まるタグの末尾、「sb=」直後に「%」で始まるエンコード文字がズラズラと表示されていたらOKです。暫く時間を置いて、うごくひと2のマイページ⇒どこを見たか⇒入口ページを確認して、ページタイトルが取得できているか、文字化けしていないか等を確認してください。

長くなりますが、

<a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>

部分を

<a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_IF NAME="MODE_INDIVIDUAL_RCM"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_IF NAME="MODE_COMMENT"><TMPL_VAR NAME="ENTRY_TITLE_E">%3aCOMMENT%3a</TMPL_IF><TMPL_IF NAME="MODE_COMMENT_RCM"><TMPL_VAR NAME="ENTRY_TITLE_E">%3aCOMMENT%3a</TMPL_IF><TMPL_IF NAME="MODE_COMMENTFORM"><TMPL_VAR NAME="ENTRY_TITLE_E">%3aPOST%20COMMENT%3a</TMPL_IF><TMPL_IF NAME="MODE_COMMENTFORM_RCM"><TMPL_VAR NAME="ENTRY_TITLE_E">%3aPOST%20COMMENT%3a</TMPL_IF><TMPL_IF NAME="MODE_TRACKBACK">TrackBack%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>

などとすれば、コメントページやコメント投稿画面などでも、閲覧ページ名が詳細に記録されるようになる...と思います。今度こそ。なんだか端的に説明できなくてすみません。

Googleブックマーク Yahoo!ブックマーク はてなブックマーク livedoor clipでブックマーク del.icio.usでブックマーク POOKMARK Airlinesに行き先登録

関連記事

トラックバック

このエントリーのトラックバックURL:
http://addressclub.net/cgi-bin/mt/mt-tb-ADC.cgi/388

コメント (13)

ナカムラ:

教えてください。
当方は、MT3.3のブログに、MT4i(2.25)を使っています。

この場合、上記記事の
「1.うごくひと2のマイページ⇒HTMLタグ発行からコードを取得」の修正対象ファイル名は次のどれでしょうか?
mt4i.cgi,
mt4imgr.cgi
mt4icfg.cgi
同じ階層にあるmt4ilibフォルダ内の、
Config.pl
Func.pl

次に
「2.~3.」は、全て
「(MT4iディレクトリ)/index.cgi」が編集の対象でしょうか?ちなみにMT4i(2.25)には
(MT4iディレクトリ)もindex.cgiもありません。

「5.フッターテンプレートにコードを追加する」
これについても、「(MT4iディレクトリ)/tmpl/footer.tmpl」が見当たりません。

MT4i(2.25)ではカスタマイズできませんでしょうか?

穂谷屋:

ナカムラさま
こんにちは。コメントありがとうございます。
まず、MT4iのver.2.25については当方見た事がありませんので、
根本的に違ってましたら申し訳ございません。

最初のご質問の、修正対象は「mt4i.cgi」です。2.~3.についても、全て「mt4i.cgi」の
修正になります。

「(MT4iディレクトリ)/tmpl/footer.tmpl」が無い、ということはやはり根本的に異なっている
可能性がありますが、どこかしらに、「header.tmpl」「footer.tmpl」が無いでしょうか。
無い場合、テンプレート構造が異なるようですので、根気よくフッター部分を書き出している
箇所を探す作業が必要になります。

たいしてお役に立てない回答となって申し訳ないですが、ご確認くださいませ。
また随時、ご遠慮なくご質問ください。

穂谷屋:

追記になります。
記事中に「index.cgi」としているのは、「mt4i.cgi」を小生がリネームしたものであることを思い出しました。
後ほど、記事を修正致します。

ナカムラ:

恐れ入ります。
具体的でアプローチし易いご回答を下さり、心強いものがありました。ありがとうございます。
mt4i.cgi
ということであれば、作業のメドも立ちました。

ところでウッカリ、
「4.ページタイトル取得用に新しいテンプレート変数を用意する」
の修正対象ファイルをお聞きするのを忘れてしまいましたが、これについてはいかがでしょう?

匿名:

ナカムラです。どうやら「4.」も同じくmt4i.cgiですね!
なお、「5.」の部分(フッタ)については、mt4imgr.cgiというファイルの最後に
############################################################
# フッタの出力
############################################################
sub hooter {
print "version $version";
}
というのがありましたので、この前後に、
%3a">
を追加することになりましょうか?

ナカムラ:

スミマセン。↑は私の投稿です。記入漏れご容赦ください。


また、「%3a">」
は「5.」で挿入すべきコードでした。

穂谷屋:

ナカムラさま
こんにちは。ご推察いただいたとおりでございます。
説明が足りていなくてすみません。
無事動作されますように!

ナカムラ:

ありがとうございました。うごくひと2の高機能版を使うには至りませんでしたが、基本機能をテンプレートに埋め込むことが出来ました。ひとまず、MT4iへのアクセスをカウントできるようになっただけでも、大成功です。
ご教示頂いた基本的な考え方をマスターできたので、これから同じように応用していくことができそうです。

なお、MT4iの最新版に移行できないのは、サーバーでHTML::Templateが使えないためです。でも、この記事のいくつかの部分は2.25でも応用できる部分がかなりありそうなことがわかり、もう少し発展させることが出来そうだと思っています。

ともかく、ありがとうございました。

穂谷屋:

ナカムラさま
おはようございます。
>ML::Templateが使えないため
そういう事情があるのですね。なるほど、多分全然構造が違うっぽいです;
根気よくmt4i.cgiを追いかければ恐らく上級版の実装は可能でしょうね。
想像ですが、テンプレートに変数を渡さないのであれば、当件に関してはよりやりやすいんじゃないかと思います。
解決されますように!

ナカムラ:

こんばんは。
徐々に、何をすればよいのかがわかってきているようですので、
おっしゃるようにmt4i.cgiのpearlをいじって改良してみます。

また、お聞きすることもあろうかと思います。
では、またよろしく。

ナカムラ:

こんばんは。
トライしてみました。結果的にはまだ成功していません。
・v2.25のmt4i.cgiには、sub _tmpl_common { }
がありませんので、
MT4i最新版のmt4i.cgiからコピーして貼り付けて、上記記事のとおり
編集を加えました。
・同じく「(MT4iディレクトリ)/tmpl/footer.tmpl」がありませんので、
v.2.25のmt4i.cgiの
# Sub Htmlout - HTMLの出力
の1箇所に、
$data .= "<a href=\"http://hazama.nu/pukiwiki/?MT4i\">MT4i v$version</a><div style=\"display:none;\"><!-- ugo --><a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>
<!-- ugo end --></div>";
としてみました。ここは「うごくひと2通常版」
では現在うまくいっていましたので、これを
上記記事のコードで置き換えてみました。

以上やってみましたが、エラーになります。
ここに記載した範囲内で、明らかに変なところがあれば、ご指摘頂ければ幸いです。

穂谷屋:

ナカムラ様
おはようございます。苦戦されてますね。
ざっくりとver.2.25のmt4i.cgiを見てみました。
記事中「3.」のコードを埋め込む場所は、3520行目付近からの

########################################
# Sub Htmlout - HTMLの出力
########################################

sub htmlout {

の中が適切かと思います。
その際、テンプレートに渡す変数が不要になるため、$dataの中に必要な要素を直接追加する形になるかと思います。具体的には

$data .= "<a href=\"http://hazama.nu/pukiwiki/?MT4i\">MT4i v$version</a>";

の後に、うごくひと2のマイページで取得したコードをほぼ「そのまま」追加することが、まず第一歩になるでしょうか。

$data .= "(取得したコード)";

その上で、[page title]の部分を、各ページのタイトルにする方法に移られるのが良いかと思います。

ver.3と全然違うので、今さら少々ビックリですw

ナカムラ:

ご返信、ありがとうございます。
現時点では、通常版のコードを
$data .= "デフォルトのコードの後に(取得した通常版コード)";
という形で運用ができています。
$dataについては、このままでよいのですね?

そして、これに加えて、
sub htmlout {
の中に
my $UH2q = new CGIから、
decode("euc-jp",$UH2url)));
までを追加してみる、
ということで、もう一度トライしてみます。

ありがとうございます。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


アスキーアートを貼る場合は、
AAの直前に<span class="aa">、AAの直後に</span>を追加するといい感じになるかもです。
投稿ボタンを押してから、投稿完了までに少し時間がかかります。

アーカイブ

最近のトラックバック

携帯版

http://addressclub.net/mt4i/
Powered by MT4i

About

2009年8月26日 20:35に投稿されたエントリーのページです。

ひとつ前の投稿は「大曲全国花火競技大会」です。

次の投稿は「【友愛で絶交】\(^o^)/オワタのハジマリ【09総選挙☆ナイト】」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。