ようやくmt-rssfeed

かな〜り長い間mt-rssfeedが上手く組み込めなくて悩んでたような気がするんですが、ようやく、なんとかかんとかながら組み込めたようです。ホンマ長かった…(^^;;

ワタシがずっと悩み続けてた症状はこちらにも書いてますが、

  • mt-rssfeedのパースは正常。UTF-8としては正常なファイルが出来る
  • だがmt-jcodeプラグインでも文字コードを正常に変換出来ない
  • 正常にEUCに変換出来ないできないため、EUCのサイトにincludeできない

というもの。

とにかくEUCにしようとすると文字が化け化けで正常な出力がぜんぜん得られないので、まず

@smate.NET: mt-rssfeed.pl & mt-list.pl

を参考にさせて頂いて、RSSのパースを別ファイルに分離しました。ファイル名はお手本と同じrss_list.html(←文字コードがUTF8なので注意)

例えば

<$MTRSSFeedItemTitle$>

として出力させた場合、rss_list.htmlには

大手専門学校、留学生1割が不法残留…入管が立ち入り

というUTF-8の文字列が出力されてきます。コレはワタシでも読めます。が、これをEUC化しようとして

<$MTRSSFeedItemTitle jcode="euc"$>

とjcodeプラグインを噛ませると、得られる出力はたちまち

Ac?eAiIc3O1≫!¢I±3OA,£±3a?¬EOE!≫AI±!AAt´E?¬Ic?AAt?e

↑こうなります(^_^;) ちなみに上記はブラウザでUTF8とし認識してデコードされてるみたいなんで、試しにEUCで無理矢理デコードさせてみたら

・巽村棚・狸・巽続・孫損臓蔵・賊続・・存贈賊続辰造測・・・臓損・・賊臓・・綻卒・造測・息造・・綻造棚

↑こうなりました。・・・それ何語??(^^;;

ということで、この症状でずーっと悩み続けてたというのが今までの顛末。

たぶん原因はjcodeプラグインの

短かめの UTF8 文字列は getcode がしけることがあるので、そういうときだけ、決めうちで utf8 だとして逃げるようにしてみました。

↑この仕様なんじゃないかなぁ?と見当はつくんですが、perlのスキルがまるでないワタシにはそれ以上どうにもできなくて…(^^;;

が、いきなりぱっとひらめきました。

「短い文字列で誤認するってことなら、もしかしなくても文字列を長くしてからjcodeプラグインを通せばエエんちゃうか?!」

rss_list.htmlは正常にUTF8で出来てる訳なんでこれに無理に手をつけるのはやめて、Main Indexでrss_list.htmlをincludeする

<$MTInclude file="rss_list.html"$>

という部分を

<$MTInclude file="rss_list.html" jcode="euc"$>

と書き換えてみました。

結果>バッチリOK!(^_^)

いや〜、解ってしまえば取り立てて何という程の事でもなく「ああ、そうか」済んじゃうレベルではあったんすが、正直これには随分苦労させてもらいました。というか、単にワタシが阿呆なだけ…??(^^;;

この手を使うとSSIによるincludeが効かない→度々Main Indexを再構築しなきゃいけない副作用が出ちゃうしそもそもこんな対処で良いのかというレベルで謎(^^;なんですが、とりあえずその辺には目をつぶるとゆーことで。“一応動いてるみたい”だし(^_^;)

040513a.gif

<MTList name="feeds">
https://www.yomiusa.com/rdf/yomisyakai.xml
https://www.harupa.net/rss/feed.cgi?internet_watch
https://bm.ishinao.net/rss.rdf
https://bulkfeeds.net/app/buzzwords.rdf
</MTList>

<MTListLoop name="feeds">
<MTRSSFeed>
<div class="sidetitle">
<a href="<$MTRSSFeedLink$>" target="_blank"><$MTRSSFeedTitle $></a>
</div>

<div class="side">
<MTRSSFeedItemsExist>
<MTRSSFeedItems lastn="4">
<a href="<$MTRSSFeedItemLink$>" target="_blank">
<MTRSSFeedItemTitleExists><$MTRSSFeedItemTitle$></MTRSSFeedItemTitleExists>
</a><br />
</MTRSSFeedItems>
</MTRSSFeedItemsExist>
</div>
</MTRSSFeed>
</MTListLoop>

ついでに、mt-rebuild.plで日に6回ほど自動的にMain Indexを再構築するよう設定してみました。このサイトの更新頻度からすると随分過剰って感じもしますが、あんまり間隔が間遠だとRSS組み込んでる意味が無くなるんで。

/home/yas_/public_html/mt/mt-rebuild.pl -mode=index -blog_id=1 -template="RSS List" && /home/yas_/public_html/mt/mt-rebuild.pl -mode=index -blog_id=1 -template="calendar" && /home/yas_/public_html/mt/mt-rebuild.pl -mode=index -blog_id=1 -template="Main Index"

&&は「先のコマンドが無事終了したら次のコマンドを実行する」です。RSS→カレンダーを再構築してからメインインデックスを再構築します。(モジュール化→include技を多用してるんでこんな書き方になってます)

あと、意外と見つけられず苦労してる方が多い(おおもとのbulknewsさんのエントリではリンク切れになってる)ようなので、こちらでEUC用のマッピングファイルeuc-jp.encを再配布しておきます。

Perl XMLでencoding='Shift_JIS'や'euc-jp'を使う

また↑こちらではマッピングファイルを作製するツールが配布されてますが、サンプルとしてEUCのマッピングファイルが同梱されているようです。そのまま使えます。