Skip to main content.
3月 23rd, 2007

PHP5でRSS2.0を読み込んで表示する

ひょんなことで,PHP5で,RSS2.0のフィードを読み込んで,ホームページにリンクを作る事になったので,覚書します

MagpieRSSというライブラリをダウンロードする。
http://magpierss.sourceforge.net/

ダウンロードした,magpierss-0.72.tar.gzというファイルを解凍して,

.inc という拡張子のファイルとextlib/Snoopy.class.inc というファイルを,

例えば,home/rss/ の中に入れる。

home/rss/rss_utils.inc
home/rss/rss_cache.inc
home/rss/rss_parse.inc
home/rss/rss_fetch.inc
home/rss/extlib/Snoopy.class.inc

僕の環境では,すべてUTF-8でPHPなんかも作ってたので,
これらのファイルもみんなUTF-8で保存しなおしました。

さらに,BASIC認証してる場合は,Snoopy.class.incを開いて,
var $user = “userid”;
var $pass = “password”;

を入れればOKですよ。

まず,RSSを呼び出すホームページ(例えばindex.php)に,

require(”./rss/rss_test.php”);
require(”./rss/rss_fetch.inc”);

$rss = new rss_test();

を書き,出力箇所に次のように記述します。

<?php $rss->get($count, $url); ?>

実際RSSを読み込む方法は次の通りです。

class rss_test {

function get($count, $url) {

define(’MAGPIE_OUTPUT_ENCODING’, ‘UTF-8′);

$rss = fetch_rss($url);

array_splice($rss->items, $count);

foreach ($rss->items as $item) {

$href = $item[’link’];

$title = mb_convert_encoding($item[’title’], “UTF-8″, “auto”);

$date=$item[pubdate];

$daytime=date(”Y年m月d日”,strtotime($date));

$daytime = mb_convert_encoding($daytime, “UTF-8″, “auto”);

echo “<li><a href=\”" . $href . “\”>” . $title . “ ” . $daytime . “</a></li>” . “\n”;

}

}

}

以上です。

pubdateは,pubDateではなく全部小文字で書かないと認識しないですよ。

Posted by seemo as PROGRAM SAMPLE at 6:35 PM JST

1 Comment »

3月 12th, 2007

perl からメールを送信する。(特殊文字対応版)

ひょんなことで,perlからメールを自動送信する事になったので,覚書します。

perlからメールって,結構ネットに出てるんで,

簡単にいくかと思っていたら・・

特殊文字(例えば,①ⅱ㈱℡髙塚彅﨑德アイウエオ ㈱㈲彅ⅱ℡゛’など)は,

だいたい化けてしまいますよね。

特殊文字対応のメール送信を扱ってるところってなかなかないんですね。

ようやく試行錯誤して,見つけ出しました。

もしかして,漏れがあったりするかもしれないけど,

概ね大丈夫だと思いますよ。

あちこちのサイトを参考にしながらできたコードなので,

「あ,あそこに似てる?」みたいな感じになってると思います(ごめんなさい)。

許せない人は教えてください。即効消しますので・・

——————————————————-

#必要なライブラリ
use Unicode::Japanese;
use Net::SMTP;

require ‘./jcode.pl’;
require ‘./mimew.pl’;

※Unicode::Japaneseは,こちらから頂戴しました。
(http://search.cpan.org/~hio/Unicode-Japanese-0.40/lib/Unicode/Japanese/JA.pod)

※sendmailではなくNet::SMTPを使いました。

#メール送信プログラム
sub sendmail {

@prm = @_;
my $from = $prm[0];
my $to = $prm[1];
my $subject = $prm[2];
my $msg = $prm[3];

$subject = Unicode::Japanese->new($subject, ‘auto’)->euc; # mimeencodeがeucにしか対応していないらしい

jcode::h2z_euc(\$subject); #subjectには半角カタカナは化けます。
$subject = mimeencode($subject); #MIME エンコード

$msg =~ s/\r\n/\n/g;
$msg = Unicode::Japanese->new($msg, ‘auto’)->jis; #text/plain;charsetをutf8にする場合は”utf8″を指定する

$smtp = Net::SMTP->new($smtp_server, Hello=>”$smtp_server”);

$smtp->mail($from);
$smtp->to($to);
$date = &date;
$smtp->data();
$smtp->datasend(”Date:$date\n”);
$smtp->datasend(”From:$from\n”);
$smtp->datasend(”To:$to\n”);
# $smtp->datasend(”Cc:$cc\n”);
$smtp->datasend(”Subject:$subject\n”);
$smtp->datasend(”Content-Transfer-Encoding: 7bit\n”);
$smtp->datasend(”Content-Type: text/plain;charset=\”ISO-2022-JP\”\n”);
# $smtp->datasend(”Content-Type: text/plain;charset=\”utf-8\”\n”); #utf8
$smtp->datasend(”\n”);
$smtp->datasend(”$msg\n”);
$smtp->dataend();
$smtp->quit;

}

——————————————————-

ここで,大切なのは,通常のJcode(jcode)ではなくて,ありがたいライブラリUnicode::Japaneseを利用した事です。jcodeの変換では\x{3232}見たいな感じで表示されてしまいます。

これがなかったらと思うと,冷や汗でした。著作者の方に感謝いたします。

source

以上

Posted by seemo as PROGRAM SAMPLE at 1:02 PM JST

No Comments »