Plugin Directory

Changeset 1647869


Ignore:
Timestamp:
04/29/2017 06:20:14 AM (9 years ago)
Author:
oxynotes
Message:

sbs 1.6 updete

Location:
step-by-step-social-count-cache/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • step-by-step-social-count-cache/trunk/readme.txt

    r1416129 r1647869  
    44Tags: cache, count, sns, social
    55Requires at least: 4.2.4
    6 Tested up to: 4.5.2
    7 Stable tag: 1.5.2
     6Tested up to: 4.7.4
     7Stable tag: 1.6
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    109109== Changelog ==
    110110
     1111.6
     112キャッシュ周りの調整。
     113デバッグモードの実装。
     114
    1111151.5.2
    112116タグのカスタマイズ時に生成されるURLをエンティティ化。FacebookのAccess Tokenが誤っている場合、エラーメッセージを表示するように変更。
  • step-by-step-social-count-cache/trunk/sbs-social-count-cache.php

    r1416129 r1647869  
    44Plugin URI: https://wordpress.org/plugins/step-by-step-social-count-cache/
    55Description: ソーシャルブックマークのカウントをキャッシュするプラグイン
    6 Version: 1.5.2
     6Version: 1.6
    77Author: oxynotes
    88Author URI: http://oxynotes.com
     
    576576            $u_hour = ($hour * 60 * 60);
    577577            $u_minute = ($minute * 60);
    578             return $current_time - ( $u_day + $u_hour + $u_minute );
     578            return $current_time + ( $u_day + $u_hour + $u_minute );
    579579    }
    580580
     
    700700     */
    701701    public function get_pocket( $url ) {
    702         $pocket_uri = 'http://widgets.getpocket.com/v1/button?v=1&count=horizontal&url=' . rawurlencode($url);
     702        $pocket_uri = 'https://widgets.getpocket.com/v1/button?label=pocket&count=horizontal&v=1&url=' . rawurlencode($url) . '&src=' . rawurlencode($url);
    703703        $result = wp_remote_get( $pocket_uri, array( 'timeout' => 5 ) );
    704704
     
    10051005
    10061006
     1007
     1008    /**
     1009     * テストモード時に各パーツから受け取ったコメントを書き出す処理をまとめたもの
     1010     * 書き出されたコメントはコールバック関数に渡される
     1011     * @param   str     各コメントの要素を受け取る
     1012     * @return  str     コールバック関数に渡すコメント
     1013     *
     1014     * since    1.5.3   テストモード用に追加
     1015     */
     1016    function output_testmode_comment( $buffer ) {
     1017        $url = get_permalink();
     1018        $site_title = get_bloginfo( 'name' );
     1019
     1020        // html_entity_decode()を挟まないと"や'が文字参照で表示されてしまうので注意
     1021        $title = urlencode( html_entity_decode( get_the_title(), ENT_COMPAT, 'UTF-8' ) );
     1022
     1023        $search = array( '[[url]]', '[[site_title]]', '[[title]]', '[[count]]' );
     1024        $replace = array( $url, $site_title, $title, $count );
     1025        $rep_txt = str_replace( $search, $replace, $arg );
     1026
     1027        return $rep_txt;
     1028    }
     1029
     1030
     1031
     1032
     1033
    10071034} // end class
    10081035
     
    10141041// インスタンスの作成(コンストラクタの実行)
    10151042$SBS_SocialCountCache = new SBS_SocialCountCache();
     1043
     1044
     1045
     1046/**
     1047 * テスト用のコールバックをグローバル変数に追加する
     1048 *
     1049 * @param   string  $key
     1050 * @param   mixed   $callback
     1051 * @return  void
     1052 */
     1053function add_callback( $key, $callback ) {
     1054    $GLOBALS['_sbs_callbacks'][$key] = $callback;
     1055}
    10161056
    10171057
     
    10491089    $url = get_permalink( $postid );
    10501090
    1051 /*
    1052     // test用
    1053     $postid = 105;
    1054     $url = "http://oxynotes.com/?p=2933";
    1055 */
     1091    // デバッグモード
     1092    $debug_mode = ture;
     1093
     1094    // デバッグモード用の配列作成
     1095    $debug_Log = array();
     1096
    10561097
    10571098
     
    10631104    代わりにcurrent_timeやget_date_from_gmtの使用が推奨されている。
    10641105    また投稿の最終更新日を取得するにはget_the_modified_timeを使う。
    1065 
    1066     しかしこれらの関数には謎の仕様があり、なぜか+9時間される。
    1067     設定画面でUTC+9にしているが、プラグインで使うと更に+9される???
    1068     今回はデータベースの値と、現在の時間が両方+9時間されるので支障ないが、
    1069     厳密に時間を出さないといけない場合は注意が必要だ。
    1070     普通に書くと-9時間されたUTCが返ってくるならわかるが、本当に謎。
    1071     国際化のための使用なのかもしれないが、ありがた迷惑。わざわざソースまで追うのが面倒。
    1072     そしてCodexの当該タグのページにも解説なし。
    10731106    */
    10741107
     
    10781111    $week = $day - (6 * 24 * 60 * 60); // 1週間
    10791112
    1080 
    1081 
    1082 
    10831113    // 最終更新日が1日以内、1週間以内、それ以上の場合で振り分け、現時点での有効期限を算出
    10841114    if ( $pfx_date > $day ) { // 最終更新日が1日以内の場合
    10851115        $exp_time = $sbs->exp_time($current_time, $sbs_cache_time['1day']['day'], $sbs_cache_time['1day']['hour'], $sbs_cache_time['1day']['minute']);
    1086         // var_dump("最終更新日が1日以内"); // テスト用
     1116        $setting_cache_time = ($sbs_cache_time['1day']['day'] * 24 * 60 * 60) + ($sbs_cache_time['1day']['hour'] * 60 * 60) + ($sbs_cache_time['1day']['minute'] * 60);
     1117        $debug_Log['投稿の最終更新日から'] = "1日以内";
    10871118    } elseif( $pfx_date > $week ) { // 1週間以内
    10881119        $exp_time = $sbs->exp_time($current_time, $sbs_cache_time['1week']['day'], $sbs_cache_time['1week']['hour'], $sbs_cache_time['1week']['minute']);
    1089         // var_dump("最終更新日が1週間以内"); // テスト用
     1120        $setting_cache_time = ($sbs_cache_time['1week']['day'] * 24 * 60 * 60) + ($sbs_cache_time['1week']['hour'] * 60 * 60) + ($sbs_cache_time['1week']['minute'] * 60);
     1121        $debug_Log['投稿の最終更新日から'] = "1日以上、1週間以内";
    10901122    } else { // それ以上
    10911123        $exp_time = $sbs->exp_time($current_time, $sbs_cache_time['after']['day'], $sbs_cache_time['after']['hour'], $sbs_cache_time['after']['minute']);
    1092         // var_dump("最終更新日が1週間以上"); // テスト用
    1093     }
    1094 
    1095 
    1096 
    1097 
    1098     // 対応する投稿IDのキャッシュをデータベースから取得する
     1124        $setting_cache_time = ($sbs_cache_time['after']['day'] * 24 * 60 * 60) + ($sbs_cache_time['after']['hour'] * 60 * 60) + ($sbs_cache_time['after']['minute'] * 60);
     1125        $debug_Log['投稿の最終更新日から'] = "1週間以上経過";
     1126    }
     1127
     1128    // クエリの組み立て
     1129    $query = "SELECT day,twitter_count,facebook_count,google_count,hatena_count,pocket_count,feedly_count FROM {$table_name} WHERE postid = {$postid}";
     1130
    10991131    // acpが有効な場合はapcにデータを保存して再利用する
    1100     $query = "SELECT day,twitter_count,facebook_count,google_count,hatena_count,pocket_count,feedly_count FROM {$table_name} WHERE postid = {$postid}";
    1101     if ( function_exists( 'apc_store' ) && ini_get( 'apc.enabled' ) ) { // apcモジュール読み込まれており、更に有効かどうか調べる
     1132    if ( function_exists( 'apc_store' ) && ini_get( 'apc.enabled' ) ) { // apcモジュール読み込まれており、更に有効かどうか、キャッシュの有効期限が切れてないか調べる
     1133        $debug_Log['サーバのapc cache'] = "有効";
    11021134        $sbs_apc_key = "sbs_db_cache_" . md5( __FILE__ ) . $postid; // md5で一意性確保
    1103         // var_dump("apc有効");
     1135
    11041136        if ( apc_fetch( $sbs_apc_key ) ) { // キャッシュがある場合
     1137
    11051138            $result = apc_fetch( $sbs_apc_key );
    1106             // var_dump("apcキャッシュ見つかった");
    1107         } else { // キャッシュがない場合(データベースのキャッシュを取得)
     1139            $debug_Log['apc cache'] = "見つかった";
     1140
     1141            // キャッシュの有効期限が切れている場合(古い設定のAPCキャッシュが残っていることがあるため)
     1142            if ( 0 > strtotime($result->day)+$setting_cache_time-$current_time ) {
     1143                $debug_Log['apc cacheの有効性'] = "古い設定のため新しいものに更新";
     1144
     1145                $result = $wpdb->get_row( $query );
     1146                apc_store( $sbs_apc_key, $result, strtotime($result->day)+$setting_cache_time-$current_time ); // 面倒なので保存した後に2度目からAPCで表示するので注意(有効期限が整数になる必要があるため)
     1147            }
     1148
     1149        } else { // キャッシュがない場合
     1150
    11081151            $result = $wpdb->get_row( $query );
    1109             apc_store( $sbs_apc_key, $result, strtotime($result->day) - $exp_time); // APCの有効期限は、キャッシュ作成日-有効期限で算出。期限切れの場合はマイナスになるがAPCでは問題ないようだ
    1110             // var_dump("apcキャッシュ見つからない");
    1111         }
    1112     } else {
    1113         $result = $wpdb->get_row($query);
    1114         // var_dump("apc無効");
    1115     }
    1116 
    1117 
    1118 
    1119 
    1120     // var_dump("投稿の最終更新日時取得" . date("Y-m-d H:i:s",$pfx_date) . "<br>");
    1121     // var_dump("ブログのローカルタイム取得" . date("Y-m-d H:i:s",$current_time) . "<br>");
    1122     // var_dump("有効期限" . date("Y-m-d H:i:s",$exp_time) . "<br>");
    1123     // var_dump("キャッシュの取得時間" . date("Y-m-d H:i:s",strtotime($result->day)) . "<br>");
    1124 
    1125     // キャッシュの取得日時が有効期限内の場合
    1126     if ( strtotime($result->day) > $exp_time ) {
    1127 
    1128         // var_dump("キャッシュが有効期限内"); // テスト用
     1152            apc_store( $sbs_apc_key, $result, strtotime($result->day)+$setting_cache_time-$current_time );
     1153            $debug_Log['apc cache'] = "見つからない";
     1154
     1155        }
     1156
     1157    } else { // apcが無効な場合
     1158
     1159        $result = $wpdb->get_row( $query );
     1160        $debug_Log['サーバのapc cache'] = "無効";
     1161
     1162    }
     1163
     1164    $debug_Log['サイトのローカルタイム'] = date("Y-m-d H:i:s",$current_time);
     1165    $debug_Log['投稿の最終更新日時'] = date("Y-m-d H:i:s",$pfx_date);
     1166    $debug_Log['キャッシュの取得時間'] = date("Y-m-d H:i:s",strtotime($result->day));
     1167    $debug_Log['キャッシュの有効期限'] = date("Y-m-d H:i:s",strtotime($result->day)+$setting_cache_time);
     1168    $debug_Log['キャッシュの残り時間'] = strtotime($result->day)+$setting_cache_time-$current_time . "秒";
     1169
     1170    // キャッシュの取得日時が有効期限内の場合(キャッシュの有効期限がある場合)
     1171    if ( strtotime($result->day)+$setting_cache_time-$current_time > 0 ) {
     1172
     1173        $debug_Log['キャッシュ'] = "期限内";
     1174
     1175        // デバックモード用の出力
     1176        if ( $debug_mode ) {
     1177            echo "<!--" . "\n";
     1178            echo "SBS Social Count Cacheデバックモード" . "\n";
     1179            foreach( $debug_Log as $key => $value ) {
     1180                echo $key . ':' . $value . "\n";
     1181            }
     1182            echo "-->";
     1183        }
     1184        // キャッシュを利用して返す
    11291185        return $sbs->get_cache( $result, $active_sns );
    11301186
    11311187    } else { // 有効期限切れの場合
    11321188
    1133         // var_dump("キャッシュが有効期限切れ"); // テスト用
     1189        $debug_Log['キャッシュ'] = "期限切れ";
     1190
     1191        // デバックモード用の出力
     1192        if ( $debug_mode ) {
     1193            echo "<!--" . "\n";
     1194            echo "SBS Social Count Cacheデバックモード" . "\n";
     1195            foreach( $debug_Log as $key => $value ) {
     1196                echo $key . ':' . $value . "\n";
     1197            }
     1198            echo "-->";
     1199        }
     1200
    11341201        return $sbs->add_cache( $postid, $url, $active_sns );
    11351202
    11361203    }
     1204
     1205
     1206
     1207
    11371208}
    11381209
Note: See TracChangeset for help on using the changeset viewer.