よろしくお願いします。

私の運営するサイトで(http://longtail-japan.com)にてブログ(wordpress)を下層のディレクトリ(http://longtail-japan.com/blog/)に設置しました。
このブログの更新記録をトップページに日付と更新した内容のタイトルを表示させたいのですがどの様にすればいいでしょうか?
当方、自分でHPを作りましたがタグの打ちかえ程度しかできませんので出来ればこれを貼り付ければ設置出来るような形で教えていただけると幸いです。出来るだけポイントつけますので是非教えてください。
設置場所はトップページのサイドメニュー下でサーバーはロリポップを使用しています。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/10/24 01:19:20
  • 終了:2010/10/31 01:20:04

ベストアンサー

id:rouge_2008 No.1

rouge_2008回答回数594ベストアンサー獲得回数3512010/10/24 05:14:44

ポイント60pt

WEBページの文字コードは「Shift_JIS」で間違いないですね?

WordPressが吐き出すRSSを処理するPHPスクリプトを作成して、トップページ側からSSIで呼び出して使用します。

・まず、以下の内容のファイルを「what-new.php」という名前で作成して、文字コードを「UTF-8」(BOMなし)にして保存します。

(※トップページと同じ階層に「cgi」フォルダを作成して保存してください。)

$url = 'http://longtail-japan.com/blog/?feed=rss2';
$xml = file_get_contents($url);
$rss = simplexml_load_string($xml);

$title = '更新情報'; // タイトルを指定
$nums = 7; // 表示件数を指定
$maxnum = count($rss->channel->item);
$cnt = ($nums < $maxnum) ? $nums : $maxnum;
$title = mb_convert_encoding($title, "SJIS", "UTF-8");

if(isset($rss->channel->item)) {
	echo "<div class=\"waku\">\n";
	echo "<h4>". $title ."</h4>\n";
	echo "<ul class=\"navmenu\">\n";
	for($n = 0; $n < $cnt; $n++) {
		$date = strtotime($rss->channel->item[$n]->pubDate);
		$date = mb_convert_encoding(date('[n月d日]', $date), "SJIS", "UTF-8");
		$htmltext = "<li><a href=\"" . $rss->channel->item[$n]->link . "\">";
		$htmltext .= mb_convert_encoding($rss->channel->item[$n]->title, "SJIS", "UTF-8");
		$htmltext .= " ". $date . "</a></li>\n";
		echo $htmltext;
	}
	echo "</ul>\n";
	echo "</div>\n";
}

※表示件数で指定した件数がRSSで出力された件数より大きい場合、RSSで出力された件数分だけ表示します。


・次にトップページ「index.html」を開いて、表示したい位置に次のコードを追加します。

<!--#include virtual="./cgi/what-new.php" -->

※サイドメニューの一番下(「エリア別提供サービス」の下)に表示するのでしたら、310行目付近の「<!-- #EndLibraryItem -->」の直後に追記してみてください。


・さらに「index.html」のファイル名を「index.shtml」に変更します。(ロリポップでSSIを使用する為に必要です。)

http://lolipop.jp/manual/hp/cgi/

※他のページからのリンクの修正も忘れないでください。


分からない所がある場合、コメント欄をオープンしてくださった方がやり取りしやすいです。

id:yokosima_nhp

ご回答有難うございます。又確認が遅くなってしまい大変申し訳ありません。上記記述ですべてファイルを作成し、ファイルをアップロードしてみましたがindex.shtmlに直接アクセスしましたが画面が表示されなくなってしまいました。

記述方法が間違っているのでしょうか?

2010/10/26 23:30:51
  • id:rouge_2008
    分からない所があるのでしたら、回答への返信かコメントで、どの部分が分からないのかを教えてください。
  • id:rouge_2008
    すみません。うっかりしていました。
    PHPの開始タグを忘れた為、「what-new.php」のコードがPHPとして実行されていないようです。
    回答のコードを「<?php」と「?>」で囲んでください。
    コードを一部略しますが、次のようになります。

    <?php

    $url = 'http://longtail-japan.com/blog/?feed=rss2';
    $xml = file_get_contents($url);
    $rss = simplexml_load_string($xml);

    (~ 略 ~)
    echo "</ul>\n";
    echo "</div>\n";
    }

    ?>


    大変失礼致しました。m(__)m
  • id:rouge_2008
    「index.shtml」をどのように作成したでしょうか?
    ファイルに何らかの問題があるようです。
    現在、正常に表示されている「index.html」をバックアップを兼ねてコピーしてから、ファイル名を「index.shtml」に変更して、そちらを編集してみてください。(それでも上手くいかない場合は、HTMLファイルの編集に使用しているソフトを教えてください。)

    ※ロリポップの場合、「index.html」があると、ドメインでアクセスした時に「index.shtml」が表示されません。(index.htmlが優先表示されるためです。「index.shtml」が正常に動作するのを確認したら、「index.html」は「index-old.html」等、適当な名前に変更してください。)
  • id:rouge_2008
    その後どうしたでしょうか?
    「what-new.php」は正常に動作していますし、トップページにSSIを実行するコードを記述しているようですので、後はトップページの拡張子を「.shtml」に変更すれば動作すると思います。
    もし「.html」のまま変更したくない場合は、以下の方法を試してみてください。(※トップページ「index.html」だけSSIの実行を許可します。)

    1.メモ帳を起動してから、以下の内容をコピー&ペーストします。

    <FilesMatch "^index\.html$">
    AddHandler server-parsed .html
    </FilesMatch>

    2.「.htaccess」という名前を付けて保存します。
    ※Windowsのエクスプローラーでは、「.」から始まる名前のファイルを作成できません。
    必ず、ソフトで保存する時に名前をつけてください。

    3.上記をトップページ「index.html」と同じ階層のディレクトリにFTPでアップロードします。

    これで、トップページのhtmlファイルのみ、SSIの実行が可能になるはずです。

    以下は参考情報です。
    http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/ssi.html#ssi2
    http://httpd.apache.org/docs/2.2/ja/mod/core.html#filesmatch
  • id:yokosima_nhp
    大変お返事が遅くなってしまい申し訳ありません。
    内容について書かれている通り試してみましたがやはり表示できません。
    当方としましてはINDEX.Htmlにリンクが沢山来ているので出来ればindex.shtmlの記述でファイルネームを変更したくありません。
    出来ればindex.htmlで使いたいです。
    また、PHPのファイルが動いているのでSSIだけの問題ということでいいのでしょうか??
    大変ご連絡が遅くなってしまい申し訳ありませんがご回答宜しくお願いします。
  • id:rouge_2008
    すみません。
    ロリポップでは、SSIからのPHPの実行は問題が生じるようです。
    Perlスクリプトにしましたので、次の方法をお試しください。
    ※「index.html」でSSIを動作させる為、上のコメントで紹介した「.htaccess」をそのまま使用します。

    1.以下の内容のファイルを「whats-new.cgi」という名前で作成して、文字コードを「UTF-8」(BOMなし)にして保存します。
    ※コードは次のページを参考にしました。
    http://www2u.biglobe.ne.jp/MAS/perl/waza/rss.html


    #!/usr/bin/perl -w

    use strict;
    use warnings;
    use XML::RSS;
    use LWP::Simple;
    use Encode;
    use lib qw(../perllib);
    use DateTime::Format::HTTP;
    use encoding 'utf8', STDOUT=>'shift_jis';

    print "Content-Type: text/html;\n\n";

    my $rss_url = 'http://longtail-japan.com/blog/?feed=rss2';
    my $title = 'ブログ更新情報'; # メニュータイトル
    my $list = '7'; # 表示する記事の個数

    my $doc = get $rss_url;
    my $rss = XML::RSS->new;
    $rss->parse($doc);
    my $count = @{$rss->{items}};
    if ($list > $count) {
    $list = $count;
    }

    print "<div class=\"waku\">\n";
    print "<h4>". $title ."</h4>\n";
    print "<ul class=\"navmenu\">\n";
    my $item = $rss->{items};
    for (my $num = 0; $num < $list; $num++) {
    my $dt = DateTime::Format::HTTP->parse_datetime($item->[$num]->{pubDate});
    $dt->set_time_zone('Asia/Tokyo');
    print "<li><a href='". $item->[$num]->{link} ."'>";
    print $item->[$num]->{title} ." [". $dt->strftime('%m月%d日') ."]</a></li>\n";
    }
    print "</ul>\n";
    print "</div>\n";


    2.先ほど作成した「whats-new.cgi」をトップページと同じ階層に作成済みの「cgi」に保存(アップロード)して、ファイルのパーミッション(属性)を「700」に変更します。
    (パーミッションの変更方法は、以下のページを参考にしてください。)
    ・パーミッションについて
    http://lolipop.jp/manual/hp/permission/
    ・各種ツールの使用方法
    http://lolipop.jp/manual/hp/ftp-set/
    ・ロリポップFTPでのファイル編集方法
    http://lolipop.jp/manual/user/ftp2-03/#p-ftp02


    3.トップページ「index.html」の任意の位置に次のコードを記述します。(※SSIで実行するファイル名を変更します。)

    <!--#include virtual="./cgi/whats-new.cgi" -->


    4.次のURLにアクセスして、「DateTime-Format-HTTP」モジュールをダウンロードします。(※「Download」をクリックするとダウンロードできます。)
    http://search.cpan.org/~ckras/DateTime-Format-HTTP-0.40/
    ※tar.gz形式のファイルを解凍するソフトを持っていない場合は、下で紹介しているソフト「7-Zip」をインストールして解凍するか、「http://cpansearch.perl.org/src/CKRAS/DateTime-Format-HTTP-0.40/lib/DateTime/Format/」にアクセスして、「HTTP.pm」を右クリックして「名前を付けて保存」でPC内に保存し、トップページと同じ位置に「perllib」フォルダを作成して、その中に「DateTime」フォルダ、さらにその中に「Format」フォルダを作成して、中に「HTTP.pm」をアップロードします。

    ・「7-Zip」(※Windowsを使用している場合)
    http://sevenzip.sourceforge.jp/
    ※安定版の「7-Zip 4.65」をダウンロードしてインストールしてください。(32ビットOSを使用している場合は「.exe」を、64ビットOSを使用している場合は「.msi」をダウンロードします。)
    7-Zipでの解凍方法
    1)7-Zipをインストールしたら、ダウンロードした「DateTime-Format-HTTP-0.40.tar.gz」を右クリックして、「7-Zip」→「開く」で開きます。
    2)一覧画面の「DateTime-Format-HTTP-0.40.tar」をダブルクリックします。
    3)さらに「DateTime-Format-HTTP-0.40」をダブルクリックします。
    4)「lib」をクリックして選択した状態にしてから、ツールバーの「解凍」ボタンをクリックします。
    5)任意の解凍場所を選択して、「OK」をクリックします。
    6)解凍された「lib」フォルダの名前を「perllib」に変更します。
    7)「perllib」フォルダをそのままトップページと同じ位置にアップロードします。


    ここまで完了したら、ページにアクセスして表示確認してみてください。
  • id:yokosima_nhp
    早速のご回答有難うございます。
    すべて指定するファイル等やパーミッションの設定なども行いましたがトップページにはでませんね・・・
    CGIも直接アクセスすると表示されているようです・・・(文字化けはしていますが・・・)

    サーバーがだめなんでしょうか???

    度々のご回答おまちしております。
  • id:rouge_2008
    「whats-new.cgi」の文字コードが「Shift_JIS」になっているのが文字化けの原因のようです。
    「UTF-8」(BOMなし)にして保存し直してください。


    index.htmlに表示されない件に関しては、SSIが動作していないのかもしれません。
    トップページと同じ位置に「.htaccess」を設置したでしょうか?
    「.htaccess」の作成方法に関しては、以前投稿した次のコメントを確認してください。
    http://q.hatena.ne.jp/1287850757#c189533


    トップページで試す前に事前に動作を確認したい場合は、「index.html」のコピーの「index2.html」を作成して、「.htaccess」の記述を以下にしてください。

    <FilesMatch "^index2?\.html$">
    AddHandler server-parsed .html
    </FilesMatch>

    ※「index2.html」にも、「<!--#include virtual="./cgi/whats-new.cgi" -->」を挿入するのを忘れないでください。
  • id:yokosima_nhp
    言われたとおりwhats-new.cgiと.htaccessのファイルを見直してみました。
    CGIはUTF-8Nに変更したら文字化けは直りました。
    .htaccessはhtaccessファイル形式で保存しないといけないんですね?
    テキストファイル形式で保存されているのが原因でした。

    上記を直したところ無事表示されるようになりました。
    このたびは本当に有難うございました。
    少ないとは思いますがポイント送信しましたのでご確認ください。
    このたびは本当に有難うございました。

    また、機会がありましたら宜しくお願いします。
  • id:rouge_2008
    先ほどポイントを確認いたしました。
    たくさんありがとうございます。
    有難く頂戴いたします。m(__)m

    私で分かる事でしたら回答しますので、また質問してください。
    ※いるかもつけていただいてありがとうございました。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません