media.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import requests
  4. from wechatpy.client.api.base import BaseWeChatAPI
  5. class WeChatMedia(BaseWeChatAPI):
  6. """
  7. 素材管理
  8. https://work.weixin.qq.com/api/doc#90000/90135/91054
  9. """
  10. def upload(self, media_type, media_file):
  11. """
  12. 上传临时素材
  13. https://work.weixin.qq.com/api/doc#90000/90135/90253
  14. :param media_type: 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和普通文件(file)
  15. :param media_file: 要上传的文件,一个 File-object
  16. :return: 返回的 JSON 数据包
  17. """
  18. return self._post('media/upload', params={'type': media_type}, files={'media': media_file})
  19. def upload_img(self, image_file):
  20. """
  21. 上传永久图片
  22. https://work.weixin.qq.com/api/doc#90000/90135/90256
  23. 上传图片得到图片URL,该URL永久有效。
  24. 返回的图片URL,仅能用于图文消息(mpnews)正文中的图片展示;若用于非企业微信域名下的页面,图片将被屏蔽。
  25. 每个企业每天最多可上传100张图片。
  26. 图片文件大小应在 5B ~ 2MB 之间。
  27. :return: 返回的 JSON 数据包
  28. """
  29. return self._post('media/uploadimg', files={'media': image_file})
  30. def get_url(self, media_id):
  31. """
  32. 获取临时素材
  33. https://work.weixin.qq.com/api/doc#90000/90135/90254
  34. :param media_id: 媒体文件id
  35. :return: 临时素材下载地址
  36. """
  37. parts = (
  38. 'https://qyapi.weixin.qq.com/cgi-bin/media/get',
  39. '?access_token=',
  40. self.access_token,
  41. '&media_id=',
  42. media_id
  43. )
  44. return ''.join(parts)
  45. def get_jssdk_url(self, media_id):
  46. """
  47. 获取高清语音素材
  48. https://work.weixin.qq.com/api/doc#90000/90135/90255
  49. :param media_id: 通过JSSDK的uploadVoice接口上传的语音文件id
  50. :return: 高清语音素材下载地址
  51. """
  52. parts = (
  53. 'https://qyapi.weixin.qq.com/cgi-bin/media/get/jssdk',
  54. '?access_token=',
  55. self.access_token,
  56. '&media_id=',
  57. media_id
  58. )
  59. return ''.join(parts)
  60. def download(self, media_id):
  61. """
  62. 获取临时素材文件
  63. https://work.weixin.qq.com/api/doc#90000/90135/90254
  64. :param media_id: 媒体文件id
  65. :return: requests 的 Response 实例
  66. """
  67. return requests.get(self.get_url(media_id))