Class: EricWeixin::Report::MsgData

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/eric_weixin/report/msg_data.rb

Constant Summary collapse

MSG_DATA_TYPE =
['summary', 'msg_hour', 'msg_week', 'msg_month', 'msg_dist', 'msg_dist_week', 'msg_dist_month']
MSG_TYPE =
{
    1 => '代表文字',
    2 => '代表图片',
    3 => '代表语音',
    4 => '代表视频',
    6 => '代表第三方应用消息(链接消息)'
}
INTERVAL =
{
    0 => '0',
    1 => '1-5',
    2 => '6-10',
    3 => '10次以上'
}

Class Method Summary collapse

Class Method Details

.auto_execute_get_and_save_data_from_weixin(weixin_public_account_id) ⇒ Object

自动去微信服务器拉取当日之前的统计模块的消息数据.

参数说明

  • weixin_public_account_id # 微信公众号ID

调用实例

::EricWeixin::Report::MsgData.auto_execute_get_and_save_data_from_weixin 1



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/models/eric_weixin/report/msg_data.rb', line 27

def self.auto_execute_get_and_save_data_from_weixin 
  self.transaction do
    # 若当前是周一,则取上周 整周 的数据
    if Time.now.to_date.cwday == 1
      s = (Time.now - 7.day).to_date.to_s
      get_and_save_upstream_msg_week s, s, 
      get_and_save_upstream_msg_dist_week s, s, 
    end
    # 获取昨天的数据
    d = (Time.now - 1.day).to_date.to_s
    get_and_save_upstream_msg d, d, 
    get_and_save_upstream_msg_hour d, d, 
    get_and_save_upstream_msg_dist d, d, 

    # 若当前是月初第一天,则取上个月的数据
    if Time.now.day == 1
      s = Time.now.last_month.beginning_of_month.to_date.to_s
      get_and_save_upstream_msg_month s, s, 
      get_and_save_upstream_msg_dist_month s, s, 
    end
  end
end

.create_msg_data(options) ⇒ Object

创建一个微信消息数据msg_data.

参数说明

  • user_source # 数据来源

  • ref_date # 数据的日期

  • ref_hour # 数据的小时,包括从000到2300,分别代表的是[000,100)到[2300,2400),即每日的第1小时和最后1小时

  • msg_type # 消息类型,代表含义如下:1代表文字 2代表图片 3代表语音 4代表视频 6代表第三方应用消息(链接消息)

  • msg_user # 上行发送了(向公众号发送了)消息的用户数

  • msg_count # 上行发送了消息的消息总数

  • count_interval # 当日发送消息量分布的区间,0代表 “0”,1代表“1-5”,2代表“6-10”,3代表“10次以上”

  • int_page_read_count # 图文页的阅读次数

  • ori_page_read_user # 原文页(点击图文页“阅读原文”进入的页面)的阅读人数,无原文页时此处数据为0

  • weixin_public_account_id # 公众号ID

  • msg_data_type # 数据类型,包括summary、msg_hour、msg_week、msg_month、msg_dist、msg_dist_week、msg_dist_month

调用实例

options = {ref_date: ‘2015-6-6’, ref_hour: 0, weixin_public_account_id: 1, msg_data_type: ‘summary’ … } ::EricWeixin::Report::MsgData.create_msg_data options



66
67
68
69
70
71
72
73
74
75
# File 'app/models/eric_weixin/report/msg_data.rb', line 66

def self.create_msg_data options
  self.transaction do
    options = get_arguments_options options, [:user_source, :ref_date, :ref_hour, :msg_type, :msg_user, :msg_count, :count_interval,
                                              :int_page_read_count, :ori_page_read_user, :weixin_public_account_id, :msg_data_type ]
    msg_data = self.new options
    msg_data.save!
    msg_data.reload
    msg_data
  end
end

.exist(options) ⇒ Object

通过参数确定是否存在这样一个微信消息数据msg_data.

