このブログ以外に連載などが増えてしまって、分かりにくくなってきたのでサイドバーにWeb連載一覧を作りました。
しかし、これを毎日更新するのは面倒です。そんなときは自動化だ!ということでにせっせとコード書きました。PHPよくわからーん
「とりあえず動けばOK」という代物で、エラー処理もへったくれもないのでコピペする場合は自己責任でお願いします。異常系なんて考慮していない。RSSが取得できなかったときどうなるのか分からない。(下手するとサイトが表示できなくなる可能性)
下記コードはnoteの定期購読マガジンの最新記事を取得して表示するコードです。更新日時が現在時刻から3日以内であれば「new!」を表示するようにしています。
ソースコードは載せていないけど、CHANGESは複数人運営なので、自分が描いている記事の最新を取得するように分岐いれればいけます。著者はうまくいかなかったから、カテゴリ見るようにしてます。
Anchor(Podcast)もRSSあるからさくっといけた。RSS最高。
PHP
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 |
// 「ぞえの秘密の舞台裏」のRSSを取得 $feed = file_get_contents('https://note.mu/kz_sue/m/m580802af85ef/rss'); // XML解析を行う上で、XMLで不正文字と扱われる対象を空文字に変換します $invalid_characters = '/[^\x9\xa\x20-\xD7FF\xE000-\xFFFD]/'; $feed = preg_replace($invalid_characters, '', $feed); // 文字列をXMLとして解析して、SimpleXMLElementクラスのインスタンスに変換 $rss = simplexml_load_string($feed); $output = ""; foreach($rss->channel->item as $item){ $title = $item->title; $date = date("n/j", strtotime($item->pubDate)); $link = $item->link; $output .= $date; $output .= " <a href=\"".$link."\" target=\"_blank\">".$title."</a>"; $today3 = date("Y-m-d", strtotime("-3 day")); if (strtotime($item->pubDate) > strtotime($today3)) { $output .= " <span class=\"red\">[new!]</span>"; } // 最新記事のみ取得して終了 break; } return $output; |
今回は子テーマのfunctions.phpに追加したけれど、本当はプラグイン作った方が良さそうかな。テーマを変えたとき、これも移植しなきゃいけなくなるし。
あとRSSのURLを直打ちしているけれど、これも定数にした方が見た目良くなるかな……なんて。仕事には使えないコードだけど、自分のブログはこれでいいのだ。
あとはRSSがないStudyWalkerの連載をなんやかんやできればいいのだけど。。。今後の課題です。
参考 新着情報を受け取る!PHPでRSSを取得する方法【初心者向け】TechAcademyマガジン 参考 noteがRSSに正式対応したらしいのでIFTTTで自動投稿ツイートを設定してみる
コメントを残す