code: def add(self, media_type, media_file, title=None, introduction=None):
          
          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
              }
          )
docs: 新增其它类型永久素材
          详情请参考
          http://mp.weixin.qq.com/wiki/14/7e6c03263063f4813141c3e17dd4350a.html
  
          :param media_type: 媒体文件类型，分别有图片（image）、语音（voice）、视频（video）和缩略图（thumb）
          :param media_file: 要上传的文件，一个 File-object
          :param title: 视频素材标题，仅上传视频素材时需要
          :param introduction: 视频素材简介，仅上传视频素材时需要
          :return: 返回的 JSON 数据包