datacube.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import datetime
  4. import six
  5. from library.wechatpy.client.api.base import BaseWeChatAPI
  6. class WeChatDataCube(BaseWeChatAPI):
  7. API_BASE_URL = 'https://api.weixin.qq.com/datacube/'
  8. @classmethod
  9. def _to_date_str(cls, date):
  10. if isinstance(date, (datetime.datetime, datetime.date)):
  11. return date.strftime('%Y-%m-%d')
  12. elif isinstance(date, six.string_types):
  13. return date
  14. else:
  15. raise ValueError('Can not convert %s type to str', type(date))
  16. def get_user_summary(self, begin_date, end_date):
  17. """
  18. 获取用户增减数据
  19. 详情请参考
  20. http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html
  21. :param begin_date: 起始日期
  22. :param end_date: 结束日期
  23. :return: 统计数据列表
  24. """
  25. res = self._post(
  26. 'getusersummary',
  27. data={
  28. 'begin_date': self._to_date_str(begin_date),
  29. 'end_date': self._to_date_str(end_date)
  30. }
  31. )
  32. return res['list']
  33. def get_user_cumulate(self, begin_date, end_date):
  34. """
  35. 获取累计用户数据
  36. 详情请参考
  37. http://mp.weixin.qq.com/wiki/3/ecfed6e1a0a03b5f35e5efac98e864b7.html
  38. :param begin_date: 起始日期
  39. :param end_date: 结束日期
  40. :return: 统计数据列表
  41. """
  42. res = self._post(
  43. 'getusercumulate',
  44. data={
  45. 'begin_date': self._to_date_str(begin_date),
  46. 'end_date': self._to_date_str(end_date)
  47. },
  48. result_processor=lambda x: x['list']
  49. )
  50. return res
  51. def get_interface_summary(self, begin_date, end_date):
  52. """
  53. 获取接口分析数据
  54. 详情请参考
  55. http://mp.weixin.qq.com/wiki/8/30ed81ae38cf4f977194bf1a5db73668.html
  56. :param begin_date: 起始日期
  57. :param end_date: 结束日期
  58. :return: 统计数据列表
  59. """
  60. res = self._post(
  61. 'getinterfacesummary',
  62. data={
  63. 'begin_date': self._to_date_str(begin_date),
  64. 'end_date': self._to_date_str(end_date)
  65. },
  66. result_processor=lambda x: x['list']
  67. )
  68. return res
  69. def get_interface_summary_hour(self, begin_date, end_date):
  70. """
  71. 获取接口分析分时数据
  72. 详情请参考
  73. http://mp.weixin.qq.com/wiki/8/30ed81ae38cf4f977194bf1a5db73668.html
  74. :param begin_date: 起始日期
  75. :param end_date: 结束日期
  76. :return: 统计数据列表
  77. """
  78. res = self._post(
  79. 'getinterfacesummaryhour',
  80. data={
  81. 'begin_date': self._to_date_str(begin_date),
  82. 'end_date': self._to_date_str(end_date)
  83. },
  84. result_processor=lambda x: x['list']
  85. )
  86. return res
  87. def get_article_summary(self, begin_date, end_date):
  88. """
  89. 获取图文群发每日数据
  90. 详情请参考
  91. http://mp.weixin.qq.com/wiki/8/c0453610fb5131d1fcb17b4e87c82050.html
  92. :param begin_date: 起始日期
  93. :param end_date: 结束日期
  94. :return: 统计数据列表
  95. """
  96. res = self._post(
  97. 'getarticlesummary',
  98. data={
  99. 'begin_date': self._to_date_str(begin_date),
  100. 'end_date': self._to_date_str(end_date)
  101. },
  102. result_processor=lambda x: x['list']
  103. )
  104. return res
  105. def get_article_total(self, begin_date, end_date):
  106. """
  107. 获取图文群发总数据
  108. 详情请参考
  109. http://mp.weixin.qq.com/wiki/8/c0453610fb5131d1fcb17b4e87c82050.html
  110. :param begin_date: 起始日期
  111. :param end_date: 结束日期
  112. :return: 统计数据列表
  113. """
  114. res = self._post(
  115. 'getarticletotal',
  116. data={
  117. 'begin_date': self._to_date_str(begin_date),
  118. 'end_date': self._to_date_str(end_date)
  119. },
  120. result_processor=lambda x: x['list']
  121. )
  122. return res
  123. def get_user_read(self, begin_date, end_date):
  124. """
  125. 获取图文统计数据
  126. 详情请参考
  127. http://mp.weixin.qq.com/wiki/8/c0453610fb5131d1fcb17b4e87c82050.html
  128. :param begin_date: 起始日期
  129. :param end_date: 结束日期
  130. :return: 统计数据列表
  131. """
  132. res = self._post(
  133. 'getuserread',
  134. data={
  135. 'begin_date': self._to_date_str(begin_date),
  136. 'end_date': self._to_date_str(end_date)
  137. },
  138. result_processor=lambda x: x['list']
  139. )
  140. return res
  141. def get_user_read_hour(self, begin_date, end_date):
  142. """
  143. 获取图文分时统计数据
  144. 详情请参考
  145. http://mp.weixin.qq.com/wiki/8/c0453610fb5131d1fcb17b4e87c82050.html
  146. :param begin_date: 起始日期
  147. :param end_date: 结束日期
  148. :return: 统计数据列表
  149. """
  150. res = self._post(
  151. 'getuserreadhour',
  152. data={
  153. 'begin_date': self._to_date_str(begin_date),
  154. 'end_date': self._to_date_str(end_date)
  155. },
  156. result_processor=lambda x: x['list']
  157. )
  158. return res
  159. def get_user_share(self, begin_date, end_date):
  160. """
  161. 获取图文分享转发数据
  162. 详情请参考
  163. http://mp.weixin.qq.com/wiki/8/c0453610fb5131d1fcb17b4e87c82050.html
  164. :param begin_date: 起始日期
  165. :param end_date: 结束日期
  166. :return: 统计数据列表
  167. """
  168. res = self._post(
  169. 'getusershare',
  170. data={
  171. 'begin_date': self._to_date_str(begin_date),
  172. 'end_date': self._to_date_str(end_date)
  173. },
  174. result_processor=lambda x: x['list']
  175. )
  176. return res
  177. def get_user_share_hour(self, begin_date, end_date):
  178. """
  179. 获取图文分享转发分时数据
  180. 详情请参考
  181. http://mp.weixin.qq.com/wiki/8/c0453610fb5131d1fcb17b4e87c82050.html
  182. :param begin_date: 起始日期
  183. :param end_date: 结束日期
  184. :return: 统计数据列表
  185. """
  186. res = self._post(
  187. 'getusersharehour',
  188. data={
  189. 'begin_date': self._to_date_str(begin_date),
  190. 'end_date': self._to_date_str(end_date)
  191. },
  192. result_processor=lambda x: x['list']
  193. )
  194. return res
  195. def get_upstream_msg(self, begin_date, end_date):
  196. """
  197. 获取消息发送概况数据
  198. 详情请参考
  199. http://mp.weixin.qq.com/wiki/12/32d42ad542f2e4fc8a8aa60e1bce9838.html
  200. :param begin_date: 起始日期
  201. :param end_date: 结束日期
  202. :return: 统计数据列表
  203. """
  204. res = self._post(
  205. 'getupstreammsg',
  206. data={
  207. 'begin_date': self._to_date_str(begin_date),
  208. 'end_date': self._to_date_str(end_date)
  209. },
  210. result_processor=lambda x: x['list']
  211. )
  212. return res
  213. def get_upstream_msg_hour(self, begin_date, end_date):
  214. """
  215. 获取消息发送分时数据
  216. 详情请参考
  217. http://mp.weixin.qq.com/wiki/12/32d42ad542f2e4fc8a8aa60e1bce9838.html
  218. :param begin_date: 起始日期
  219. :param end_date: 结束日期
  220. :return: 统计数据列表
  221. """
  222. res = self._post(
  223. 'getupstreammsghour',
  224. data={
  225. 'begin_date': self._to_date_str(begin_date),
  226. 'end_date': self._to_date_str(end_date)
  227. },
  228. result_processor=lambda x: x['list']
  229. )
  230. return res
  231. def get_upstream_msg_week(self, begin_date, end_date):
  232. """
  233. 获取消息发送周数据
  234. 详情请参考
  235. http://mp.weixin.qq.com/wiki/12/32d42ad542f2e4fc8a8aa60e1bce9838.html
  236. :param begin_date: 起始日期
  237. :param end_date: 结束日期
  238. :return: 统计数据列表
  239. """
  240. res = self._post(
  241. 'getupstreammsgweek',
  242. data={
  243. 'begin_date': self._to_date_str(begin_date),
  244. 'end_date': self._to_date_str(end_date)
  245. },
  246. result_processor=lambda x: x['list']
  247. )
  248. return res
  249. def get_upstream_msg_month(self, begin_date, end_date):
  250. """
  251. 获取消息发送月数据
  252. 详情请参考
  253. http://mp.weixin.qq.com/wiki/12/32d42ad542f2e4fc8a8aa60e1bce9838.html
  254. :param begin_date: 起始日期
  255. :param end_date: 结束日期
  256. :return: 统计数据列表
  257. """
  258. res = self._post(
  259. 'getupstreammsgmonth',
  260. data={
  261. 'begin_date': self._to_date_str(begin_date),
  262. 'end_date': self._to_date_str(end_date)
  263. },
  264. result_processor=lambda x: x['list']
  265. )
  266. return res
  267. def get_upstream_msg_dist(self, begin_date, end_date):
  268. """
  269. 获取消息发送分布数据
  270. 详情请参考
  271. http://mp.weixin.qq.com/wiki/12/32d42ad542f2e4fc8a8aa60e1bce9838.html
  272. :param begin_date: 起始日期
  273. :param end_date: 结束日期
  274. :return: 统计数据列表
  275. """
  276. res = self._post(
  277. 'getupstreammsgdist',
  278. data={
  279. 'begin_date': self._to_date_str(begin_date),
  280. 'end_date': self._to_date_str(end_date)
  281. },
  282. result_processor=lambda x: x['list']
  283. )
  284. return res
  285. def get_upstream_msg_dist_week(self, begin_date, end_date):
  286. """
  287. 获取消息发送分布数据
  288. 详情请参考
  289. http://mp.weixin.qq.com/wiki/12/32d42ad542f2e4fc8a8aa60e1bce9838.html
  290. :param begin_date: 起始日期
  291. :param end_date: 结束日期
  292. :return: 统计数据列表
  293. """
  294. res = self._post(
  295. 'getupstreammsgdistweek',
  296. data={
  297. 'begin_date': self._to_date_str(begin_date),
  298. 'end_date': self._to_date_str(end_date)
  299. },
  300. result_processor=lambda x: x['list']
  301. )
  302. return res
  303. def get_upstream_msg_dist_month(self, begin_date, end_date):
  304. """
  305. 获取消息发送分布数据
  306. 详情请参考
  307. http://mp.weixin.qq.com/wiki/12/32d42ad542f2e4fc8a8aa60e1bce9838.html
  308. :param begin_date: 起始日期
  309. :param end_date: 结束日期
  310. :return: 统计数据列表
  311. """
  312. res = self._post(
  313. 'getupstreammsgdistmonth',
  314. data={
  315. 'begin_date': self._to_date_str(begin_date),
  316. 'end_date': self._to_date_str(end_date)
  317. },
  318. result_processor=lambda x: x['list']
  319. )
  320. return res