365体育备用网址报道8.2.1渠道来源统计_365体育备用网址官网资讯

我们需要预先生成多个不同参数的二维码,把各个二维码投放到不同的场地,引导用户扫描关切后,后台就能够统计出该地点的用户关切数、关切时间等信息。
以下代码批量生成了8个二维码,并将其保留在本地。

 1 PHP" style="box-sizing: inherit; margin: 0px; padding: 0px;"><?php
 2 $appid = "wx3f88af80a4c0a09d";
 3 $appsecret = "123";
 4 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
 5 
 6 $output = http_request($url);
 7 $jsoninfo = json_decode($output, true);
 8 $access_token = $jsoninfo["access_token"];
 9 
10 //永久二维码
11 for ($i = 1; $i<= 8; $i++) {
12     $scene_id = $i;
13     $qrcode = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
14 
15     $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$access_token";
16     $result = http_request($url, $qrcode);
17     $jsoninfo = json_decode($result, true);
18     $ticket = $jsoninfo["ticket"];
19     $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($ticket);
20     $imageInfo = downloadWeixinFile($url);
21 
22     $filename = "qrcode".$scene_id.".jpg";
23     $local_file = fopen($filename, 'w');
24     fwrite($local_file, $imageInfo["body"]);
25     fclose($local_file);
26 }
27 
28 //http要求
29 function http_request($url, $data = null)
30 {
31     $curl = curl_init();
32     curl_setopt($curl, CURLOPT_URL, $url);
33     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
34     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
35     if (!empty($data)){
36         curl_setopt($curl, CURLOPT_POST, 1);
37         curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
38     }
39     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
40     $output = curl_exec($curl);
41     curl_close($curl);
42     return $output;
43 }
44 
45 //下载文件
46 function downloadWeixinFile($url)
47 {
48     $ch = curl_init($url);
49     curl_setopt($ch, CURLOPT_HEADER, 0);    
50     curl_setopt($ch, CURLOPT_NOBODY, 0);    //只取body头
51     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
52     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
53     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
54     $package = curl_exec($ch);
55     $httpinfo = curl_getinfo($ch);
56     curl_close($ch);
57     $imageAll = array_merge(array('body' =>$package), array('header' =>$httpinfo)); 
58     return $imageAll;
59 }

生成二维码后,如图8-3所示:

图8-3 8个永久场景二维码
将8个场景二维码放到8个不同的投放地,并且引导用户关切,这样才能获得用户关切的相关数据。
另外再设计一个表,用于存储统计记载,SQL脚本如下所示:

