実際には、タスクは次のとおりでした。
- PHPとMySQLを使用して実装された、高負荷向けに最適化された「あまりない」リソースの少ない専用サーバー、自己記述(継承)CMSがあります。
- ドキュメントID => 1日あたりの一意のドキュメントビューの数に一致するものを作成する必要があります
- 週、月、年の統計も保持します
すぐに、これらの統計を計算および保存するための「ビルトイン」メカニズムが長い間使用されていたことに注意する必要があります。
その結果、サードパーティのサービスを統計ストアとして使用することになりました(最終バージョンは、データベース内のバッファテーブルとのハイブリッドになりました)。 ある程度の検討の後、APIを介してAnalyticsを使用することが決定されました。
車輪を再発明しないために、 ここでこのライブラリを使用して分析データにアクセスすることにしました。
さらに、統計が統合されるすべてのページのURLをwww.site.ru/%id%.htmlとします。ここで、idは厳密に整数のパラメーターです。 必要に応じて、1つの正規表現を置き換えると簡単にこれを実行できます。
たとえば、統計が必要なすべての資料がデータベース内の同じテーブルアート(id、name、...)にあり、このテーブルのidがURLのidと一致するとします。
次に、自宅で統計を保存するためのバッファテーブルを作成します。
CREATE TABLE `art_stat` (
`art_id` INT NOT NULL ,
`day_stat` INT DEFAULT '0' ,
`week_stat` INT DEFAULT '0' ,
`month_stat` INT DEFAULT '0' ,
`year_stat` INT DEFAULT '0' ,
UNIQUE (
`art_id`
)
);
* This source code was highlighted with Source Code Highlighter .
次に、最小限のコメントでコード自体を引用します。
<?php
set_time_limit(0);
require_once 'start.php' ; //
require_once 'gapi.class.php' ; //
// -
define( 'ga_email' , '...' );
define( 'ga_password' , '...' );
define( 'ga_profile_id' , '...' );
//
// ,
// d -
// w -
// m -
// y -
set_stat( 'd' );
function set_stat( $time_limiter = 'd' ) {
switch ( $time_limiter ) {
case 'd' :
// Day
$start_stamp = mktime( date( "H" ), date( "i" ), date( "s" ), date( "n" ), date( "j" )-1, date( "Y" ) );
$field = 'day_stat' ;
break ;
case 'w' :
// Week
$start_stamp = mktime( date( "H" ), date( "i" ), date( "s" ), date( "n" ), date( "j" )-7, date( "Y" ) );
$field = 'week_stat' ;
break ;
case 'm' :
// Month
$start_stamp = mktime( date( "H" ), date( "i" ), date( "s" ), date( "n" )-1, date( "j" ), date( "Y" ) );
$field = 'month_stat' ;
break ;
case 'y' :
// Year
$start_stamp = mktime( date( "H" ), date( "i" ), date( "s" ), date( "n" ), date( "j" ), date( "Y" )-1 );
$field = 'year_stat' ;
break ;
} // End switch
$end_date = date( 'Ym-d' );
$start_date = date( 'Ym-d' , $start_stamp );
echo "From " . $start_date . " to " . $end_date . "<br>" ;
$ga = new gapi(ga_email,ga_password); //
$start_index = 1;
$max_results = 500;
$filter = null ; // . , ,
// GA
while ( $ga->requestReportData(ga_profile_id, array( 'pagePath' ), array( 'pageviews' , 'uniquePageviews' ), array( '-Pageviews' ), $filter, $start_date, $end_date, $start_index, $max_results) ) {
$request = $ga->getResults();
foreach ( $request as $page ) {
if ( preg_match( "/^\/(\d+)\.html$/is" , $page, $matches ) ) { // URL
$art_id = $matches[1]; // , ID URL ID
//
mysql_query( "UPDATE art_stat
SET " . $field . " = " . $page->getuniquePageviews() . "
WHERE art_id = " . $art_id
);
if ( mysql_affected_rows() == 0 ) {
mysql_query( "INSERT INTO art_stat ( art_id, " . $field . " )
VALUES ( " . $art_id . ", " . $page->getuniquePageviews() . " )"
);
} // End if
} // End if
} // End foreach
$start_index += $max_results;
} // End while
} // End function set_stat
require_once 'end.php' ; //
?>
* This source code was highlighted with Source Code Highlighter .
スクリプトを事前に準備して冠に掛け、ウェブサイトの資料に関する統計を定期的に更新します。
最後に、その週で最も人気のあるものを取得するためのクエリの例を示します
SELECT a.id, a.name, s.week_stat AS cnt
FROM art a LEFT JOIN art_stat s ON ( s.art_id = a.id )
ORDER BY cnt DESC
* This source code was highlighted with Source Code Highlighter .
また、この方法では、サイト上の特定の素材やその他の関連パラメーターに対するユーザーの関心の減少/増加を評価することができます。
PSこれは最初の投稿なので、厳密に判断しないでください