質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AMP(Accelerated Mobile Pages)

AMP(Accelerated Mobile Pages)は、Google社を始め複数のプラットフォームが共同で参加しているプロジェクト。モバイルユーザーのUX向上を目的とし、モバイルページの表示速度の高速化を図っています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2421閲覧

update-cacheリクエストを使用してAMPページを更新する方法

sinshioya

総合スコア5

AMP(Accelerated Mobile Pages)

AMP(Accelerated Mobile Pages)は、Google社を始め複数のプラットフォームが共同で参加しているプロジェクト。モバイルユーザーのUX向上を目的とし、モバイルページの表示速度の高速化を図っています。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/02/12 12:37

的外れな質問をしているかもしれませんが、よろしくお願いいたします。
どんだけ調べても解決できません。詳しいかたの知識をお借りできればと思います。

やりたいこと:AMPコンテンツのキャッシュ更新

目的:AMPページをカスタマイズした後すぐにスマホで確認したい

これまでやったこと

RAS鍵の生成
AMPコンテンツを更新するに書いてあるやり方を、こちらのサイトAMPのCDNキャッシュをupdate-cacheを使って強制更新する方法。update-pingは廃止。を参考にRSAキーの準備とアクセスまでは成功しております。

リクエストURLの作成
上記サイトで、リクエストURLを作成する方法が記載されてあります。
https://<example-com>.cdn.ampproject.org/update-cache/c/s/<example.com/article>?amp_action=flush&amp_ts=<ts_val>&amp_url_signature=<sig_val>
この中にあるパラメータを以下の内容で挿入するよう指示があります。

パラメータ
<example-com>: ドメインをAMP Cache URL Formatでエンコードしたもの。単純には、”-“を”–“に、”.”を”-“に置き換えたものです。
・<example.com/article>: キャッシュを更新したいURL
・<ts_val>: unix time。リクエストを送る時間のプラマイ1分以内でないといけません。
・<sig_val>: RSA暗号鍵で作成したキー。

出来上がったものの「/update-cacheから<ts_val>までの部分をsha256で暗号化」し「web safeなbase64でエンコード」と指示があります。

SHA256ハッシュ生成ツール
上記サイトで暗号化しましたものをBASE64 エンコード・デコードこのサイトでUTF-8でエンコードしました。

わからないこと

ここからが私にとっては難解でして、分からないことを箇条書きしますと

  • 上記の方法でエンコードしたURLにアクセスするとキャッシュが更新されるという理解でよろしいでしょうか?

参考サイトでは「phpで実装を行うと次のようになります。」とあります。

  • この記述を保存する際のファイル名は何にすればいいのか?どこに保存し実行すれないいのか?