DROP TABLE IF EXISTS `qrcode`;
CREATE TABLE IF NOT EXISTS `qrcode` (
  `id` int(16) NOTNULL auto_increment,
  `scene` varchar(2) NOTNULL COMMENT '场景',
  `year` varchar(4) NOTNULL COMMENT '年',
  `month` varchar(2) NOTNULL COMMENT '月',
  `day` varchar(2) NOTNULL COMMENT '日',
   PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

上述脚本定义了5个字段,用于存储用户关切时的场景id,以及关切时的年、月、日。另外定义主键id。
定义数据库配置文件如下:

if (isset($_SERVER['HTTP_APPNAME'])){//SAE
    define("MYSQLHOST", SAE_MYSQL_HOST_M);
    define("MYSQLPORT", SAE_MYSQL_PORT);
    define("MYSQLUSER", SAE_MYSQL_USER);
    define("MYSQLPASSWORD", SAE_MYSQL_PASS);
    define("MYSQLDATABASE", SAE_MYSQL_DB);  //
}else{
    define("MYSQLHOST", "localhost");
    define("MYSQLPORT", "3306");
    define("MYSQLUSER", "root");
    define("MYSQLPASSWORD", "root");
    define("MYSQLDATABASE", "weixin");  //
}

定义mysql类如下:

class class_mysql
{
    function __construct(){
        $host = MYSQLHOST;
        $port = MYSQLPORT;
        $user = MYSQLUSER;
        $pwd=  MYSQLPASSWORD;
        $dbname = MYSQLDATABASE;

        $link = @mysql_connect("{$host}:{$port}", $user, $pwd, true);
        mysql_select_db($dbname, $link);
        return $link;
    }

    //返回数组
    function query_array($sql){
        $result = mysql_query($sql);
        if(!$result) return false;
        $arr = array();
        while ($row = mysql_fetch_assoc($result)){
            $arr[] = $row;
        }
        return $arr;
    }

    //只执行
    function query($sql){
        if (!($query = mysql_query($sql))){
            return false;
        }
        return $query;
    }
}

当用户关切二维码的时刻,后台依据关切事情消息,将该二维码的值写入到数据库中。事情响应部分代码如下所示:

 1 private function receiveEvent($object)
 2 {
 3     $content = "";
 4     switch ($object->Event)
 5     {
 6         case "subscribe":
 7             $content = "欢迎关切方倍工作室";
 8             if (isset($object->EventKey)){
 9                 $sceneid = str_replace("qrscene_","",$object->EventKey);
10                 require_once('mysql.php');
11                 $db = new class_mysql();
12                 $sql = "INSERT INTO `qrcode` (`id`, `scene`, `year`, `month`, `day`) VALUES (NULL, '".$sceneid."', '".date("Y")."', '".date("m")."', '".date("d")."')";
13                 $db->query($sql);
14             }
15             break;
16         case "unsubscribe":
17             $content = "取消关切";
18             break;
19         case "SCAN":
20             $content = "扫描场景 ".$object->EventKey;
21             break;
22         default:
23             break;
24     }
25     if (is_array($content)){
26         $result = $this->transmitNews($object, $content);
27     }else{
28         $result = $this->transmitText($object, $content);
29     }
30     return $result;
31 }

这样,后台就能统计到用户关切的数据了。
Mysql中最终存储的数据如图8-4所示。

图8-4关切统计数据
我们使用SQL语句来猎取统计数据。
比如统计2014年3月各场景关切情况的SQL查询脚本如下所示。

SELECTCOUNT( scene ) , scene
FROM `qrcode` 
WHEREYEAR='2014'
ANDMONTH='03'
GROUPBY scene

猎取到的结果数据如图8-5所示:

图8-5各场景统计数据
我们使用JpGraph来生成图统计图。
JpGraph是PHP下的一个面向对象的图表创建库,你只需从数据库中取出相关数据,定义标题,图表类型,就能轻松画出折线图、柱形图、饼状图等图表。官方网站为http://jpgraph.net/ 。可下载其使用手册了解使用方法。
下面代码使用了3月份的场景统计数据创建了一个柱状统计图。

 1require_once ('jpgraph/jpgraph.php');
 2require_once ('jpgraph/jpgraph_bar.php');
 3require_once ('jpgraph/jpgraph_line.php');
 4
 5// 数据
 6$data_follow = array(140,110,77,104,29,161,13,195);
 7
 8// 构造对象
 9$graph = new Graph(320,440);   //屏幕分辨率
10
11// 基本参数
12$graph->SetScale("textlin");    //线性标尺
13$graph->SetY2Scale('lin',0,100);   //对数
14$graph->Set90AndMargin(50,0,65,0); //旋转90度
15$graph->yaxis->SetTitleMargin(25);
16
17// 标题与字体
18$graph->title->Set("Scene Analysis");
19$graph->title->SetFont(FF_FONT1,FS_BOLD);
20$graph->xaxis->title->Set("Sce");
21$graph->yaxis->title->Set("Num");
22$graph->y2axis->SetColor('black','blue');
23$graph->y2axis->SetLabelFormat('%2d');
24
25// 生成柱状图
26$bplot = newBarPlot($data_follow);
27$bplot->SetFillColor("orange@0.2");
28$bplot->SetValuePos('center');
29$bplot->value->SetFormat("%d");
30$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9);
31$bplot->value->Show();
32
33// 柱状图叠到图形中
34$graph->Add($bplot);
35
36// 生成图形
37return $graph->Stroke();

其运行结果在微信中显示如图8-6所示。

图8-6 3月份各场景统计柱状图

------分隔线----------------------------

公布评论 (128人察看0条评论)
请自觉遵守互联网相关的政策法规,严禁公布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换必胜博娱乐平台
最新评论