【54日目】RSS version 1.0を自作してみた
Posted: Last Update:
こちらは日記です。RSS Version1.0の詳しい作成方法は下記にまとめてあります。
関連記事

ブログランキングサイトなどに送信するRSS version1.0を作りたい!でも、どこから手をつけていいのか分からない…。そんな方に向けて、この記事では「RSS version1.0」の形式や、PHPでの作成方法を詳しく紹介します。これさえ読めば、「RSS version1.0」をPHPで自作できるようになります!
サイトを作成し始めて54日。昨日はサイト全体の見栄えを整える作業を完了しました。サイトの見栄えが少し良くなったのではないかと自負しております。
ロードマップと今日やること
ロードマップで言うと、「コンテンツに合わせてサイトを修正、スマホにも対応する」というステップを完了したのですが…。
- 準備 - サイトの全体像を決める
- 使用するプログラミング言語を決めて環境を整える
- サイトの基本構造を作って公開する
- 収益化に最適なサイトにアップグレードする
- コンテンツを充実させる(他の作業と同時進行)
- サイトを見てもらえるようにサーチエンジンに登録する
- sitemap.xmlとRSSを作成する
- コンテンツに合わせてサイトを修正、スマホにも対応する ←昨日完了
- お問い合わせページを作る
- 検索ボックスを作る
- サイトマップページを作る
- 個人情報に関するページを作る
- SEOとセキュリティについて調べ、対応する
- GoogleアドセンスとAmazonアソシエイトの申し込みをする
- ローカルで簡単に入力ができるようにフォームを作る
- フォローアップ - より収益化に向いたサイト構造に変更する
これまで作成してきたものにいくつか課題がありまして、今日はそれらを解決する日にしたいです。リストアップするとこんな感じ。全ては終わらないと思いますが、今日はできるところまでやりたいと思います。
- RSS version1.0を作成する
- サイトロゴを作成してベタ打ちのロゴと交換する
- 過去の日記のイメージ画像を作成
- サイトマップをGoogleとBingに送信する手順を作る
- PHP関数「strtime」を利用している所を書き換える
- CSSで「grid-gap」を利用している部分を書き換える
- 記事で紹介しているコードに色をつける
- index.phpのあり、なしを統一する
- 人気投稿の準備として、アクセス解析をするPHPを作成する
- 記事をカテゴリーごとに分ける準備をする
index.phpのあり、なしを統一する
SEO対策(検索の最適化)に関する記事を読んでいると、「index.phpのあり、なしを統一しなさい」と書いてあるものが多いんですよね。「index.phpのあり、なし」というのは、「https://kamenokoki.com」なのか、「https://kamenokoki.com/index.php」なのかという違い。表示内容は二つとも同じです。
ちなみに、「https://kamenokoki.com」か「https://kamenokoki.com/」かという、最後にスラッシュをつけるかどうかも統一しなさいと書かれていました。レンタルサーバー「ロリポップ」では、「https://kamenokoki.com/」は「https://kamenokoki.com」にリダイレクトされるようにデフォルトで設定されているようなので、こちらは対応不要みたいです。
「index.phpのあり、なし」統一は、検索すると手法がたくさん出てきます。「.htaccess」に書き込む例文もたくさん出てくるので、そのままコピペしました。本番環境でテスト。うまく動いたので、完了です!「https://kamenokoki.com/index.php」に接続すると、URLが「https://kamenokoki.com」に変わるので、遊んでみてください。ちなみに、.htaccessに書いた構文はこんな感じ。
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ https://kamenokoki.com/$1 [R=301,L]
サイトロゴを作成してベタ打ちのロゴと交換する
サイトロゴに関して、今はテキストでベタ打ちしています。問題があって、フォントを指定しているのにブラウザによって表示が微妙に違うんです。できるならイメージは統一したいので、ロゴは画像に変えてしまいたい!
数日前にロゴを作成していたのですが、ベタ打ちテキストと入れ替える前に時間切れになってしまいました。ちなみに、PIXLRというサイトで作りました。試しに作ったロゴを入れてみよう。
ちなみに、今のロゴがこちら。
そして、変更後のロゴがこちら。おしゃれっぽいけど、メニューとあってない気がする、どうしよう…。
これはちょっと寝かせようと思います。
RSS version1.0を作成する-要件の確認
もう2週間ほど前になるのですが、「FC2にping送信してもRSSが反映されない!」という話をしていました。FC2に問い合わせたら、「RSS1.0かatom」しか受け付けていません、というお返事が…。私のRSSはRSS2.0とatomを併用しているので受け付けてもらえていなかったんですね。ちなみに、「RSS1.0」とか「RSS2.0」というは、RSS構文のバージョンのことです。
今は、毎日手動でFC2に更新をお知らせしています。とってもめんどくさいので、できるなら自動でお知らせしたい。そのためには、RSS1.0を作る必要があります!
さっそく作業してみます。まずは、RSS1.0の要件を調べましょう。公式サイトがありました。…読みにくいな。日本語ないのかな。…解読するか…。
読み込むのに時間がかかった!でも、メモを取りつつ読んだので、何となく必要なものは分かりました。ご興味があれば、こちらが必要最低限の情報。
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="RSSのリンク">
<title>サイトの名前</title>
<link>サイトのトップページ</link>
<description>サイトの説明</description>
<items>
<rdf:Seq>
<rdf:li resource="1つめの記事のリンク" />
<rdf:li resource="2つ目の記事のリンク" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="1つ目の記事リンク">
<title>記事のタイトル</title>
<link>1つ目の記事リンク</link>
</item>
<item rdf:about="2つ目の記事リンク">
<title>記事のタイトル</title>
<link>2つ目の記事リンク</link>
</item>
記事の分だけitemを繰り返す
</rdf:RDF>
あんなに敬遠していたのに、意外と内容が少ないです。そして、RSS2.0では苦労した日時が必須項目ではない!簡単にできるかも?
RSS version1.0を作成する-PHPを書く
さっそく、RSS1.0を作成するPHPを自作。RSS2.0を作っているPHPがあるので使いまわします。
20分ほどかけて、一応できました。こんな感じ。変数だらけで訳が分かりません(笑)
$urlfolder1s = array("article","blog");
$fp = fopen("$mypath/top/rss1.xml", "w");
fwrite($fp, '<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="https://kamenokoki.com/top/rss1.xml">
<title>kamenokoki.com</title>
<link>https://kamenokoki.com/</link>
<description>ど素人が、WordPressなし、HTMLとPHPだけでサイト構築をするブログ。サイト構築の中で役に立った小技も紹介しています。</description>
<items>
<rdf:Seq>');
date_default_timezone_set('Asia/Tokyo');
$today = date("Ymd");
$oldest=20200830;
$i = 1;
do {
foreach($urlfolder1s as $urlfolder1){
$filefolder1 = $urlfolder1.'s';
$date = new datetime($today);
$filename = "$mypath/$filefolder1/$today.txt";
$filename1 = "$writeurl$urlfolder1/$today";
if (file_exists($filename)) {
require($filename);
$siteinfo = '<rdf:li resource="'.$filename1.'" />';
fwrite($fp , $siteinfo."\n");
}
}
$date->sub(new DateInterval('P0Y0M1D'));
$today = $date->format('Ymd');
$i++;
} while($i <= 2);
fwrite($fp , '</rdf:Seq>
</items>
</channel>');
date_default_timezone_set('Asia/Tokyo');
$today = date("Ymd");
$oldest=20200830;
$i = 1;
do {
foreach($urlfolder1s as $urlfolder1){
$filefolder1 = $urlfolder1.'s';
$date = new datetime($today);
$filename = "$mypath/$filefolder1/$today.txt";
$filename1 = "$writeurl$urlfolder1/$today";
if (file_exists($filename)) {
require($filename);
$siteinfo = '<item rdf:about="'.$filename1.'"><title>'.$articletitle.'</title><link>'.$filename1.'</link></item>';
fwrite($fp , $siteinfo."\n");
}
}
$date->sub(new DateInterval('P0Y0M1D'));
$today = $date->format('Ymd');
} while ($today >= $oldest);
fwrite($fp , '</rdf:RDF>');
fclose($fp);
?>
RSS version1.0を作成する-FC2にpingするPHPを書く
できればファイルがきちんと作成されているかすぐに確認したいのだけど、オンライン上のファイルを確認するツールしか見つからないので、チェックは後回しにします。先にFC2ブログランキングにpingするPHPを書いて、本番サーバーにあげてからチェックしてみます。
次は、FC2にping送信するPHPですね。こちらも、既にRSS2.0をpingするPHPがあるので、使いまわしです。こんな感じでできました。
$ping_servers = array();
$ping_servers[] = "FC2のpingサーバー";
$post_data = '<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param><value>kamenokoki.com</value></param>
<param><value>https://kamenokoki.com/top/rss1.xml</value></param>
</params>
</methodCall>
';
$headers = array(
'Content-Type: application/xml',
'Content-Length: '.strlen($post_data)
);
$context = stream_context_create(
array(
'http'=>array(
'method'=>'POST',
'header'=>implode( "\r\n", $headers ),
'content'=>$post_data
)
)
);
foreach($ping_servers as $ping_server){
$http_response_header = null;
$response = @file_get_contents($ping_server,false,$context);
print_r($http_response_header);
?>
RSS version1.0を作成する-本番サイトにあげて試験
本番サイトに上げる前に、index.phpも書き換えました。Headタグの間に入れる「link」の設定です。RSSが2枚。それぞれ、RSS1.0とRSS2.0へのリンクです。
<link rel="alternate" type="application/rss+xml" title="kamenokoki.com RSS2.0" href="https://kamenokoki.com/top/rss2.xml">
本番サーバーにあげてみます。
あげました。検証もしました。大丈夫だそうです!使った検証サイトはExperimental Online RSS 1.0 Validator。「スタイルシートがないよ」と指摘されましたが、スタイルシート必要ないので、たぶん大丈夫。
今日、FC2へのping送信を試してみます!
記事で紹介しているコードに色をつける
記事で紹介しているコードに色をつける方法、自力でなんとか実装しようとしましたが、無理っぽい…。とりあえずは、Online syntax highlighter like TextMateを使おうと思います。行間など少し味付けもしましたが、色の設定はそのまま使ってます。ちなみに、使っているスタイルは「Espresso Libre」です。
英語で「syntax highlighter」と検索すると、たくさんオンラインツールが出てきました。いろいろなサイトを見たのですが、Online syntax highlighter like TextMateは自動で言語を指定してくれるのでらくちんです。
今日の日記は書き換えたので、過去の分もそのうち色付きにしたい!やることが増えました。
今日はここまで
時間が来てしまいました。今日はRSS version1.0を作る日だった!さきほど迷っていたロゴですが、気付いたらRSSと一緒にあげてしまっていたので、このまま使います。やりたいことリストの3つが終わりました。そして今日の作業から最後の一つが増えました…。
- RSS version1.0を作成する ←完了
- サイトロゴを作成してベタ打ちのロゴと交換する ←完了
- 過去の日記のイメージ画像を作成
- サイトマップをGoogleとBingに送信する手順を作る
- PHP関数「strtime」を利用している所を書き換える
- CSSで「grid-gap」を利用している部分を書き換える
- 記事で紹介しているコードに色をつける ←完了
- index.phpのあり、なしを統一する ←完了
- 人気投稿の準備として、アクセス解析をするPHPを作成する
- 記事をカテゴリーごとに分ける準備をする
- 過去記事のコードに色をつける
明日はロードマップに戻って作業をしたいと思います。リストで残っているものは、また時間をみつけてちょこちょこやっていこう!