参数说明

  • user_source # 数据来源

  • ref_date # 数据的日期

  • ref_hour # 数据的小时,包括从000到2300,分别代表的是[000,100)到[2300,2400),即每日的第1小时和最后1小时

  • msg_type # 消息类型,代表含义如下:1代表文字 2代表图片 3代表语音 4代表视频 6代表第三方应用消息(链接消息)

  • msg_user # 上行发送了(向公众号发送了)消息的用户数

  • msg_count # 上行发送了消息的消息总数

  • count_interval # 当日发送消息量分布的区间,0代表 “0”,1代表“1-5”,2代表“6-10”,3代表“10次以上”

  • int_page_read_count # 图文页的阅读次数

  • ori_page_read_user # 原文页(点击图文页“阅读原文”进入的页面)的阅读人数,无原文页时此处数据为0

  • weixin_public_account_id # 公众号ID

  • msg_data_type # 数据类型,包括summary、msg_hour、msg_week、msg_month、msg_dist、msg_dist_week、msg_dist_month

调用实例

options = {ref_date: ‘2015-6-6’, ref_hour: 0, weixin_public_account_id: 1, msg_data_type: ‘summary’ … } ::EricWeixin::Report::MsgData.exist options

返回

true 代表存在 false 代表不存在



96
97
98
99
100
# File 'app/models/eric_weixin/report/msg_data.rb', line 96

def self.exist options
  options = get_arguments_options options, [:user_source, :ref_date, :ref_hour, :msg_type, :msg_user, :msg_count, :count_interval,
                                            :int_page_read_count, :ori_page_read_user, :weixin_public_account_id, :msg_data_type ]
  self.where( options ).count >= 1
end

.get_and_save_upstream_msg(begin_date, end_date, weixin_public_account_id) ⇒ Object

获得公众平台官网数据统计模块中消息发送概况数据&保存到数据库.

参数说明

  • begin_date # 获取数据的起始日期,begin_date和end_date的差值需小于7

  • end_date # 获取数据的结束日期,end_date允许设置的最大值为昨日

  • weixin_public_account_id # 公众号ID

调用实例

::EricWeixin::Report::MsgData.get_and_save_upstream_msg ‘2015-6-1’, ‘2015-6-7’, 1



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'app/models/eric_weixin/report/msg_data.rb', line 109

def self.get_and_save_upstream_msg begin_date, end_date, 
  self.transaction do
    options = {
        :begin_date => begin_date,
        :end_date => end_date,
        :weixin_public_account_id => 
    }

    # 获取消息发送概况数据(getupstreammsg)
    # get_upstream_msg
    upstream_msg = ::EricWeixin::AnalyzeData.get_upstream_msg options
    pp "############################ upstream_msg ####################################"
    pp upstream_msg
    list_summary = upstream_msg["list"]
    list_summary.each do |s|
      s = s.merge(msg_data_type: 'summary').merge(weixin_public_account_id: )
      self.create_msg_data s unless self.exist s
    end unless list_summary.blank?
  end
end

.get_and_save_upstream_msg_dist(begin_date, end_date, weixin_public_account_id) ⇒ Object

获得公众平台官网数据统计模块中消息发送分布数据&保存到数据库.

参数说明

  • begin_date # 获取数据的起始日期,begin_date和end_date的差值需小于15

  • end_date # 获取数据的结束日期,end_date允许设置的最大值为昨日

  • weixin_public_account_id # 公众号ID

调用实例

::EricWeixin::Report::MsgData.get_and_save_upstream_msg_dist ‘2015-5-1’, ‘2015-5-15’, 1



218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'app/models/eric_weixin/report/msg_data.rb', line 218

