ホーム>source

Moz APIデータを取得するショートコードを設定しようとしていますが、問題が発生しています。場合によっては、値を0に戻し、場合によっては機能します。私はここで何が間違っているのかわかりません。既存のトランジェントを削除するか、トランジェントの値= 0かどうかを確認する必要があるかもしれません。さらに、異なる一時キーを使用してこの関数を書き換えることにより、同じコードを使用して異なるMOZ APIデータを取得しています。このコードを1つにマージできますか? [moz_score_da]や[moz_score_pa]のようにコードは次のとおりです。主な問題は、いくつかの一時的な値がゼロを返し、その後手動で削除する必要があり、正しい値が返されることです。

このショートコードをACFフィールドで使用しています。可能であれば、トランジェントとショートコードを使用してacfフィールドを直接更新できるかどうか、ご案内ください。

<前>ウィズウィズ

2番目のコードは

<前>ウィズウィズ function post_title_shortcode(){ return get_the_title(); } add_shortcode('post_title','post_title_shortcode'); function moz_score_shortcode($atts) { extract( shortcode_atts( array( 'domain' => get_the_title(), ), $atts ) ); if ( ! $domain ) return; // No domain, nothing to return $cache_key = 'agency_moz_score_' . $domain; if ( false === $seo_grade = get_transient( $cache_key ) ) { // Setting Moz API connection $accessID = "mozscape-####"; // * Add unique Access ID $secretKey = "####"; // * Add unique Secret Key $expires = time() + 300; $SignInStr = $accessID. "\n" .$expires; $binarySignature = hash_hmac('sha1', $SignInStr, $secretKey, true); $SafeSignature = urlencode(base64_encode($binarySignature)); // Connecting to Moz API url $reqUrl = "http://lsapi.seomoz.com/linkscape/url-metrics/".urlencode($domain)."?Cols=103079215108&AccessID=".$accessID."&Expires=".$expires."&Signature=".$SafeSignature; // Send request with curl $opts = array( CURLOPT_RETURNTRANSFER => true ); $curlhandle = curl_init($reqUrl); curl_setopt_array($curlhandle, $opts); $content = curl_exec($curlhandle); curl_close($curlhandle); // Getting 'pda' from Moz API and then rounding $resObj = json_decode($content); $seo_grade = $resObj->pda; $seo_grade = round($seo_grade, 0); set_transient( $cache_key, $seo_grade, (60*60*72) ); } return $seo_grade; } add_shortcode( 'moz_score','moz_score_shortcode' );
あなたの答え
  • 解決した方法 # 1

    コメントで説明したように、1つのリクエストでpdaとupaの両方をフェッチする試みは次のとおりです。

    <前>ウィズウィズ

    またはここの要点。ご了承ください:

    curlコードは正常に機能していると思われるのでコピーしましたが、代わりに使用できるwp_request_getもあります。

    curlによって返されたHTTPステータスコードをテストし、エラーをログに記録しています

    丸めようとする前に、抽出したupaまたはpdaの値が数値であることも確認しています。これは、間違っていると思います。ここでは、null値は0に丸められていると思います。 「APIからエラーが発生していることに気付かない

    呼び出しているAPIは最新ではなく、代わりに使用する必要がある新しいAPIがあります

    このバージョンのAPIは、このように一度に1つずつフェッチするのではなく、すべてのドメインに対して一度に使用できるバッチリクエストもサポートしています。

    /** * Make a Moz v1 URL Metrics request for a given domain * * @see https://moz.com/help/links-api/v1-archive/v1-url-metrics * @see https://moz.com/help/links-api/v1-archive/response-fields * @param $domain */ function moz_v1_links_api_request($domain) { if ( !$domain ) { return NULL; } $cache_key = 'agency_moz_url_metrics_' . $domain; $url_metrics = get_transient( $cache_key ); if ( false === $url_metrics ) { // Setting Moz API connection $accessID = "mozscape-####"; // * Add unique Access ID $secretKey = "####"; // * Add unique Secret Key $expires = time() + 300; $SignInStr = $accessID. "\n" .$expires; $binarySignature = hash_hmac('sha1', $SignInStr, $secretKey, true); $SafeSignature = urlencode(base64_encode($binarySignature)); // Connecting to Moz API url // 103079215140 = 0x1800000024, the flags for pda, upa, ueid and uu respectively $reqUrl = "http://lsapi.seomoz.com/linkscape/url-metrics/".urlencode($domain)."?Cols=103079215140&AccessID=".$accessID."&Expires=".$expires."&Signature=".$SafeSignature; // Send request with curl $opts = array( CURLOPT_RETURNTRANSFER => true ); $curlhandle = curl_init($reqUrl); curl_setopt_array($curlhandle, $opts); $content = curl_exec($curlhandle); $status_code = curl_getinfo($curlhandle, CURLINFO_HTTP_CODE); curl_close($curlhandle); if ( $status_code < 200 || $status_code >= 300 ) { // HTTP request failed error_log('moz_v1_links_api_request for ' . $domain . ' failed: ' . $status_code . ' ' . print_r( $content, true) ); // Cache an empty object for 30 seconds so we retry shortly $url_metrics = new stdClass(); set_transient( $cache_key, $url_metrics, 30 ); } else { // Cache the object returned for three days $url_metrics = json_decode($content); set_transient( $cache_key, $url_metrics, (60*60*72) ); } } return $url_metrics; } function moz_score_shortcode($atts) { extract( shortcode_atts( array( 'domain' => get_the_title(), ), $atts ) ); if ( ! $domain ) return NULL; // No domain, nothing to return $url_metrics = moz_v1_links_api_request( $domain ); // Getting 'pda' from Moz API and then rounding if ( isset( $url_metrics->pda ) ) { $seo_grade = $url_metrics->pda; if (is_numeric($seo_grade)) { $seo_grade = round($seo_grade, 0); } } else { // No value returned $seo_grade = NULL; } return $seo_grade; } add_shortcode( 'moz_score','moz_score_shortcode' ); function moz_pa_shortcode($atts) { extract( shortcode_atts( array( 'domain' => get_the_title(), ), $atts ) ); if ( ! $domain ) return NULL; // No domain, nothing to return $url_metrics = moz_v1_links_api_request( $domain ); // Getting 'upa' from Moz API and then rounding if ( isset( $url_metrics->upa ) ) { $seop_grade = $url_metrics->upa; if ( is_numeric( $seop_grade ) ) { $seop_grade = round($seop_grade, 0); } } else { // No value returned $seop_grade = NULL; } return $seop_grade; } add_shortcode( 'moz_pa','moz_pa_shortcode' );

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Oracle SQLビューで使用されるテーブルと列を見つける