kamenokoki.com

【33日目】Pingを自動送信する管理画面を作った

Posted:  Last Update:

サイトを作成し始めて33日目になりました。日々少しずつですが、前進できている気がします。昨日はブログランキングを確認する機会がありまして、リンクからサイトを訪れてくれている方がいるようでとっても嬉しいです。

ロードマップ

ロードマップで進捗を見ると下記の通りです。昨日はGoogle Serch ConsoleとBingに教えてもらった通りに、公開したばかりのサイトのエラーに対応するのに時間をとられてしまいました。後半で何とかRSSの表示順番を変えたりしました。

  • 準備 - サイトの全体像を決める
  • 使用するプログラミング言語を決めて環境を整える
  • サイトの基本構造を作って公開する
  • 収益化に最適なサイトにアップグレードする
    • コンテンツを充実させる(他の作業と同時進行)
    • サイトを見てもらえるようにサーチエンジンに登録する
    • sitemap.xmlとRSSを作成する ←今ここ
    • コンテンツに合わせてサイトを修正、スマホにも対応する
    • お問い合わせページを作る
    • 検索ボックスを作る
    • サイトマップページを作る
    • 個人情報に関するページを作る
    • SEOとセキュリティについて調べ、対応する
  • GoogleアドセンスとAmazonアソシエイトの申し込みをする
  • ローカルで簡単に入力ができるようにフォームを作る
  • フォローアップ - より収益化に向いたサイト構造に変更する

昨日の成果を確認

昨日対応したGoogle Search Consoleが教えてくれた「スマホ対応できてないよ!」というエラーですが、Googleが改めてページを検査してくれるまで少し時間がかかるみたいです。数日後に再度確認してみます。

Bingが教えてくれたエラー(詳細は昨日の日記でご確認ください)に関して。「まだMeta Descriptionがない記事があるよ」と指摘されていましたが、全ての記事にMeta Descriptionを入れるのは重労働なので、毎日少しずつ対応する予定です。それ以外は解消されていました。

昨日修正したrss.xmlを作成するPHPに関して。一昨日作った際には記事をランダムに書き込んでいました。ブログランキングサイトにこのデータを送ると、ランダムに書かれたリンクの一番上から読み込まれるという問題が…。最新記事を一番上に書いてほしい!、ということで、昨日は最新の記事から上に書き出すようにRSSを作成するPHPを変更しました。その成果をブログランキングサイトに見に行くと、今日はきちんと最新の記事から掲載されていました!
FC2ブログランキング
2020.10.02 F2cブログランキングに新規記事からRSSが反映されている様子
人気ブログランキング
2020.10.02 人気ブログランキングに新規記事からRSSが反映されている様子

昨日書いたWordPressは無料で使えるかという記事が先頭に来ています(ご興味があれば読んでやってください)!思い通りになって嬉しいです。そして、昨日よりも順位が上がってる…?ぽちっとしてくれた皆さま、ありがとうございます!ちょっと涙が出そう…。

sitemapとRSSをアップデートする管理ページを作りたい

元気をもらったところで、今日の作業を始めたいと思います。まずは、sitemaoとRSSのPHPをもう少し簡単に走らせられるようにすることから。今は、「どのファイルだっけ?」と考えながらPHPを開くと自動的にPHPが走る→「どのファイルだっけ?」と考えながらsitemapとRSSがアップデートされているか確認する→本番環境にFTTTPでsitemapとRSSをアップロードする(この時に、うっかりsitempとRSSを作成するPHPをアップロードしないように細心の注意を払う)→FC2ブログランキングと人気ブログランキングに更新を手動で報せる。という長い手順をとっています。書いているだけで疲れた(笑)