def self.get_and_save_upstream_msg_dist begin_date, end_date, 
  self.transaction do
    options = {
        :begin_date => begin_date,
        :end_date => end_date,
        :weixin_public_account_id => 
    }
    # 获取消息发送分布数据(getupstreammsgdist)
    # get_upstream_msg_dist
    upstream_msg_dist = ::EricWeixin::AnalyzeData.get_upstream_msg_dist options
    pp "############################ upstream_msg_dist ####################################"
    pp upstream_msg_dist
    list_msg_dist = upstream_msg_dist["list"]
    list_msg_dist.each do |s|
      s = s.merge(msg_data_type: 'msg_dist').merge(weixin_public_account_id: )
      self.create_msg_data s unless self.exist s
    end unless list_msg_dist.blank?
  end
end

.get_and_save_upstream_msg_dist_month(begin_date, end_date, weixin_public_account_id) ⇒ Object

获得公众平台官网数据统计模块中消息发送分布月数据&保存到数据库.

参数说明

  • begin_date # 获取数据的起始日期,begin_date和end_date的差值需小于30

  • end_date # 获取数据的结束日期,end_date允许设置的最大值为昨日

  • weixin_public_account_id # 公众号ID

调用实例

::EricWeixin::Report::MsgData.get_and_save_upstream_msg_dist_month ‘2015-5-1’, ‘2015-5-30’, 1



272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
# File 'app/models/eric_weixin/report/msg_data.rb', line 272

def self.get_and_save_upstream_msg_dist_month begin_date, end_date, 
  self.transaction do
    options = {
        :begin_date => begin_date,
        :end_date => end_date,
        :weixin_public_account_id => 
    }
    # 获取消息发送分布月数据(getupstreammsgdistmonth)
    # get_upstream_msg_dist_month
    upstream_msg_dist_month = ::EricWeixin::AnalyzeData.get_upstream_msg_dist_month options
    pp "############################ upstream_msg_dist_month ####################################"
    pp upstream_msg_dist_month
    list_msg_dist_month = upstream_msg_dist_month["list"]
    list_msg_dist_month.each do |s|
      s = s.merge(msg_data_type: 'msg_dist_month').merge(weixin_public_account_id: )
      self.create_msg_data s unless self.exist s
    end unless list_msg_dist_month.blank?
  end
end

.get_and_save_upstream_msg_dist_week(begin_date, end_date, weixin_public_account_id) ⇒ Object

获得公众平台官网数据统计模块中消息发送分布周数据&保存到数据库.

参数说明

  • begin_date # 获取数据的起始日期,begin_date和end_date的差值需小于30

  • end_date # 获取数据的结束日期,end_date允许设置的最大值为昨日

  • weixin_public_account_id # 公众号ID

调用实例

::EricWeixin::Report::MsgData.get_and_save_upstream_msg_dist_week ‘2015-5-1’, ‘2015-5-30’, 1



245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
# File 'app/models/eric_weixin/report/msg_data.rb', line 245

def self.get_and_save_upstream_msg_dist_week begin_date, end_date, 
  self.transaction do
    options = {
        :begin_date => begin_date,
        :end_date => end_date,
        :weixin_public_account_id => 
    }
    # 获取消息发送分布周数据(getupstreammsgdistweek)
    # get_upstream_msg_dist_week
    upstream_msg_dist_week = ::EricWeixin::AnalyzeData.get_upstream_msg_dist_week options
    pp "############################ upstream_msg_dist_week ####################################"
    pp upstream_msg_dist_week
    list_msg_dist_week = upstream_msg_dist_week["list"]
    list_msg_dist_week.each do |s|
      s = s.merge(msg_data_type: 'msg_dist_week').merge(weixin_public_account_id: )
      self.create_msg_data s unless self.exist s
    end unless list_msg_dist_week.blank?
  end
end

.get_and_save_upstream_msg_hour(begin_date, end_date, weixin_public_account_id) ⇒ Object

获得公众平台官网数据统计模块中消息分送分时数据&保存到数据库.

参数说明

  • begin_date # 获取数据的起始日期,begin_date和end_date的差值需小于1

  • end_date # 获取数据的结束日期,end_date允许设置的最大值为昨日

  • weixin_public_account_id # 公众号ID

