微信小程序获取公众号的文章

背景:我有一个《砂舞指南》的小程序,主要是分享砂舞最新动态等

最近做了一个小程序,想要一些固定的文章展示在小程序里面,比如《什么是砂舞》《玩砂舞注意点》等普及砂舞知识的文章

开发流程:

1、刚开始测试了 素材管理/获取永久素材,但是结果不甚满意。发表了20篇文章,只获取到15个。不知道是平台规则的修改还是什么的,无法满足需求

2、翻了半天,找个 发布能力/获取成功发布列表。
刚开始获取不到发表的文章列表,查了查,得知, 发布/发表 是俩个文章

发布:就是在发表按钮点击后,不群发文章。在微信公众号首页能看到文章,但是不给粉丝推送
发表:勾选推送,群发给粉丝

所以,发布能力/获取成功发布列表,这个接口刚好满足我的需求

实现:

我的服务器是用golang来处理的

package wechatFreePublish

import (
	"bytes"
	"fmt"
	"github.com/goccy/go-json"
	"net/http"
)

func GetList(token string, offset, count, noContent int32) []*NewsItem {
	pageSize := 20
	totalMaterialCount := 0
	allMaterialItems := []*NewsItem{}

	// 第一次请求以获取总数
	firstUrl := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/freepublish/batchget?access_token=%s", token)
	//firstUrl := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/freepublish/batchget?access_token=%s", token)

	// 构建请求参数
	requestData := []byte(fmt.Sprintf(`{"offset": %d, "count": %d, "no_content": %d}`, offset, count, noContent))

	firstResp, err := http.Post(firstUrl, "application/json", bytes.NewReader(requestData))
	if err != nil {
		fmt.Println("Error:", err)
		return nil
	}
	defer firstResp.Body.Close()

	var firstResponse NewsMediaResponse
	if err := json.NewDecoder(firstResp.Body).Decode(&firstResponse); err != nil {
		fmt.Println("Error decoding JSON:", err.Error())
		return nil
	}

	// 获取总数
	totalMaterialCount = firstResponse.TotalCount
	println(totalMaterialCount)

	// 开始轮询请求素材列表
	for offset := 0; offset < totalMaterialCount; offset += pageSize {
		secondUrl := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/freepublish/batchget?access_token=%s", token)
		// 构建请求参数
		requestData := []byte(fmt.Sprintf(`{"offset": %d, "count": %d, "no_content": %d}`, offset, count, noContent))
		secondResp, err := http.Post(secondUrl, "application/json", bytes.NewReader(requestData))
		if err != nil {
			fmt.Println("Error:", err)
			return nil
		}
		defer secondResp.Body.Close()

		// 解析JSON响应
		var response NewsMediaResponse
		if err := json.NewDecoder(secondResp.Body).Decode(&response); err != nil {
			fmt.Println("Error decoding JSON:", err)
			return nil
		}

		// 打印解析结果
		fmt.Printf("Total Count: %d\n", response.TotalCount)
		fmt.Printf("Item Count: %d\n", response.ItemCount)

		for _, item := range response.Items {
			//fmt.Printf("News Media Item %d:\n", i+1)
			//fmt.Printf("Article ID: %s\n", item.ArticleID)
			//fmt.Printf("Update Time: %d\n", item.UpdateTime)

			for _, newsItem := range item.Content.NewsItem {
				allMaterialItems = append(allMaterialItems, &newsItem)
				//fmt.Printf("  News Item %d:\n", j+1)
				//fmt.Printf("    Title: %s\n", newsItem.Title)
				//fmt.Printf("    Author: %s\n", newsItem.Author)
				//fmt.Printf("    Digest: %s\n", newsItem.Digest)
				//fmt.Printf("    Content: %s\n", newsItem.Content)
				//fmt.Printf("    Content Source URL: %s\n", newsItem.ContentSourceURL)
				//fmt.Printf("    Thumb Media ID: %s\n", newsItem.ThumbMediaID)
				//fmt.Printf("    Show Cover Pic: %d\n", newsItem.ShowCoverPic)
				//fmt.Printf("    Need Open Comment: %d\n", newsItem.NeedOpenComment)
				//fmt.Printf("    Only Fans Can Comment: %d\n", newsItem.OnlyFansCanComment)
				//fmt.Printf("    URL: %s\n", newsItem.URL)
				//fmt.Printf("    Is Deleted: %v\n", newsItem.IsDeleted)
			}
		}
	}

	return allMaterialItems
}

