文章采集接口(折腾一个微信公众号新增永久图文素材|微信开放文档)

优采云 发布时间: 2022-01-31 10:15

  文章采集接口(折腾一个微信公众号新增永久图文素材|微信开放文档)

  前言

  都说懒惰是人类进步的动力,古人没有骗我。最近在折腾一个微信公众号。一开始是在网上找了一些资源,然后做了二次创作,然后发布到了微信公众号上。不过,我得把里面的图片下载下来,复制文字,然后慢慢上传到微信公众号。经过几天的工作,我发现这太低效了。我每天都在做重复的事情。这对于程序员来说是无法忍受的。任何重复的东西都有自动化的价值,我们不能浪费它们。人生就在这种地方,不废话,做就做。

  一、需求和难点从指定页面爬取数据只爬取我们需要的内容(什么样的广告,不需要导航),然后将文字上传到微信公众号的草稿箱。微信的草稿箱界面只能放图片上传到微信,所以我们需要做一个额外的操作,从网页中提取图片上传到微信公众号,然后将文中的图片链接替换为微信公众号中的图片二、使用工具和接口将封面图片上传到微信公众号添加永久图文素材 | 微信开文档()上传文字图片到微信公众号

  ​http请求方式: POST,https协议 https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN 调用示例(使用curl命令,用FORM表单方式上传一个图片): curl -F [email protected] "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"

  上传文字至公众号草稿箱接口请求说明 | 微信打开文档()

  这里主要使用Python:requests、BeautifulSoup、json

  三、实施步骤1.分析网页

  这是我们要分析的网页截图:

  

  我们可以看到这个网页有自己的导航,右侧的推荐栏和底部的导航。如果我们直接扣除上传到整个网页的微信公众号,无疑会给我们的后期处理带来很大的工作量。所以我们只需要body,也就是html中的内容

  2. 调用接口我们先来看看上传草稿API接口

  接口请求说明

http 请求方式:POST(请使用https协议)https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN

调用示例

{

"articles": [

{

"title":TITLE,

"author":AUTHOR,

"digest":DIGEST,

"content":CONTENT,

"content_source_url":CONTENT_SOURCE_URL,

"thumb_media_id":THUMB_MEDIA_ID,

"show_cover_pic":1,

"need_open_comment":0,

"only_fans_can_comment":0

}

//若新增的是多图文素材,则此处应还有几段articles结构

]

}

  请求参数说明

  范围

  有必要吗

  操作说明

  标题

  是的

  标题

  内容

  是的

  图片和短信的具体内容支持HTML标签,且必须小于20000字符且小于1M,这里会去掉JS,图片的url必须从“上传图片获取网址”中获取图片和文字信息”界面。外部图片网址将被过滤

  thumb_media_id

  是的

  图文信息的封面图片素材id(必须是永久MediaID)

  可以看出这个接口需要3个参数,那我们就去网页的代码看看如何获​​取这3个参数

  通过分析网页,我们可以发现我们想要的标题在class='entry-title'的a标签中,我们还可以在class='entry-title'的div中得到文章的摘要概括'

  

  所以我们先爬取页面,得到标题和摘要

   baseUrl = 'https://www.test.com'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.57'

}

res = requests.get(baseUrl, verify=False, headers=headers)

root_soup = BeautifulSoup(res.content, 'html.parser')

title = root_soup.select('.entry-title')[0].text

summary = root_soup.select('.entry-summary p')[0].text

print(title)

print(summary)

  接下来,我们需要准备封面。现在我们将使用微信公众号接口,但是在使用公众号接口之前,我们需要获取一个令牌,以便我们有权访问公众号的API接口。获取token的文档在这里:Wechat Open Document() 通过分析文字我们知道这个文章里面有很多图片,那么我们就以第一张图片为封面,先定义一个方法用于上传封面

  然后获取body中的所有图片,将第一个传入这个方法获取cover id

   content_soup = root_soup.select('.entry-content')[0]

imgs = content_soup.select('.wp-block-image')

fmId = updFm(imgs[0].img['src'], title)

  接下来我们在文本中定义一个上传其他图片的方法,因为其他图片需要返回的url不是media_id,所以调用了另外一个接口。

  def updImg(url):

base_folder = 'D:\\tempDir'

res = requests.get(url, verify=False)

file_name = '{}.jpg'.format(random.randint(10000, 99999))

with open(base_folder + file_name, 'wb') as f:

f.write(res.content)

vx_img_url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg'

request_file = {

'media': (file_name, open(base_folder + file_name, 'rb'), 'image/jpeg')}

data = {

'access_token': access_token

}

vx_res = requests.post(url=vx_img_url, files=request_file, data=data)

obj = json.loads(vx_res.content)

print(obj)

return obj['url']

  然后将文中的图片全部上传到微信公众号的素材库,替换为文中的图片地址

   for img_content in imgs:

img_content.noscript.decompose()

current_url = img_content.img['data-original']

upd_url = updImg(current_url)

img_content.img['src'] = upd_url

img_content.img['data-original'] = upd_url

  最后我们可以开始准备上传文章到草稿箱,或者先定义方法,因为草稿界面的标题和摘要都有长度限制,所以这个方法开始做限制。如果长度超过,字符串将被截取

  def updCG(title, summary, content, fmId):

if len(title) > 64:

title = title[:63]

if len(summary) > 120:

summary = summary[:119]

url = 'https://api.weixin.qq.com/cgi-bin/draft/add?access_token='+access_token

data = {

"articles": [

{

"title": title,

"author": '作者',

"digest": summary,

"content": content,

"show_cover_pic": 1,

"need_open_comment": 0,

"only_fans_can_comment": 0,

"thumb_media_id": fmId

}

]

}

vx_res = requests.post(url=url, data=json.dumps(

data, ensure_ascii=False).encode("utf-8"))

obj = json.loads(vx_res.content)

print(obj)

return obj['media_id']

  然后在总方法中调用我们的上传草稿方法

   print(content_soup.prettify())

updCG(title, summary, content_soup.prettify(), fmId)

  查看结果,可以看到文章已经自动提交到草稿箱了,然后我们就可以进去二次创建发布了

  

  总结

  这可以在半天总共100多行代码中完成。其实这主要需要你去分析网页,因为每个网站的情况都不一样,后面的技术实现也差不多。生活中,我们会遇到很多需要时时刻刻重复的事情。这个时候,我们可以多花点脑力,以后节省不少时间。如果我们掌握了一些别人无法做到的事情,那么我们就可以做一些不同的事情。好吧,技术改变生活,不是吗?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线