サブドメインで構築しているブログのRSSが読み込めないので、場当たり的な対処をした話です。シェルのソースは記事最後にありますが、カスタマイズ必要なのでご注意ください。
目次
サブドメインブログのRSSがエラーになる
そもそもサブドメインとは
このブログのURLは「~it-diary.mejilong.com」ですが、私が持っている(購入した)ドメインは「mejilong.com」です。
頭に「it-diary」をつけて、独立したドメインかのように扱っています。
これがサブドメインです。
私は、IT系、育児系、ゲーム系の3種類のブログをサブドメインで使い分けています。
検索エンジン的にはあまり良い効果はないらしいのですが、ブログのジャンルが雑多になりすぎると訪問者様が混乱するかもなと思い、分けました。
RSSを使おうと思ったらエラー
とはいえ、興味があれば他のブログも見てほしいなあ…という思いもあります。
そこで導入を検討したのがRSSです。ブログの更新情報を自動収集するやつです。
姉妹ブログの新着記事をサイドバーに表示すればいいじゃんか、と思ったのですが、これがダメでした。
なぜかわかりませんが、エラーになります。
自身のドメインのRSSは読み込めるものの、サブドメインのRSSは読み込めずにエラーが表示されます。
同じ現象が質問サイトに挙げられていたものの、結局解決はしていない様子。あまりメジャーなエラーではないのかも…
HTMLファイルの自動生成で対処
エラーの解決方法がわからなかったので、Shellプログラムで暫定対処することにしました。
WordPressのフィード内容から、「新着記事のタイトル」、「URL」、「日付」をまとめたHTMLファイルを生成し、それを各ブログのルートディレクトリにコピーして、ブログサイドバーに表示します。
まずはHTMLファイルの生成
wgetコマンドを使って、ブログURL/feed の内容を取り込みます。
いろんな情報が書かれたXMLファイルが作られますので、titleタグ、linkタグ、pubDateタグが存在する行のみを残します。
それぞれ、記事タイトル、記事URL、記事作成日時を扱っています。
このときの状態がこんな感じ。
1 2 3 |
<title>記事のタイトル</title> <link>記事のURL</link> <pubDate>更新日時</pubDate> |
これをHTML風に加工して、最終的にこんな感じにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<TABLE> <TR> <TD VALIGN="TOP">-</TD> <TD> <A HREF="記事のURL"> 記事のタイトル</A><BR> </TD> </TR> <TR> <TD COLSPAN="2" ALIGN="RIGHT"> <FONT COLOR=#C0C0C0">更新日時)</FONT> </TD> </TR> </TABLE> |
ブラウザで表示したときのレイアウトはこうなります。
作成したHTMLファイルを、各ブログから参照可能なディレクトリに移動します。
ここでは、ルートディレクトリ(DocumentRoot)を例とします。
ブログのサイドバーに設定
取得したHTMLファイルをブログのサイドバーに表示します。
まず、HTMLファイルの読み込みを可能とするために、「functions.php」に以下の内容を追記します。
(こちらのページを参考にさせていただきました。)
1 2 3 4 5 6 7 8 |
function includeFile($atts) { if (isset($atts['file'])) { $file = $atts['file']; return file_get_contents($file); return $file; } } add_shortcode('include', 'includeFile'); |
次に、サイドバーに「テキスト」ウィジェットを追加して
「[include file="作成したHTMLファイル名"]」と記入すれば、表示されます。される…はず!
私はこのシェルを1日1回、夜間に実行して、最新記事の内容を各ディレクトリに送信するようにしています。
シェルプログラム
作成したシェルプログラムは以下です。黄色くマークしている行は、各環境に合わせて書き換えてください。要注意なのは91行目以降です。3つ運用しているブログのうちひとつは、フィードの構成がほかとちょっと違ったので、パラメータの数値を2ずつ減らさないと正しくうごきませんでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
#!/bin/sh # シェル起動ディレクトリへ移動 cd /home/auto_rss # 3行分の情報を成型するファンクション # $1=編集対象ファイル名 # $2=URL行 # $3=題名行 # $4=日付行 function text_convert(){ echo '<TR>' >> convert.html echo ' <TD VALIGN="TOP">-</TD>'>> convert.html echo ' <TD>'>> convert.html # URL行のコピー sed -n $2p $1 >> convert.html #タイトル行のコピー sed -n $3p $1 >> convert.html echo ' </TD>'>> convert.html echo '</TR>'>> convert.html echo '<TR>' >> convert.html echo ' <TD COLSPAN="2" ALIGN="RIGHT">' >> convert.html #日付行の整形 sed -n $4p $1 > temp_date.txt #月を数字にする。 sed -i s/Jan/01/ temp_date.txt sed -i s/Feb/02/ temp_date.txt sed -i s/Mar/03/ temp_date.txt sed -i s/Apr/04/ temp_date.txt sed -i s/May/05/ temp_date.txt sed -i s/Jun/06/ temp_date.txt sed -i s/Jul/07/ temp_date.txt sed -i s/Aug/08/ temp_date.txt sed -i s/Sep/09/ temp_date.txt sed -i s/Oct/10/ temp_date.txt sed -i s/Nov/11/ temp_date.txt sed -i s/Dec/12/ temp_date.txt # 年月日を取得 echo "<FONT COLOR=""#C0C0C0"">(" > replaced_date.txt cat temp_date.txt | cut -c 12-15 >> replaced_date.txt echo "年" >> replaced_date.txt cat temp_date.txt | cut -c 9-10 >> replaced_date.txt echo "月" >> replaced_date.txt cat temp_date.txt | cut -c 6-7 >> replaced_date.txt echo "日)</FONT>" >> replaced_date.txt # 改行文字を除外して追記 cat replaced_date.txt | tr -d '\n' >> convert.html # 作業ファイルを削除 rm replaced_date.txt rm temp_date.txt echo ' </TD>'>> convert.html echo '</TR>'>> convert.html } # ここからメイン処理 # *****ITブログの情報を取得 START ***** wget https://it-diary.mejilong.com/feed -O workfile00.txt # テキストを編集(以下は共通) # 特定のタグがある行のみを残す。 cat workfile00.txt|grep -e "<title>" -e "<link>" -e "<pubDate>">workfile01.txt # LINKタグ項目の処理 sed -e s/"<link>"/"<A HREF=\""/ workfile01.txt > workfile02.txt sed -e s/"<\/link>"/"\">"/ workfile02.txt > workfile03.txt # TITLEタグ項目の処理 sed -e s/"<\/title>"/"<\/A><BR>"/ workfile03.txt > workfile04.txt sed -e s/"<title>"/""/ workfile04.txt > workfile05.txt # PUBDATEタグ項目の処理 sed -e s/"<pubDate>"/""/ workfile05.txt > workfile06.txt sed -e s/"<\/pubDate>"/""/ workfile06.txt > workfile07.txt # 空白の整理 sed -e 's/^[ \t]*//' workfile07.txt > workfile08.txt # HTMLファイルの作成 echo "<TABLE>"> convert.html text_convert workfile08.txt 6 5 7 text_convert workfile08.txt 9 8 10 text_convert workfile08.txt 12 11 13 text_convert workfile08.txt 15 14 16 text_convert workfile08.txt 18 17 19 echo "</TABLE>">> convert.html #所定の位置へコピー \cp convert.html /ブログA/itblog.html \cp convert.html /ブログB/itblog.html # *****ITブログの情報を取得 END ***** # 作業ファイルを削除(経過を確認したい場合はコメントアウト) rm workfile00.txt rm workfile01.txt rm workfile02.txt rm workfile03.txt rm workfile04.txt rm workfile05.txt rm workfile06.txt rm workfile07.txt rm workfile08.txt rm convert.html |