function generateURL( $page ) { $domain = ‘example.com’; $url = $domain . $page; $timestamp = time(); $ampBaseUrl = “https://&#8221; . str_replace( array( ‘-‘, ‘.’ ), array(‘–‘, ‘-‘ ), $domain ) . “.cdn.ampproject.org”; $signatureUrl = ‘/update-cache/c/s/’ . $url . ‘?amp_action=flush&amp_ts=’ . $timestamp; // opening the private key $pkeyid = openssl_pkey_get_private( “file:///Users/boofoo/private-key.pem” ); if ( $pkeyid == false ) { echo ‘could not open the private key.’; exit; } // generating the signature openssl_sign( $signatureUrl, $signature, $pkeyid, OPENSSL_ALGO_SHA256 ); openssl_free_key( $pkeyid ); // urlsafe base64 encoding $signature = $this->urlsafe_b64encode( $signature ); // final url for updating $ampUrl = $ampBaseUrl . $signatureUrl . “&amp_url_signature=” . $signature; return $ampUrl; } function urlsafe_b64encode( $string ) { return str_replace( array( ‘+’, ‘/’, ‘=’ ), array( ‘-‘, ‘_’, ” ), base64_encode( $string ) ); }

上記コードに関して以下のような指示が続いています。
「generateURL関数にページのパス ( /example_page.htmlなど) を渡すと、リクエストURLが返ります。」

  • これは上記コードの内のどこかにページパスを入力するのでしょうか?それとも別途PHPを作成するのでしょうか?作業手順が全く分かりません。

「関数内の$domainは先に指定しておきます。」

  • ここは、サイトドメイン(***.comのような)と理解して間違いないでしょうか?

「$domainには他バイト文字は入っていないと仮定しています。」

  • 他のバイトとは文字のことでしょうか?例えば「-」などのことでしょうか?

「あとは生成したURLに対して @file_get_contents( $url ); をすれば良いでしょう。」

  • この作業もどこでどのように実行するのかが分からず。

大変初歩的な質問ばかりで恐縮ではありますが、この作業を完成させたいと思っております。
何卒ご教授よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

上記の方法でエンコードしたURLにアクセスするとキャッシュが更新されるという理解でよろしいでしょうか?

Yes

この記述を保存する際のファイル名は何にすればいいのか?どこに保存し実行すれないいのか?

ASCII 文字であれば、特に問題ないはず。

これは上記コードの内のどこかにページパスを入力するのでしょうか?それとも別途PHPを作成するのでしょうか?作業手順が全く分かりません。

generateURL( ) にパスをパラメータで渡せば作成されたURL か、取得できます。

ここは、サイトドメイン(***.comのような)と理解して間違いないでしょうか?

$domain = ‘example.com’; 部分にサイトのドメインを記載しておくということでしょう。

他のバイトとは文字のことでしょうか?例えば「-」などのことでしょうか?

日本語などの 非ASCII 文字のことでないかと思われます。

この作業もどこでどのように実行するのかが分からず。

generateURL() で、URL を作成した後にそのURL にアクセスするということだと思います。


自分でプログラムが書けなくて、bash が実行できる環境を用意できるのであれば、

5分でできる!AMPキャッシュを update-cache で更新する方法

で公開されているシェルスクリプトを作成して実行するのが簡単ではないでしょうか。

投稿2020/02/13 03:43

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sinshioya

2020/02/13 12:17

ご回答ありがとうございます。 「5分でできる!AMPキャッシュを update-cache で更新する方法」もやってみました。 運営者の方から「google-amp-update-cache.sh は Linux 用のスクリプトです。 Windowsで実行する場合は WSL(Windows Subsystem for Linux)をインストールすれば実行できるかもしれません。」 とコメント頂き、WSLをインストールし再度実行しましたが、以下の結果です。 bash: google-amp-update-cache.sh: No such file or directory 現在、問合せとさらなる調査中です。 重ね重ね、ご回答ありがとうございました。 その中で私の書き方が悪かったところがありました。 「この記述を保存する際のファイル名は何にすればいいのか?どこに保存し実行すれないいのか?」 という質問は、その下のPHPのコードのことでした。 わかりにくくすみません。 「generateURL() で、URL を作成した後にそのURL にアクセスするということだと思います。」 こちらの回答と重なる部分があるかもしれませんが、このPHPコードをテラパッドにコピペし、その後ファイル名と拡張子をどうすればいいのかが分からず困っていました。 その後、完成したファイルはサーバーのどこにアップロードするのかも分かっていません。 Wordpressを運営しておりXサーバーを使っている場合はどうすればいいでしょうか? もし何かご存知であれば教えてください。 「generateURL( ) にパスをパラメータで渡せば作成されたURL か、取得できます。」 これも、そもそも「パス」と「パラメータ」が分かっていません。 調べてみてURLの最後に「?」「=」などを使うことは分かったのですが、自分の場合どうすればいいのかがわかりません。 例えば、URLがhttps://mmm.comの場合は、generateURL(https://mmm.com) ←これでいいのでしょうか? 自分でも引き続き調べ続けようと思っております。 貴重なお時間を割いて頂きありがとうございます。 またお時間あるときでにもご回答いただけますと幸いです。
CHERRY

2020/02/13 14:56 編集

引用の順番を入れて変えています。 > 運営者の方から「google-amp-update-cache.sh は Linux 用のスクリプトです。 > Windowsで実行する場合は WSL(Windows Subsystem for Linux)をインストールすれば実行できるかもしれません。」 Xserver なら Linix だったと思うので、 ssh でログインして、インストール・実行は可能と思います。 Xserver で、ssh ログインする方法は [SSH設定](https://www.xserver.ne.jp/manual/man_server_ssh.php) [SSHソフトの設定(Tera Term)](https://www.xserver.ne.jp/manual/man_server_ssh_connect_tera.php) 等を参照してください。 > その後、完成したファイルはサーバーのどこにアップロードするのかも分かっていません。 > Wordpressを運営しておりXサーバーを使っている場合はどうすればいいでしょうか? > もし何かご存知であれば教えてください。 どの様なプログラムにして、どのように実行する予定でしょうか? > 「この記述を保存する際のファイル名は何にすればいいのか?どこに保存し実行すれないいのか?」 という質問は、その下のPHPのコードのことでした。 このプログラムは、WordPress とは、直接関係がないのでどこでも構いません。(WordPress の機能を呼び出していないため、設置場所に制限はないと思います。 ) たとえば、amp-update.php という名前で保存して、WordPress のトップディレクトリ ( WordPress の index.php がある場所 ) にアップロードした場合は、 https://example.com/amp-update.php のような URL になります。 > 「generateURL( ) にパスをパラメータで渡せば作成されたURL か、取得できます。」 > これも、そもそも「パス」と「パラメータ」が分かっていません。 > 調べてみてURLの最後に「?」「=」などを使うことは分かったのですが、自分の場合どうすればいいのかがわかりません。 > 例えば、URLがhttps://mmm.comの場合は、generateURL(https://mmm.com) ←これでいいのでしょうか? このブログラムでは、ドメイン部分が固定になっているので、 https://example.com/ の場合は、 / がパスになりますので、 generateURL( '/' ); のような感じで function を呼び出すと amp 更新通知用のURLをgenerateURL が作成します。 > 「generateURL() で、URL を作成した後にそのURL にアクセスするということだと思います。」 > こちらの回答と重なる部分があるかもしれませんが、このPHPコードをテラパッドにコピペし、その後ファイル名と拡張子> をどうすればいいのかが分からず困っていました。 Web サイトにアップロードして、Web ブラウザ経由で実行したいのであれば、 ` file:///Users/boofoo/private-key.pem ` の部分で指定している秘密鍵も同じサーバーにアップロードして、アップロードしたファイルのパスに合わせて、パスを変更してください。 なお、private-key.pem ファイルは、秘密鍵ですので、Web 経由で、アクセスできない場所に置くことをおすすめします。 ( 例: /home/ユーザー名/private-key.pem に保存して、このパスを設定する等 ) なお、第三者が秘密鍵を取得できると取得した人はアップデートすることが可能になります。 Web ブラウザ経由で実行したい場合は、質問に記載されたコードでは URL の指定などがありませんので、現在のコードに パスや generateURL の呼び出して URL 作成して、作成した URL へのアクセス実行するように記載する必要があります。 仮に... https://example.com/ の更新を反映させるのであれば、php のコードに $url = generateURL( '/' ); echo file_get_contents( $url ); を追加する感じでしょうか。 (複数の URL に対して実行したい場合は、 $url = generateURL( '/' ); echo file_get_contents( $url ); の部分をパスを変えて複数記載する または、google-amp-update-cache.sh のようにパラメータで、URLを渡すようにするなどの対応が必要です。 (たとえば、filter_input 等を利用して、URL をGET でパラメータを渡して、URL に対して、更新通知用のURL を作成する様なプログラムを作成する等)
sinshioya

2020/02/14 08:02

詳細なご回答感謝します! Wordpressのフォーラムの返事着たのですが、この方法でやっても問題があるらしいです。 https://wordpress.org/support/topic/about-php-implementation-for-amp-cache/ ヒントをもらっていますが、英語であること、知識がゼロであることからここが私の限界のようです。 せっかくご回答頂いたても関わらずすみません! CHERRYさんに関しましてはここまでお付き合いいただき本当に感謝致します! 別のアプローチを試してみようと思います! ありがとうございました!
CHERRY

2020/02/14 08:17

リンク先を拝見しました。 なるほど、AMP側も関係しているとなるとなかなか難しそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問