document.write('<link rel="stylesheet" href="http://gist.github.com/stylesheets/gist/embed.css"/>')





document.write('<div id=\"gist-192519\" class=\"gist\">\n  \n  \n    \n            \n\n      <div class=\"gist-file\">\n        <div class=\"gist-data gist-syntax\">\n          \n          \n          \n            <div class=\"gist-highlight\"><pre><div class=\"line\" id=\"LC1\">package MT::Plugin::JSONAccessRanking;<\/div><div class=\"line\" id=\"LC2\">use strict;<\/div><div class=\"line\" id=\"LC3\">use base qw(MT::Plugin);<\/div><div class=\"line\" id=\"LC4\">use MT;<\/div><div class=\"line\" id=\"LC5\">use MT::Util qw( start_end_day epoch2ts format_ts );<\/div><div class=\"line\" id=\"LC6\">use XML::Simple;<\/div><div class=\"line\" id=\"LC7\">use JSON;<\/div><div class=\"line\" id=\"LC8\">&nbsp;<\/div><div class=\"line\" id=\"LC9\">our $VERSION = \'1.0\';<\/div><div class=\"line\" id=\"LC10\">&nbsp;<\/div><div class=\"line\" id=\"LC11\">my $plugin; $plugin = new MT::Plugin::JSONAccessRanking({<\/div><div class=\"line\" id=\"LC12\">&nbsp;&nbsp;&nbsp;&nbsp;id =&gt; \'JSONAccessRanking\',<\/div><div class=\"line\" id=\"LC13\">&nbsp;&nbsp;&nbsp;&nbsp;key =&gt; \'jsonaccessranking\',<\/div><div class=\"line\" id=\"LC14\">&nbsp;&nbsp;&nbsp;&nbsp;name =&gt; \'JSONAccessRanking\',<\/div><div class=\"line\" id=\"LC15\">&nbsp;&nbsp;&nbsp;&nbsp;version =&gt; $VERSION,<\/div><div class=\"line\" id=\"LC16\">&nbsp;&nbsp;&nbsp;&nbsp;description =&gt; \'&lt;MT_TRANS phrase=&quot;as_DESCRIPTION&quot;&gt;\',<\/div><div class=\"line\" id=\"LC17\">&nbsp;&nbsp;&nbsp;&nbsp;doc_link =&gt; \'http://weblibrary.s224.xrea.com/mt4plugins/jsonaccessranking/\',<\/div><div class=\"line\" id=\"LC18\">&nbsp;&nbsp;&nbsp;&nbsp;author_name =&gt; \'&lt;MT_TRANS phrase=&quot;as_AUTHOR_NAME&quot;&gt;\',<\/div><div class=\"line\" id=\"LC19\">&nbsp;&nbsp;&nbsp;&nbsp;author_link =&gt; \'http://weblibrary.s224.xrea.com/\',<\/div><div class=\"line\" id=\"LC20\">&nbsp;&nbsp;&nbsp;&nbsp;l10n_class =&gt; \'JSONAccessRanking::L10N\',<\/div><div class=\"line\" id=\"LC21\">&nbsp;&nbsp;&nbsp;&nbsp;blog_config_template =&gt; \'analytics_config.tmpl\',<\/div><div class=\"line\" id=\"LC22\">&nbsp;&nbsp;&nbsp;&nbsp;settings =&gt; new MT::PluginSettings([<\/div><div class=\"line\" id=\"LC23\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ \'analytics_username\', { Default =&gt; undef, Scope =&gt; \'blog\' } ],<\/div><div class=\"line\" id=\"LC24\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ \'analytics_password\', { Default =&gt; undef, Scope =&gt; \'blog\' } ],<\/div><div class=\"line\" id=\"LC25\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ \'analytics_profile_id\', { Default =&gt; undef, Scope =&gt; \'blog\' } ],<\/div><div class=\"line\" id=\"LC26\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ \'analytics_maxresult\', { Default =&gt; undef, Scope =&gt; \'blog\' } ],<\/div><div class=\"line\" id=\"LC27\">&nbsp;&nbsp;&nbsp;&nbsp;]),<\/div><div class=\"line\" id=\"LC28\">&nbsp;&nbsp;&nbsp;&nbsp;registry =&gt; {<\/div><div class=\"line\" id=\"LC29\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tags =&gt; {<\/div><div class=\"line\" id=\"LC30\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function =&gt; {<\/div><div class=\"line\" id=\"LC31\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSONAccessRanking =&gt; \\&amp;_hdlr_analyticjson,<\/div><div class=\"line\" id=\"LC32\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<\/div><div class=\"line\" id=\"LC33\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<\/div><div class=\"line\" id=\"LC34\">&nbsp;&nbsp;&nbsp;&nbsp;},<\/div><div class=\"line\" id=\"LC35\">});<\/div><div class=\"line\" id=\"LC36\">MT-&gt;add_plugin($plugin);<\/div><div class=\"line\" id=\"LC37\">&nbsp;<\/div><div class=\"line\" id=\"LC38\">sub doLog {<\/div><div class=\"line\" id=\"LC39\">&nbsp;&nbsp;&nbsp;&nbsp;my ($msg) = @_; <\/div><div class=\"line\" id=\"LC40\">&nbsp;&nbsp;&nbsp;&nbsp;return unless defined($msg);<\/div><div class=\"line\" id=\"LC41\">&nbsp;<\/div><div class=\"line\" id=\"LC42\">&nbsp;&nbsp;&nbsp;&nbsp;use MT::Log;<\/div><div class=\"line\" id=\"LC43\">&nbsp;&nbsp;&nbsp;&nbsp;my $log = MT::Log-&gt;new;<\/div><div class=\"line\" id=\"LC44\">&nbsp;&nbsp;&nbsp;&nbsp;$log-&gt;message($msg) ;<\/div><div class=\"line\" id=\"LC45\">&nbsp;&nbsp;&nbsp;&nbsp;$log-&gt;save or die $log-&gt;errstr;<\/div><div class=\"line\" id=\"LC46\">}<\/div><div class=\"line\" id=\"LC47\">&nbsp;<\/div><div class=\"line\" id=\"LC48\">sub _hdlr_analyticjson {<\/div><div class=\"line\" id=\"LC49\">	my ($ctx, $args) = @_;<\/div><div class=\"line\" id=\"LC50\">	my $blog =  $ctx-&gt;stash(\'blog\');<\/div><div class=\"line\" id=\"LC51\">	my $blog_id =  $ctx-&gt;stash(\'blog_id\');<\/div><div class=\"line\" id=\"LC52\">	my $span = $args-&gt;{span};<\/div><div class=\"line\" id=\"LC53\">	my $user = $plugin-&gt;get_config_value(\'analytics_username\', &quot;blog:&quot; . $blog_id);<\/div><div class=\"line\" id=\"LC54\">	my $pass = $plugin-&gt;get_config_value(\'analytics_password\', &quot;blog:&quot; . $blog_id);<\/div><div class=\"line\" id=\"LC55\">	my $profileid = $plugin-&gt;get_config_value(\'analytics_profile_id\', &quot;blog:&quot; . $blog_id);<\/div><div class=\"line\" id=\"LC56\">	my $maxresult = $plugin-&gt;get_config_value(\'analytics_maxresult\', &quot;blog:&quot; . $blog_id);<\/div><div class=\"line\" id=\"LC57\">	my $token = &amp;get_token($user, $pass);<\/div><div class=\"line\" id=\"LC58\">&nbsp;<\/div><div class=\"line\" id=\"LC59\">	my $now = time;<\/div><div class=\"line\" id=\"LC60\">	my $today = start_end_day( epoch2ts( $blog, $now ) );<\/div><div class=\"line\" id=\"LC61\">	   $today = format_ts( \'%Y-%m-%d\', $today, $blog );<\/div><div class=\"line\" id=\"LC62\">	my $week_ago = start_end_day( epoch2ts( $blog, $now - ( 60 * 60 * 24 * 7 ) ) );<\/div><div class=\"line\" id=\"LC63\">	   $week_ago = format_ts( \'%Y-%m-%d\', $week_ago, $blog );<\/div><div class=\"line\" id=\"LC64\">	my $month_ago = start_end_day( epoch2ts( $blog, $now - ( 60 * 60 * 24 * 30 ) ) );<\/div><div class=\"line\" id=\"LC65\">	   $month_ago = format_ts( \'%Y-%m-%d\', $month_ago, $blog );<\/div><div class=\"line\" id=\"LC66\">	my $data;	<\/div><div class=\"line\" id=\"LC67\">	if ( $span eq \'month\' ){<\/div><div class=\"line\" id=\"LC68\">		$data = &amp;get_data($token, $profileid, $month_ago, $today, $maxresult);<\/div><div class=\"line\" id=\"LC69\">	} else { <\/div><div class=\"line\" id=\"LC70\">		$data = &amp;get_data($token, $profileid, $week_ago, $today, $maxresult);<\/div><div class=\"line\" id=\"LC71\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;	}<\/div><div class=\"line\" id=\"LC72\">	my $parser = XML::Simple-&gt;new(Forcearray =&gt; 1);<\/div><div class=\"line\" id=\"LC73\">	my $xml = $parser-&gt;XMLin($data);<\/div><div class=\"line\" id=\"LC74\">	my $json = to_json($xml-&gt;{entry});<\/div><div class=\"line\" id=\"LC75\">	return $json;<\/div><div class=\"line\" id=\"LC76\">}<\/div><div class=\"line\" id=\"LC77\">&nbsp;<\/div><div class=\"line\" id=\"LC78\">sub get_token{<\/div><div class=\"line\" id=\"LC79\">	my ($user, $pass) = @_;<\/div><div class=\"line\" id=\"LC80\">	my $ua = MT-&gt;new_ua({ agent =&gt; join(&quot;/&quot;, $plugin-&gt;name, $plugin-&gt;version) });<\/div><div class=\"line\" id=\"LC81\">	my $token_url = \'https://www.google.com/accounts/ClientLogin\';<\/div><div class=\"line\" id=\"LC82\">	my $tk_con = {<\/div><div class=\"line\" id=\"LC83\">		accountType =&gt; \'GOOGLE\',<\/div><div class=\"line\" id=\"LC84\">		Email =&gt; $user,<\/div><div class=\"line\" id=\"LC85\">		Passwd =&gt; $pass,<\/div><div class=\"line\" id=\"LC86\">		service =&gt; \'analytics\',<\/div><div class=\"line\" id=\"LC87\">		source =&gt; \'companyName-applicationName-versionID\',<\/div><div class=\"line\" id=\"LC88\">	};<\/div><div class=\"line\" id=\"LC89\">	my $res = $ua-&gt;post($token_url, Content =&gt; $tk_con);<\/div><div class=\"line\" id=\"LC90\">	if ($res-&gt;is_success) {<\/div><div class=\"line\" id=\"LC91\">		if ( $res-&gt;content =~ /Auth\\=(.+)/i ){<\/div><div class=\"line\" id=\"LC92\">			return $1;<\/div><div class=\"line\" id=\"LC93\">&nbsp;		}<\/div><div class=\"line\" id=\"LC94\">	} else {<\/div><div class=\"line\" id=\"LC95\">		MT-&gt;log({<\/div><div class=\"line\" id=\"LC96\">			message =&gt; $plugin-&gt;translate(\'Cannot get token, please confirm your settigs of Google Analytics login (as of login account or password).\'). $res-&gt;status_line,<\/div><div class=\"line\" id=\"LC97\">			class =&gt; \'system\',<\/div><div class=\"line\" id=\"LC98\">			level =&gt; MT::Log::ERROR(), <\/div><div class=\"line\" id=\"LC99\">		});<\/div><div class=\"line\" id=\"LC100\">		die $plugin-&gt;translate(\'Cannot get token, please confirm your settigs of Google Analytics login (as of login account or password).\'). $res-&gt;status_line;<\/div><div class=\"line\" id=\"LC101\">	}<\/div><div class=\"line\" id=\"LC102\">}<\/div><div class=\"line\" id=\"LC103\">&nbsp;<\/div><div class=\"line\" id=\"LC104\">sub get_data{<\/div><div class=\"line\" id=\"LC105\">	my ($token, $profileid, $start, $end, $maxresult) = @_;<\/div><div class=\"line\" id=\"LC106\">	my $ua = MT-&gt;new_ua({ agent =&gt; join(&quot;/&quot;, $plugin-&gt;name, $plugin-&gt;version) });<\/div><div class=\"line\" id=\"LC107\">	my $url = &quot;https://www.google.com/analytics/feeds/data?&quot;<\/div><div class=\"line\" id=\"LC108\">		.&quot;ids=ga%3A$profileid&amp;&quot;<\/div><div class=\"line\" id=\"LC109\">		.&quot;dimensions=ga%3ApagePath%2Cga%3ApageTitle&amp;&quot;<\/div><div class=\"line\" id=\"LC110\">		.&quot;metrics=ga%3AuniquePageviews&amp;&quot;<\/div><div class=\"line\" id=\"LC111\">		.&quot;sort=-ga%3AuniquePageviews&amp;&quot;<\/div><div class=\"line\" id=\"LC112\">		.&quot;start-date=$start&amp;&quot;<\/div><div class=\"line\" id=\"LC113\">		.&quot;end-date=$end&amp;&quot;<\/div><div class=\"line\" id=\"LC114\">		.&quot;max-results=$maxresult&quot;;<\/div><div class=\"line\" id=\"LC115\">	my @headers = (Authorization =&gt; &quot;GoogleLogin Auth=$token&quot;);<\/div><div class=\"line\" id=\"LC116\">	my $res = $ua-&gt;get($url, @headers);<\/div><div class=\"line\" id=\"LC117\">	if ($res-&gt;is_success) {<\/div><div class=\"line\" id=\"LC118\">		return $res-&gt;content;<\/div><div class=\"line\" id=\"LC119\">	} else {<\/div><div class=\"line\" id=\"LC120\">		MT-&gt;log({<\/div><div class=\"line\" id=\"LC121\">			message =&gt; $plugin-&gt;translate(\'Cannot get contents, please confirm your settigs of Google Analytics login (as of profileID).\'). $res-&gt;status_line,<\/div><div class=\"line\" id=\"LC122\">			class =&gt; \'system\',<\/div><div class=\"line\" id=\"LC123\">			level =&gt; MT::Log::ERROR(),<\/div><div class=\"line\" id=\"LC124\">		});<\/div><div class=\"line\" id=\"LC125\">		die $plugin-&gt;translate(\'Cannot get contents, please confirm your settigs of Google Analytics login (as of profileID).\'). $res-&gt;status_line;<\/div><div class=\"line\" id=\"LC126\">	}<\/div><div class=\"line\" id=\"LC127\">}<\/div><div class=\"line\" id=\"LC128\">&nbsp;<\/div><div class=\"line\" id=\"LC129\">1;<\/div><div class=\"line\" id=\"LC130\">&nbsp;<\/div><div class=\"line\" id=\"LC131\">&nbsp;<\/div><\/pre><\/div>\n        \n        <\/div>\n\n        <div class=\"gist-meta\">\n          <a href=\"http://gist.github.com/raw/192519/d5b28fb82b3106aef7eac276ff86cb6c3513fec5/JSONAccessRanking.pl\" style=\"float:right;\">view raw<\/a>\n          <a href=\"http://gist.github.com/192519#file_json_access_ranking.pl\" style=\"float:right;margin-right:10px;color:#666\">JSONAccessRanking.pl<\/a>\n          <a href=\"http://gist.github.com/192519\">This Gist<\/a> brought to you by <a href=\"http://github.com\">GitHub<\/a>.\n        <\/div>\n      <\/div>\n    \n  \n<\/div>\n')