もっと簡単に、ひとつのページで管理できるようにするのが今日の目標です。手順を色々と考えて、計画を立てました。今から一つずつ作っていきます。

  1. サイトに管理ページをつけて、パスワードでログインできるようにする
  2. ログイン後に「PHPを走らせるボタン」を押すと、PHPを走らせ、完了を報せ、sitemapとRSSへのリンクが表示される
  3. リンクを確認後、「RSSをPing送信する」ボタンを押すと、FC2ブログランキングと人気ブログランキングに更新を報せ、その結果を表示する

管理ページにパスワードでログインできるようにする

最初にログイン画面ですね。Google検索して出て来た様々なサイトを参考にしながら、そして、悪戦苦闘しながら、30分ほどかかってログイン画面ができました。時間かかったなぁ!!!コードと画面の推移を下に貼っておきます。

<?php require (パスワードを書いたファイル、$loginと$passwordが書いてある); ?>
<?php
session_start();
//ログイン済みかを確認
if (isset($_SESSION['USER'])) {
header('Location: ログイン後のページ');
exit;
}
//ログイン後の処理
$message = '';
if(isset($_POST['login'])){
if ($_POST['loginname'] == $login && $_POST['password'] == $password){
$_SESSION["USER"] = 'user'; header("Location: ログイン後のページ"); exit;
}
else{ $message = 'メールアドレスかパスワードが間違っています。';}
}
?>
//最初に表示するページ
<h1>管理画面ログイン</h1>
<p style="color: red"><?php echo $message ?></p>
<form method="post" action="このファイル">
<label for="loginname">ユーザーネーム</label>
<input id="text" type="text" name="loginname">
<br>
<label for="password">パスワード</label>
<input id="password" type="password" name="password">
<br>
<input type="submit" name="login" value="ログイン">
</form>

ログイン画面
2020.10.02 管理者ログイン画面を作った
ログイン成功(今は仮の文章が入ってる)
2020.10.02 管理者ログイン画面でログインに成功した画面
ログイン失敗
2020.10.02 管理者ログイン画面でログインに失敗した画面

さらに、この管理画面は検索サイトに引っかかってほしくないので、<meta name="robots" content="noindex,nofollow,noarchive" />を記載して検索サイトのクロールを拒否しておきました。

sitempとRSSを作成するPHPを走らせる方法を考えた

2番目の「ログイン後に「PHPを走らせるボタン」を押すと、PHPを走らせ、完了を報せ、sitemapとRSSへのリンクが表示される」についていろいろと検索しました。結論として「ページからPHPを走らせるにはJava Script(jQuery)などが必要」 ということが分かりました。…jQueryをわざわざ勉強するのはめんどくさい…。どうにかPHPで実装できないものか…。

思いついた苦肉の策が、「ボタンを押すとあたかもPHPが自動的に走っているように見えるが、その実は次のページに遷移しただけ」という手法です。これなら今の知識でできるし、管理ページを開いただけでPHPが勝手に走ってしまうこともありません!(今までは勝手に走っていた)というわけで、ページの推移を考えます。

  1. ログインする
  2. sitemapとRSSを作りますか?というページが現れる。
  3. OKすると、PHPを走らせ、画面にはsitemapとRSSへのリンクが表示されるページが開く。ページには「RSSを送信しますか」というボタンもある
  4. OKすると、RSSを送信するPHPを走らせ、画面にはその結果と、ログアウトボタンが表示される
  5. ログアウトページから、ログインページにリダイレクトする

合計で5ページ作ることになりますが、既に1番はできていて、3番は昨日までに作ったPHPにリンクなどを貼り付けるだけで済みます。早速やってみよう。

ログイン後、sitemaとrssを作成するか聞くページ

ここはほぼHTMLのみなので、さくっと作り終わりました。冒頭に、ログインしているか確認するPHPがあります。ログインしていないとこのページは開けません。あと、まだlogout用のページが準備できていないですが、Logoutできるボタンも作ってみました。

