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

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

ただいまの
回答率

89.63%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 98

sinshioya

score 1

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

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

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

これまでやったこと

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

リクエストURLの作成
上記サイトで、リクエストURLを作成する方法が記載されてあります。
https://<example-com&gt;.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 ); をすれば良いでしょう。」

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

Yes

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

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

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

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

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

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

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

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

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

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


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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/02/13 21: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) ←これでいいのでしょうか?

    自分でも引き続き調べ続けようと思っております。
    貴重なお時間を割いて頂きありがとうございます。
    またお時間あるときでにもご回答いただけますと幸いです。

    キャンセル

  • 2020/02/13 23:53 編集

    引用の順番を入れて変えています。

    > 運営者の方から「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 を作成する様なプログラムを作成する等)

    キャンセル

  • 2020/02/14 17:02

    詳細なご回答感謝します!
    Wordpressのフォーラムの返事着たのですが、この方法でやっても問題があるらしいです。
    https://wordpress.org/support/topic/about-php-implementation-for-amp-cache/
    ヒントをもらっていますが、英語であること、知識がゼロであることからここが私の限界のようです。

    せっかくご回答頂いたても関わらずすみません!
    CHERRYさんに関しましてはここまでお付き合いいただき本当に感謝致します!
    別のアプローチを試してみようと思います!
    ありがとうございました!

    キャンセル

  • 2020/02/14 17:17

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

    キャンセル

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

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる