wechatpy.client.api.material 源代码

# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

from wechatpy.client.api.base import BaseWeChatAPI
from wechatpy.utils import json


[文档]class WeChatMaterial(BaseWeChatAPI):
[文档] def add_articles(self, articles): """ 新增永久图文素材 详情请参考 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Adding_Permanent_Assets.html :param articles: 图文素材数组 :type articles: list[dict] :return: 返回的 JSON 数据包 """ articles_data = [] for article in articles: articles_data.append({ 'thumb_media_id': article['thumb_media_id'], 'title': article['title'], 'content': article['content'], 'author': article.get('author', ''), 'content_source_url': article.get('content_source_url', ''), 'digest': article.get('digest', ''), 'show_cover_pic': article.get('show_cover_pic', 0), 'need_open_comment': int(article.get('need_open_comment', False)), 'only_fans_can_comment': int(article.get('only_fans_can_comment', False)), }) return self._post( 'material/add_news', data={ 'articles': articles_data } )
[文档] def add(self, media_type, media_file, title=None, introduction=None): """ 新增其它类型永久素材 详情请参考 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Adding_Permanent_Assets.html :param media_type: 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) :param media_file: 要上传的文件,一个 File-object :param title: 视频素材标题,仅上传视频素材时需要 :param introduction: 视频素材简介,仅上传视频素材时需要 :return: 返回的 JSON 数据包 """ params = { 'access_token': self.access_token, 'type': media_type } if media_type == 'video': assert title, 'Video title must be set' assert introduction, 'Video introduction must be set' description = { 'title': title, 'introduction': introduction } params['description'] = json.dumps(description) return self._post( 'material/add_material', params=params, files={ 'media': media_file } )
[文档] def get(self, media_id): """ 获取永久素材 详情请参考 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Getting_Permanent_Assets.html :param media_id: 素材的 media_id :return: 图文素材返回图文列表,其它类型为素材的内容 """ def _processor(res): if isinstance(res, dict): if 'news_item' in res: # 图文素材 return res['news_item'] return res return self._post( 'material/get_material', data={ 'media_id': media_id }, result_processor=_processor )
[文档] def delete(self, media_id): """ 删除永久素材 详情请参考 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Deleting_Permanent_Assets.html :param media_id: 素材的 media_id :return: 返回的 JSON 数据包 """ return self._post( 'material/del_material', data={ 'media_id': media_id } )
[文档] def update_article(self, media_id, index, article): """ 修改永久图文素材 详情请参考 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Editing_Permanent_Rich_Media_Assets.html :param media_id: 要修改的图文消息的 id :param index: 要更新的文章在图文消息中的位置(多图文消息时,此字段才有意义),第一篇为 0 :param article: 图文素材 :return: 返回的 JSON 数据包 """ article_data = { 'thumb_media_id': article['thumb_media_id'], 'title': article['title'], 'content': article['content'], 'author': article.get('author', ''), 'content_source_url': article.get('content_source_url', ''), 'digest': article.get('digest', ''), 'show_cover_pic': article.get('show_cover_pic', 0) } return self._post( 'material/update_news', data={ 'media_id': media_id, 'index': index, 'articles': article_data } )
[文档] def update_articles(self, media_id, index, articles): """ 修改永久图文素材 详情请参考 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Editing_Permanent_Rich_Media_Assets.html :param media_id: 要修改的图文消息的 id :param index: 要更新的文章在图文消息中的位置(多图文消息时,此字段才有意义),第一篇为 0 :param articles: 图文素材数组 :return: 返回的 JSON 数据包 """ return self.update_article(media_id, index, articles[index])
[文档] def batchget(self, media_type, offset=0, count=20): """ 获取素材列表 详情请参考 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_materials_list.html :param media_type: 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(news) :param offset: 从全部素材的该偏移位置开始返回,0 表示从第一个素材返回 :param count: 返回素材的数量,取值在1到20之间 :return: 返回的 JSON 数据包 """ return self._post( 'material/batchget_material', data={ 'type': media_type, 'offset': offset, 'count': count } )
[文档] def get_count(self): """ 获取素材总数 详情请参考 https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_the_total_of_all_materials.html :return: 返回的 JSON 数据包 """ return self._get('material/get_materialcount')
[文档] def open_comment(self, msg_data_id, index=1): """ 打开已群发文章评论 https://mp.weixin.qq.com/wiki?id=mp1494572718_WzHIY """ return self._post( 'comment/open', data={ 'msg_data_id': msg_data_id, 'index': index, })
[文档] def close_comment(self, msg_data_id, index=1): """ 关闭已群发文章评论 """ return self._post( 'comment/close', data={ 'msg_data_id': msg_data_id, 'index': index, })
[文档] def list_comment(self, msg_data_id, index=1, begin=0, count=50, type=0): """ 查看指定文章的评论数据 """ return self._post( 'comment/list', data={ 'msg_data_id': msg_data_id, 'index': index, 'begin': begin, 'count': count, 'type': type })
[文档] def markelect_comment(self, msg_data_id, index, user_comment_id): """ 将评论标记精选 """ return self._post( 'comment/markelect', data={ 'msg_data_id': msg_data_id, 'index': index, 'user_comment_id': user_comment_id, })
[文档] def unmarkelect_comment(self, msg_data_id, index, user_comment_id): """ 将评论取消精选 """ return self._post( 'comment/unmarkelect', data={ 'msg_data_id': msg_data_id, 'index': index, 'user_comment_id': user_comment_id, })
[文档] def delete_comment(self, msg_data_id, index, user_comment_id): """ 删除评论 """ return self._post( 'comment/delete', data={ 'msg_data_id': msg_data_id, 'index': index, 'user_comment_id': user_comment_id, })
[文档] def add_reply_comment(self, msg_data_id, index, user_comment_id, content): """ 回复评论 """ return self._post( 'comment/reply/add', data={ 'msg_data_id': msg_data_id, 'index': index, 'user_comment_id': user_comment_id, 'content': content })
[文档] def delete_reply_comment(self, msg_data_id, index, user_comment_id): """ 删除回复 """ return self._post( 'comment/reply/delete', data={ 'msg_data_id': msg_data_id, 'index': index, 'user_comment_id': user_comment_id, })