media.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from library.wechatpy.client.api.base import BaseWeChatAPI
  4. class WeChatMedia(BaseWeChatAPI):
  5. def upload(self, media_type, media_file):
  6. """
  7. 上传临时素材
  8. 详情请参考
  9. http://mp.weixin.qq.com/wiki/5/963fc70b80dc75483a271298a76a8d59.html
  10. :param media_type: 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
  11. :param media_file: 要上传的文件,一个 File-object
  12. :return: 返回的 JSON 数据包
  13. """
  14. return self._post(
  15. url='media/upload',
  16. params={
  17. 'type': media_type
  18. },
  19. files={
  20. 'media': media_file
  21. }
  22. )
  23. def download(self, media_id):
  24. """
  25. 获取临时素材
  26. 详情请参考
  27. http://mp.weixin.qq.com/wiki/10/78b15308b053286e2a66b33f0f0f5fb6.html
  28. :param media_id: 媒体文件 ID
  29. :return: requests 的 Response 实例
  30. """
  31. return self._get(
  32. 'media/get',
  33. params={
  34. 'media_id': media_id
  35. }
  36. )
  37. def get_url(self, media_id):
  38. """
  39. 获取临时素材下载地址
  40. :param media_id: 媒体文件 ID
  41. :return: 临时素材下载地址
  42. """
  43. parts = (
  44. 'https://api.weixin.qq.com/cgi-bin/media/get',
  45. '?access_token=',
  46. self.access_token,
  47. '&media_id=',
  48. media_id
  49. )
  50. return ''.join(parts)
  51. def upload_video(self, media_id, title, description):
  52. """
  53. 群发视频消息时获取视频 media_id
  54. 详情请参考
  55. http://mp.weixin.qq.com/wiki/15/5380a4e6f02f2ffdc7981a8ed7a40753.html
  56. :param media_id: 需通过基础支持中的上传下载多媒体文件 :func:`upload` 来得到
  57. :param title: 视频标题
  58. :param description: 视频描述
  59. :return: 返回的 JSON 数据包
  60. """
  61. return self._post(
  62. url='media/uploadvideo',
  63. data={
  64. 'media_id': media_id,
  65. 'title': title,
  66. 'description': description
  67. }
  68. )
  69. def upload_articles(self, articles):
  70. """
  71. 上传图文消息素材
  72. 详情请参考
  73. http://mp.weixin.qq.com/wiki/15/5380a4e6f02f2ffdc7981a8ed7a40753.html
  74. :param articles: 图文消息数组
  75. :return: 返回的 JSON 数据包
  76. """
  77. articles_data = []
  78. for article in articles:
  79. articles_data.append({
  80. 'thumb_media_id': article['thumb_media_id'],
  81. 'title': article['title'],
  82. 'content': article['content'],
  83. 'author': article.get('author', ''),
  84. 'content_source_url': article.get('content_source_url', ''),
  85. 'digest': article.get('digest', ''),
  86. 'show_cover_pic': article.get('show_cover_pic', 0)
  87. })
  88. return self._post(
  89. 'media/uploadnews',
  90. data={
  91. 'articles': articles_data
  92. }
  93. )
  94. def upload_image(self, media_file):
  95. """
  96. 上传群发消息内的图片
  97. 详情请参考
  98. http://mp.weixin.qq.com/wiki/15/5380a4e6f02f2ffdc7981a8ed7a40753.html
  99. :param media_file: 要上传的文件,一个 File-object
  100. :return: 上传成功时返回图片 URL
  101. """
  102. res = self._post(
  103. url='media/uploadimg',
  104. files={
  105. 'media': media_file
  106. },
  107. result_processor=lambda x: x['url']
  108. )
  109. return res
  110. upload_mass_image = upload_image