wechat_sdk/ext.py
def add_news(self, news):
        """
        在素材库中创建图文消息

        :param news: list 对象, 其中的每个元素为一个 dict 对象, 代表一条图文, key 值分别为 ``title``, ``author``, ``summary``,
                     ``content``, ``picture_id``, ``from_url``, 对应内容为标题, 作者, 摘要, 内容, 素材库里的
                     图片ID(可通过 ``upload_file`` 函数上传获取), 来源链接。

                     其中必须提供的 key 值为 ``title`` 和 ``content``

                     示例::

                         [
                             {
                                 'title': '图文标题',
                                 'author': '图文作者',
                                 'summary': '图文摘要',
                                 'content': '图文内容',
                                 'picture_id': '23412341',
                                 'from_url': 'http://www.baidu.com',
                             },
                             {
                                 'title': '最少图文标题',
                                 'content': '图文内容',
                             }
                         ]
        :raises ValueError: 参数提供错误时抛出
        :raises NeedLoginError: 操作未执行成功, 需要再次尝试登录, 异常内容为服务器返回的错误数据
        """
        if not news:
            raise ValueError('The news cannot be empty')
        for item in news:
            if 'title' not in item or 'content' not in item:
                raise ValueError('The news item needs to provide at least two arguments: title, content')

        url = 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?lang=zh_CN&t=ajax-response&sub=create&token={token}'.format(
            token=self.__token,
        )
        payload = {
            'token': self.__token,
            'type': 10,
            'lang': 'zh_CN',
            'sub': 'create',
            'ajax': 1,
            'AppMsgId': '',
            'error': 'false',
        }
        headers = {
            'referer': 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?lang=zh_CN&sub=edit&t=wxm-appmsgs-edit-new&type=10&subtype=3&token={token}'.format(
                token=self.__token
            ),
            'cookie': self.__cookies,
        }
        i = 0
        for item in news:
            payload['title'+str(i)] = item.get('title')
            payload['author'+str(i)] = item.get('author')
            payload['digest'+str(i)] = item.get('summary')
            payload['content'+str(i)] = item.get('content')
            payload['fileid'+str(i)] = item.get('picture_id')
            payload['sourceurl'+str(i)] = item.get('from_url')
            i += 1
        payload['count'] = i
        r = requests.post(url, data=payload, headers=headers)

        try:
            message = json.loads(r.text)
        except ValueError:
            raise NeedLoginError(r.text)
        try:
            if message['ret'] != '0':
                raise ValueError(r.text)
        except KeyError:
            raise NeedLoginError(r.text)
def add_news(self, news):
        """
        在素材库中创建图文消息

        :param news: list 对象, 其中的每个元素为一个 dict 对象, 代表一条图文, key 值分别为 ``title``, ``author``, ``summary``,
                     ``content``, ``picture_id``, ``from_url``, 对应内容为标题, 作者, 摘要, 内容, 素材库里的
                     图片ID(可通过 ``upload_file`` 函数上传获取), 来源链接。

                     其中必须提供的 key 值为 ``title`` 和 ``content``

                     示例::

                         [
                             {
                                 'title': '图文标题',
                                 'author': '图文作者',
                                 'summary': '图文摘要',
                                 'content': '图文内容',
                                 'picture_id': '23412341',
                                 'from_url': 'http://www.baidu.com',
                             },
                             {
                                 'title': '最少图文标题',
                                 'content': '图文内容',
                             }
                         ]
        :raises ValueError: 参数提供错误时抛出
        :raises NeedLoginError: 操作未执行成功, 需要再次尝试登录, 异常内容为服务器返回的错误数据
        """
        if not news:
            raise ValueError('The news cannot be empty')
        for item in news:
            if 'title' not in item or 'content' not in item:
                raise ValueError('The news item needs to provide at least two arguments: title, content')

        url = 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?lang=zh_CN&t=ajax-response&sub=create&token={token}'.format(
            token=self.__token,
        )
        payload = {
            'token': self.__token,
            'type': 10,
            'lang': 'zh_CN',
            'sub': 'create',
            'ajax': 1,
            'AppMsgId': '',
            'error': 'false',
        }
        headers = {
            'referer': 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?lang=zh_CN&sub=edit&t=wxm-appmsgs-edit-new&type=10&subtype=3&token={token}'.format(
                token=self.__token
            ),
            'cookie': self.__cookies,
        }
        i = 0
        for item in news:
            payload['title'+str(i)] = item.get('title')
            payload['author'+str(i)] = item.get('author')
            payload['digest'+str(i)] = item.get('summary')
            payload['content'+str(i)] = item.get('content')
            payload['fileid'+str(i)] = item.get('picture_id')
            payload['sourceurl'+str(i)] = item.get('from_url')
            i += 1
        payload['count'] = i
        r = requests.post(url, data=payload, headers=headers)

        try:
            message = json.loads(r.text)
        except ValueError:
            raise NeedLoginError(r.text)
        try:
            if message['ret'] != '0':
                raise ValueError(r.text)
        except KeyError:
            raise NeedLoginError(r.text)
在素材库中创建图文消息

        :param news: list 对象, 其中的每个元素为一个 dict 对象, 代表一条图文, key 值分别为 ``title``, ``author``, ``summary``,
                     ``content``, ``picture_id``, ``from_url``, 对应内容为标题, 作者, 摘要, 内容, 素材库里的
                     图片ID(可通过 ``upload_file`` 函数上传获取), 来源链接。

                     其中必须提供的 key 值为 ``title`` 和 ``content``

                     示例::

                         [
                             {
                                 'title': '图文标题',
                                 'author': '图文作者',
                                 'summary': '图文摘要',
                                 'content': '图文内容',
                                 'picture_id': '23412341',
                                 'from_url': 'http://www.baidu.com',
                             },
                             {
                                 'title': '最少图文标题',
                                 'content': '图文内容',
                             }
                         ]
        :raises ValueError: 参数提供错误时抛出
        :raises NeedLoginError: 操作未执行成功, 需要再次尝试登录, 异常内容为服务器返回的错误数据