<?php
session_start();
if(!isset($_SESSION["USER"])) {
header("Location: ログインページ");
exit;
}
?>
<h1>管理ページ</h1>
<h3>sitemapとRSSを生成します</h3>
<a href="sitemapとRSSを作成するPHPへのリンク"><button>生成する</button></a>
<h3>ログアウトする</h3>

<form method="post" action="ログアウトページ">
<input type="submit" name="logout" value="ログアウト">
</form>

画面はこんな感じです。
2020.10.02 管理者ページログイン後一枚目

sitemapとRSSを確認して、RSSを送信するか聞くページ

これは昨日までに作成したPHPに、小見出しや、ログイン認証などをつけました。上で作成したパーツを使いまわせるので。簡単。コードがこちら。

<?php
session_start();
if(!isset($_SESSION["USER"])) {
header("Location: ログインページ");
exit;
}
<h1>管理ページ</h1>
<h3>sitemapとRSSを生成します</h3>

ここに昨日作ったPHPを入れる

sitemapのアップデートが完了しました<br>
<a href="/top/sitemap.xml" target="_blank">チェックする</a><br>
RSSのアップデートが完了しました<br>
<a href="/top/rss.xml" target="_blank">チェックする</a><br>
<br>
<a href="このページのリンク"><button>再度生成する</button></a>
<br>
<h3>RSSを送信する</h3>
<a href="RSSを生成するPHPを含んだページへのリンク"><button>送信する</button></a>
<h3>ログアウトする</h3>
<form method="post" action="ログアウトページ">
<input type="submit" name="logout" value="ログアウト">
</form>

画面はこんな感じです。
2020.10.02 管理者ページログイン後2枚目

RSSを送信してログアウトを促すページ

まずはRSSの情報を送信するPHPを書かなければいけません。PING送信というらしいです。xmlを相手のpingサーバーなるものに「POST」で送りつけるらしいです。日本語で検索しても、自作する方法が見つからず、苦心しながら英語ページを巡回しました。どのサイトに言っても、割とみんな同じ変数を使っていて驚きました。定番なのかもしれません。結果、書いたコードがこちら。

<?php
$ping_servers = array();
$ping_servers[] = 送信先を入れる。
$ping_servers[] = 送信先2を入れる。
$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/rss.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);
echo "<br>";
}?>

これを、上で何度か見ている、ログイン認証や見出しでサンドイッチしました。画面がこちら。返って来た応答が中ほどに表示されているのですが、どこまでお見せして問題がないのか勉強不足で分からないので隠してあります。一応テストで動かしてみたのですが、問題ない返答が戻ってきているようです。
2020.10.02 pingを送った後の管理ページ

ログアウトページ

時間が気になりつつ、最後まで作ってしまいたいのでもう少し頑張ります。ここまでで2時間と少し経ってます…。頑張りすぎているかもしれない…。でも、何かの拍子にうっかり動かしてしまわないように、ログアウトは大事です。画面には表示されないのですが、ログアウトするため1枚ページが必要です。(もしかしたら、うまく設計すると必要ないのかもしれませんが…)

if(isset($_POST['logout'])){
session_start();
$_SESSION = ["USER"];
session_unset();
header("Location: ログインページ");
exit;
}
?>

これで、ログアウトすると、自動的にログインページに戻ります。

今日はここまで

今日は時間を使いすぎちゃった!ので、ここまでにします。ノルマの、見かけをきれいにするために日記の修正も今日は2件できないかも…。もちろん記事を書く時間はありません!なかなかコンテンツが増えない…。

今日作ったものをアップロードして、ブログサイトに無事反映されるか確認できるのは明日になります。問題がなければ、明日はいよいよ「コンテンツに合わせてサイトを修正、スマホにも対応する」に進めます。もう5日くらい「早く取り掛かりたい」と言い続けています。明日こそ先に進みたいです!

記事をシェアする

亀の子に連絡

ランキング参加中!ぽちっとしてね

F2cランキングアイコン 人気ブログランキング ブログランキング・にほんブログ村へ

広告