首先确认是否有相应的接口权限,这里主要用到获取素材相关的接口,可以看到对应接口文档,个人号还是有对应权限的。
在新增了永久素材后,开发者可以分类型获取永久素材的列表:
1、获取永久素材的列表,也包含租厅迹公众号在公众平台官网素材管理模块中新建的图文消息、语音、视伏芹频等素材 。
2、临时素材无法通过本接口获取。
3、调用该接口需https协议。
实现的逻辑还是比较简单的,具体分两个步骤:
1、获取公众号的access_token
获取公众号的access_token的在前文中已经实现。
基于微信小程序云函数的方式获取微信公众号access_token -
2、遍历调用公众号永久素材列表接口获取数据
调用素材列表接口,获取相应的文章信息,这里主要获取公众号的图文信息(type为news),接口调用请求说明:
http请求方式: POST
https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN
调取素材列表之后在小程序中通过视图组件scroll-view来实现,主要有标题、封面图、摘要:
<scroll-view class="container"scroll-y='true' style="height:{{height}}px" bindscrolltolower='lower'>
<block wx:for="{{res}}" >
<view class='feed-item' id='{{item.title}}' bindtap='getDetial'>
<view>
<text >{{item.title}}</text>
</view>
<view style='text-align: center'>
<image src='{{item.image_url}}'>tupian </image>
</view>
<view>
<text >{{item.digest}}</text>
</view>
</view>
</block>
</scroll-view>
文章列表在弊并页面首次加载时就获取:
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
wx.getSystemInfo({
success: (res) => {
this.setData({
height: res.windowHeight
})
}
})
this.getData()
}
函数getData()实现步骤,具体请求函数用云函数来实现,先从调取acces_token:
// 云函数入口文件
const cloud = require('wx-server-sdk')
const news = require('New')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
let token = null;
await cloud.callFunction({
name:'token'
}).then(function(data){
token = data.result;
});
let offset = event.offset;
let count = event.count;
let nw = new news(token);
let rst = nw.getWechatPosts(offset,count);
return rst;
}
然后调取文章列表信息,每次获取10条信息:
//获取文章列表
getData(){
var that = this;
let pgno = this.data.pageNo+1;
let result = this.data.res;
wx.cloud.callFunction({
name:'news',
data:{
offset:this.data.offset,
count:this.data.count
},
success:function(res){
var resArr = [];
let body = res.result.body;
let total_count = body.total_count;//总共图文数量
let item_count = body.item_count;//本次调用数量
let item = body.item;
let page_total = parseInt((total_count + that.data.count - 1) / that.data.count);
let mud = total_count % that.data.count;
const db = wx.cloud.database();
for (let i = 0; i < item.length; i++) {
let news_item = item[i].content.news_item;
//单图文消息及多图文消息
for (let j = 0; j < news_item.length; j++) {
let title = news_item[j].title;//标题
let url = news_item[j].url;//详细地址
let image_url = news_item[j].thumb_url;//封面图片地址
let digest = news_item[j].digest;//摘要
let author = news_item[j].author;//作者
let content = news_item[j].content;
resArr.push(new nw(total_count, item_count, title, url, image_url, digest, author, content));
let res_id = null;
db.collection('content').where({
_id: url
}).get({
success: function (res) {
res_id = res.data[0]._id;
}
})
if (res_id === url){
}else{
db.collection('content').add({
data: {
_id: url,
content: content,
title: title
},
success: function (res) {
}
})
}
}
that.setData({
res: result.concat(resArr),
page_total: page_total,
pageNo: pgno,
mud: mud
});
}
}
})
}
scroll-view组件到底触发事件实现函数:
lower() {
//总页数18/10=1
var pageno = this.data.pageNo;
var page = this.data.page_total;
console.log("总页数:" + page+",第"+pageno+"页"+"zuohouy:"+this.data.mud)
if (pageno > page) {//page 4
wx.showToast({ //如果全部加载完成了也弹一个框
title: '我也是有底线的',
icon: 'success',
ration: 300
});
return false;
} else {
wx.showLoading({ //期间为了显示效果可以添加一个过度的弹出框提示“加载中”
title: '加载中',
icon: 'loading',
});
let offset = this.data.offset;
let count = this.data.count;
offset = this.data.offset + this.data.count;
console.log("offset:" + offset+"count:"+count)
this.setData({
offset: offset,
count: count
});
setTimeout(() => {
this.getData();
wx.hideLoading();
}, 1500);
}
}
❷ 微信公众号没灵感去哪里收集素材
素材资源:
常用的公众号文章素材资源平台有三个:搜狗微信、西瓜助手、微信搜一搜。
搜狗微信
微信搜一搜
西瓜助手
搜狗微信和微信搜一搜适合直接搜关键词找素材,比如有一个特定的主题,就可以直接搜索查找相关的素材。
西瓜助手适合找热点文章。上面集合了大量的微信文章素材,根据热度进行划分,每天更新快,可以快速获取各行业的公众号热文。
小技巧分享:
平时我会关注大量同行业的公众号,查看它们的发文,一是收集素材,了解行业热点;二是学习参考别人的写作套路、方式、策划等等,可以找到很多的同行热点和素材。
在西瓜助手上关注公众号,可以对大批量的公众号进行分组管理,相比较微信上使用,方便太多,可以批量查看它们的发文,看到最新热点,也可以单独查看某个公众号的历史热文。
我们选择素材参考或者转载时,要注意看文章的数据。阅读量高的文章不一定是最好的的文章。可以根据公众号历史发文数据(阅读数、在看数等)的对比,找到优质的素材。
如果这篇文章和历史同位置文章对比,阅读数高、在看数,说明这篇文章表现优秀,是一篇好素材,反之,如果比历史同位置文章数据差很多,即使阅读量高,也不一定是篇好文章。
这是我运营公众号搜集文章的经验,和你分享。
❸ 求一段微信开发新增永久图片素材的接口代码
//素材
const MEDIA_FOREVER_UPLOAD_URL = '/material/add_material?';
const MEDIA_FOREVER_NEWS_UPLOAD_URL = '/material/add_news?';
const MEDIA_FOREVER_NEWS_UPDATE_URL = '/material/update_news?';
const MEDIA_FOREVER_GET_URL = '/material/get_material?';
const MEDIA_FOREVER_DEL_URL = '/material/del_material?';
const MEDIA_FOREVER_COUNT_URL = '/material/get_materialcount?';
const MEDIA_FOREVER_BATCHGET_URL = '/material/batchget_material?';
/**
* 上传临时素材,有效期为3天(认证后的订阅号可用)
* 注意:上传大文件时可能需要先调用 set_time_limit(0) 避免超时
* 注意:数组的键值任意,但文件名前必须加@,使用单引号以避免本地路径斜杠被转义
* 注意:临时素材的media_id是可复用的!
* @param array $data {"media":'@Pathfilename.jpg'}
* @param type 类型:图片:image 语音:voice 视频:video 缩略图:thumb
* @return boolean|array
*/
public function uploadMedia($data, $type){
if (!$this->access_token && !$this->checkAuth()) return false;
//原先的上传多媒体文件接口使用 self::UPLOAD_MEDIA_URL 前缀
$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_UPLOAD_URL.'access_token='.$this->access_token.'&type='.$type,$data,true);
if ($result)
{
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
/**
* 获取临时素材(认证后的订阅号可用)
* @param string $media_id 媒体文件id
* @param boolean $is_video 是否为视频文件,默认为否
* @return raw data
*/
public function getMedia($media_id,$is_video=false){
if (!$this->access_token && !$this->checkAuth()) return false;
//原先的上传多媒体文件接口使用 self::UPLOAD_MEDIA_URL 前缀
//如果要获取的素材是视频文件时,不能使用https协议,必须更换成http协议
$url_prefix = $is_video?str_replace('https','http',self::API_URL_PREFIX):self::API_URL_PREFIX;
$result = $this->http_get($url_prefix.self::MEDIA_GET_URL.'access_token='.$this->access_token.'&media_id='.$media_id);
if ($result)
{
if (is_string($result)) {
$json = json_decode($result,true);
if (isset($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
}
return $result;
}
return false;
}
/**
* 上传永久素材(认证后的订阅号可用)
* 新增的永久素材也可以在公众平台官网素材管理模块中看到
* 注意:上传大文件时可能需要先调用 set_time_limit(0) 避免超时
* 注意:数组的键值任意,但文件名前必须加@,使用单引号以避免本地路径斜杠被转义
* @param array $data {"media":'@Pathfilename.jpg'}
* @param type 类型:图片:image 语音:voice 视频:video 缩略图:thumb
* @param boolean $is_video 是否为视频文件,默认为否
* @param array $video_info 视频信息数组,非视频素材不需要提供 array('title'=>'视频标题','introction'=>'描述')
* @return boolean|array
*/
public function uploadForeverMedia($data, $type,$is_video=false,$video_info=array()){
if (!$this->access_token && !$this->checkAuth()) return false;
//#TODO 暂不确定此接口是否需要让视频文件走http协议
//如果要获取的素材是视频文件时,不能使用https协议,必须更换成http协议
//$url_prefix = $is_video?str_replace('https','http',self::API_URL_PREFIX):self::API_URL_PREFIX;
//当上传视频文件时,附加视频文件信息
if ($is_video) $data['description'] = self::json_encode($video_info);
$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_FOREVER_UPLOAD_URL.'access_token='.$this->access_token.'&type='.$type,$data,true);
if ($result)
{
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
/**
* 上传永久图文素材(认证后的订阅号可用)
* 新增的永久素材也可以在公众平台官网素材管理模块中看到
* @param array $data 消息结构{"articles":[{...}]}
* @return boolean|array
*/
public function uploadForeverArticles($data){
if (!$this->access_token && !$this->checkAuth()) return false;
$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_FOREVER_NEWS_UPLOAD_URL.'access_token='.$this->access_token,self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
/**
* 修改永久图文素材(认证后的订阅号可用)
* 永久素材也可以在公众平台官网素材管理模块中看到
* @param string $media_id 图文素材id
* @param array $data 消息结构{"articles":[{...}]}
* @param int $index 更新的文章在图文素材的位置,第一篇为0,仅多图文使用
* @return boolean|array
*/
public function updateForeverArticles($media_id,$data,$index=0){
if (!$this->access_token && !$this->checkAuth()) return false;
if (!isset($data['media_id'])) $data['media_id'] = $media_id;
if (!isset($data['index'])) $data['index'] = $index;
$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_FOREVER_NEWS_UPDATE_URL.'access_token='.$this->access_token,self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
/**
* 获取永久素材(认证后的订阅号可用)
* 返回图文消息数组或二进制数据,失败返回false
* @param string $media_id 媒体文件id
* @param boolean $is_video 是否为视频文件,默认为否
* @return boolean|array|raw data
*/
public function getForeverMedia($media_id,$is_video=false){
if (!$this->access_token && !$this->checkAuth()) return false;
$data = array('media_id' => $media_id);
//#TODO 暂不确定此接口是否需要让视频文件走http协议
//如果要获取的素材是视频文件时,不能使用https协议,必须更换成http协议
//$url_prefix = $is_video?str_replace('https','http',self::API_URL_PREFIX):self::API_URL_PREFIX;
$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_FOREVER_GET_URL.'access_token='.$this->access_token,self::json_encode($data));
if ($result)
{
if (is_string($result)) {
$json = json_decode($result,true);
if (isset($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return $result;
}
return false;
}
/**
* 删除永久素材(认证后的订阅号可用)
* @param string $media_id 媒体文件id
* @return boolean
*/
public function delForeverMedia($media_id){
if (!$this->access_token && !$this->checkAuth()) return false;
$data = array('media_id' => $media_id);
$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_FOREVER_DEL_URL.'access_token='.$this->access_token,self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return true;
}
return false;
}
/**
* 获取永久素材列表(认证后的订阅号可用)
* @param string $type 素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
* @param int $offset 全部素材的偏移位置,0表示从第一个素材
* @param int $count 返回素材的数量,取值在1到20之间
* @return boolean|array
* 返回数组格式:
* array(
* 'total_count'=>0, //该类型的素材的总数
* 'item_count'=>0, //本次调用获取的素材的数量
* 'item'=>array() //素材列表数组,内容定义请参考官方文档
* )
*/
public function getForeverList($type,$offset,$count){
if (!$this->access_token && !$this->checkAuth()) return false;
$data = array(
'type' => $type,
'offset' => $offset,
'count' => $count,
);
$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_FOREVER_BATCHGET_URL.'access_token='.$this->access_token,self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (isset($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
/**
* 获取永久素材总数(认证后的订阅号可用)
* @return boolean|array
* 返回数组格式:
* array(
* 'voice_count'=>0, //语音总数量
* 'video_count'=>0, //视频总数量
* 'image_count'=>0, //图片总数量
* 'news_count'=>0 //图文总数量
* )
*/
public function getForeverCount(){
if (!$this->access_token && !$this->checkAuth()) return false;
$result = $this->http_get(self::API_URL_PREFIX.self::MEDIA_FOREVER_COUNT_URL.'access_token='.$this->access_token);
if ($result)
{
$json = json_decode($result,true);
if (isset($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
/**
* 上传图文消息素材,用于群发(认证后的订阅号可用)
* @param array $data 消息结构{"articles":[{...}]}
* @return boolean|array
*/
public function uploadArticles($data){
if (!$this->access_token && !$this->checkAuth()) return false;
$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_UPLOADNEWS_URL.'access_token='.$this->access_token,self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
/**
* 上传视频素材(认证后的订阅号可用)
* @param array $data 消息结构
* {
* "media_id"=>"", //通过上传媒体接口得到的MediaId
* "title"=>"TITLE", //视频标题
* "description"=>"Description" //视频描述
* }
* @return boolean|array
* {
* "type":"video",
* "media_id":"mediaid",
* "created_at":1398848981
* }
*/
public function uploadMpVideo($data){
if (!$this->access_token && !$this->checkAuth()) return false;
$result = $this->http_post(self::UPLOAD_MEDIA_URL.self::MEDIA_VIDEO_UPLOAD.'access_token='.$this->access_token,self::json_encode($data));
if ($result)
{
$json = json_decode($result,true);
if (!$json || !empty($json['errcode'])) {
$this->errCode = $json['errcode'];
$this->errMsg = $json['errmsg'];
return false;
}
return $json;
}
return false;
}
❹ 微信公众号文章预览链接短期内失效该怎么获得长效链接
想必公众号狗已经留意到了,6月29日公众号调整:“素材库文章预览功能已升级,每次预览后的链接将在短期内失效;链接失效规则仅适用于预览情况,不影响其他功能引用素材库文章。”虽说预览链接失效,不影响其他功能引用,但是预览到手机的链接都不能转发到微信群或者朋友圈了!更烦恼的是,原文链接里添加素材库文章,链接都很快失效,这可肿么办?别急,小编教你4种方法,获取跟原来一样长期有效的素材库文章链接~
1、用户消息回复获取链接
根据通告的第二点:“链接失效规则仅适用于预览情况,不影响其他功能引用素材库文章”,我们可以利用向用户回复消息获取素材库文章链接。
首先,用自己的微信向公众号发送一条任意消息,然后用公众号回复给自己一条素材库的图文消息,亲测,这样获取到的文章链接与原来一样长效哦!这是最简单方便的一个方法。
2、自定义菜单栏获取链接
除了用户消息回复,还有自定义菜单栏可以引用素材库的文章。为了获取未群发文章链接,先把文章插入在菜单栏,这样用手机点击菜单栏相应栏目,就可以获取到该文章的链接了。
弊端:更改了菜单栏设置以后,有时候菜单栏的更新同步到手机微信客户端需要较长时间。
3、关键词自动回复获取链接
关键词自动回复同样可以给用户回复一条素材库图文消息。这一方法相对繁琐些,需要先设置关键词才行~
4、页面模板获取链接
页面模板获取链接适用于开通了原创功能的公众号,对于具备这个功能的公众号来说,这个方法也非常简便。首先先新建一个模板,然后添加文章,最后复制链接即可。
5、以上,有了这几种方法应该暂时够用了。在互联网和公众平台日益快速发展的今天,以后也会出现各种各样有利或不利的功能调整或升级,只有在第一时间找到解决方法的运营者,才能称之为合格的公众号狗,共勉~~
❺ 微信公众号怎样生成永久链接
关注公众号,然后往公众号发送消息
1、登录微信公众号,点击左侧的“消息管理”。
2、关注公众号,给公众号发送一条消息。
3、点击消息管理,在用户头像进入聊天窗口。
4、从素材库中选择素材(临时链接需要转为永久链接的素材)然后点击发送。
5、手机会接受到一条图文消息打开,复制图文链接即可。
(5)微信获取永久素材列表扩展阅读:
微信公众平台微信主要价值:在于让企业的服务意识提升,在微信公众平台上,企业可以更好地提供服务,运营方案上面有很多方式,可以是第三方开发者模式;也可以是简单的编辑模式。