type NewsItem struct {
	Title              string `json:"title"`
	Author             string `json:"author"`
	Digest             string `json:"digest"`
	Content            string `json:"content"`
	ContentSourceURL   string `json:"content_source_url"`
	ThumbMediaID       string `json:"thumb_media_id"`
	ShowCoverPic       int    `json:"show_cover_pic"`
	NeedOpenComment    int    `json:"need_open_comment"`
	OnlyFansCanComment int    `json:"only_fans_can_comment"`
	URL                string `json:"url"`
	IsDeleted          bool   `json:"is_deleted"`
}

type NewsMediaItem struct {
	ArticleID string `json:"article_id"`
	Content   struct {
		NewsItem []NewsItem `json:"news_item"`
	} `json:"content"`
	UpdateTime int `json:"update_time"`
}

type NewsMediaResponse struct {
	TotalCount int             `json:"total_count"`
	ItemCount  int             `json:"item_count"`
	Items      []NewsMediaItem `json:"item"`
}

获取成功发布列表后,又衍生出个问题,我想要获取文章是缩略图。但是数据只提供了个缩略图id,并没有直接的URL地址

因微信公众号的接口每天有次数限制,那么我只能调用 素材管理/获取永久素材/image,将素材库的所有图片存储到我的服务器,然后在获取文章的时候,在缓存中用图片ID获取图片URL,返回给客户端了。

这样,微信小程序就有了  文章标题+缩略图URL,就可以展示自己需要的文章了

后续,只要在公众号发布文章,即可同步到小程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序Demo–公众号热门文章信息流是一款专为微信公众号设计的热门文章信息流展示小程序。它可以帮助公众号运营者快速获取和展示热门文章,提高用户阅读体验和互动性。本资源包含完整的小程序源代码,支持二次开发定制,满足您的个性化需求。 该小程序采用目前流行的微信开发者工具进行开发,基于WXML、WXSS和JavaScript技术栈,实现了美观、简洁的界面设计和流畅的交互效果。同时,它还支持多种数据接口和自定义样式,方便您根据实际需求进行调整和扩展。 在功能方面,该小程序具有以下几个亮点: 1. 实时获取公众号热门文章:通过调用微信公众平台提供的API接口,实时获取最新的热门文章列表,确保内容的时效性和准确性。 2. 多样化文章展示:支持图文混排、视频、音频等多种内容形式,满足不同类型的公众号需求。 3. 用户互动功能:支持点赞、评论和分享等互动功能,提高用户参与度和粘性。 4. 数据统计与分析:提供详细的数据统计和分析功能,帮助您了解用户行为和喜好,优化内容策略。 此外,为了满足不同公众号的个性化需求,该小程序还提供了丰富的定制选项,包括主题颜色、字体大小、页面布局等。您可以根据自己的品牌形象和用户需求进行定制开发,打造出独一无二的热门文章信息流小程序。 总之,微信小程序Demo–公众号热门文章信息流是一款功能完善、操作简便、可定制性强的热门文章展示小程序。无论您是公众号运营者还是开发者,都可以通过本资源轻松打造出符合自己需求的热门文章信息流,提升用户体验和品牌形象。
微信小程序开发公众号需要进行以下几个步骤: 1. 首先,你需要申请微信公众号小程序。微信公众号小程序可以通过微信官方网站进行申请。 2. 接下来,你需要将微信小程序公众号进行关联。这是为了实现消息推送功能。关联的过程需要在微信公众号开发平台进行操作。 3. 在小程序的后端管理界面登录并查看小程序的appid和secret。这些信息将在与微信进行请求交互时使用。 4. 为了实现与微信的请求交互,你需要使用https,并建议使用域名来实现。你还需要准备好对应的https证书,并在小程序的后端开发中配置好外网端口。 5. 如果你想实现微信推送功能,你需要成功关联微信公众号,并将你的IP添加到白名单中,以便获取token。 6. 如果你想实现图片上传功能,建议使用图片服务器,并将图片路径返回给前端。在使用Nginx时,需要注意设置传输大小。 7. 小程序的打包体积不能超过2M,其他资源(包括图片等)应放在后端的静态服务器中。 8. 在进行小程序体验版自测时,你需要在微信管理后台添加相应的开发人员,并在登录小程序时使用开发调试功能。同时,体验版的网络和后端服务的网需要在同一局域网才能进行访问。 9. 如果你想升级和上线小程序,需要提前提交审核申请。初次审核可能需要较长时间,一般需要提前进行准备。在上线前,你需要在微信公众号开发平台添加获取token的白名单,并确保后端服务开启了外网访问权限。 以上是关于微信小程序开发公众号的一些流程和步骤。你可以参考微信官方文档和API文档获取更详细的信息。 #### 引用[.reference_title] - *1* *2* *3* [手记系列之一 ----- 关于微信公众号小程序的开发流程](https://blog.csdn.net/qazwsxpcm/article/details/127600663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值