调用实例

::EricWeixin::Report::MsgData.get_and_save_upstream_msg_hour ‘2015-6-1’, ‘2015-6-1’, 1



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'app/models/eric_weixin/report/msg_data.rb', line 137

def self.get_and_save_upstream_msg_hour begin_date, end_date, 
  self.transaction do
    options = {
        :begin_date => begin_date,
        :end_date => end_date,
        :weixin_public_account_id => 
    }
    # 获取消息分送分时数据(getupstreammsghour)
    # get_upstream_msg_hour
    upstream_msg_hour = ::EricWeixin::AnalyzeData.get_upstream_msg_hour options
    pp "############################ upstream_msg_hour ####################################"
    pp upstream_msg_hour
    list_msg_hour = upstream_msg_hour["list"]
    list_msg_hour.each do |s|
      s = s.merge(msg_data_type: 'msg_hour').merge(weixin_public_account_id: )
      self.create_msg_data s unless self.exist s
    end unless list_msg_hour.blank?
  end
end

.get_and_save_upstream_msg_month(begin_date, end_date, weixin_public_account_id) ⇒ Object

获得公众平台官网数据统计模块中消息发送月数据&保存到数据库.

参数说明

  • begin_date # 获取数据的起始日期,begin_date和end_date的差值需小于30

  • end_date # 获取数据的结束日期,end_date允许设置的最大值为昨日

  • weixin_public_account_id # 公众号ID

调用实例

::EricWeixin::Report::MsgData.get_and_save_upstream_msg_month ‘2015-5-1’, ‘2015-5-30’, 1



191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'app/models/eric_weixin/report/msg_data.rb', line 191

def self.get_and_save_upstream_msg_month begin_date, end_date, 
  self.transaction do
    options = {
        :begin_date => begin_date,
        :end_date => end_date,
        :weixin_public_account_id => 
    }
    # 获取消息发送月数据(getupstreammsgmonth)
    # get_upstream_msg_month
    upstream_msg_month = ::EricWeixin::AnalyzeData.get_upstream_msg_month options
    pp "############################ upstream_msg_month ####################################"
    pp upstream_msg_month
    list_msg_month = upstream_msg_month["list"]
    list_msg_month.each do |s|
      s = s.merge(msg_data_type: 'msg_month').merge(weixin_public_account_id: )
      self.create_msg_data s unless self.exist s
    end unless list_msg_month.blank?
  end
end

.get_and_save_upstream_msg_week(begin_date, end_date, weixin_public_account_id) ⇒ Object

获得公众平台官网数据统计模块中消息发送周数据&保存到数据库.

参数说明

  • begin_date # 获取数据的起始日期,begin_date和end_date的差值需小于30

  • end_date # 获取数据的结束日期,end_date允许设置的最大值为昨日

  • weixin_public_account_id # 公众号ID

调用实例

::EricWeixin::Report::MsgData.get_and_save_upstream_msg_week ‘2015-5-1’, ‘2015-5-30’, 1



164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'app/models/eric_weixin/report/msg_data.rb', line 164

def self.get_and_save_upstream_msg_week begin_date, end_date, 
  self.transaction do
    options = {
        :begin_date => begin_date,
        :end_date => end_date,
        :weixin_public_account_id => 
    }
    # 获取消息发送周数据(getupstreammsgweek)
    # get_upstream_msg_week
    upstream_msg_week = ::EricWeixin::AnalyzeData.get_upstream_msg_week options
    pp "############################ upstream_msg_week ####################################"
    pp upstream_msg_week
    list_msg_week = upstream_msg_week["list"]
    list_msg_week.each do |s|
      s = s.merge(msg_data_type: 'msg_week').merge(weixin_public_account_id: )
      self.create_msg_data s unless self.exist s
    end unless list_msg_week.blank?
  end
end