最新消息:20210917 已从crifan.com换到crifan.org

【已解决】Python调用WordPress的REST的接口发布帖子时如何加上目录categories和标签tags

Python crifan 369浏览 0评论
折腾:
【已解决】给Python发布印象笔记帖子内容到WordPress文章时加上分类和标签
期间,去加上categories和tags之前,需要搞清楚,如何放到接口参数中:
        postDict = {
            "title": title, # '【记录】Mac中用pmset设置GPU显卡切换模式'
            "content": content, # '<html>\n <div>\n  折腾:\n </div>\n <div>\n  【已解决】Mac Pro 2018款发热量大很烫非常烫\n </div>\n <div>\n  期间,...performance graphic cards\n    </li>\n   </ul>\n  </ul>\n </ul>\n <div>\n  <br/>\n </div>\n</html>'
            # "date_gmt": dateStr,
            "date": dateStr, # '2020-08-17T10:16:34'
            "slug": slug, # 'on_mac_pmset_is_used_set_gpu_graphics_card_switching_mode'
            "status": status, # 'draft'
            "format": postFormat, # 'standard'
            # TODO: categories, tags, featured_media, excerpt
        }
        createPostUrl = self.apiPosts
        resp = requests.post(
            createPostUrl,
            proxies=self.requestsProxies,
            headers=curHeaders,
            # data=json.dumps(postDict),
            json=postDict, # internal auto do json.dumps
        )
参考
【已解决】用Python发布印象笔记帖子内容到WordPress网站
的:
Overview — python-wordpress-xmlrpc 2.3 documentation
>>> post = WordPressPost()
>>> post.title = 'My new title'
>>> post.content = 'This is the body of my new post.'
>>> post.terms_names = {
>>>   'post_tag': ['test', 'firstpost'],
>>>   'category': ['Introductions', 'Tests']
>>> }
>>> wp.call(NewPost(post))
5
好像直接给上category和post_tag都是str(即name)的list,就可以了?
而此处category就用第一个
        curCategoryList = []
        if curTagList:
            firstTag = curTagList[0]
            curCategoryList.append(firstTag)
然后用代码:
        isUploadOk, respInfo = self.wordpress.createPost(
            title=curNote.title, # '【记录】Mac中用pmset设置GPU显卡切换模式'
            content=curNote.content, # '<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">\n<en-note>\n <div>\n  折腾:\n </div>\n <div>\n  【已解决】Mac Pro 2018款发热量大很烫非常烫\n </div>。。。。。。high performance graphic cards\n    </li>\n   </ul>\n  </ul>\n </ul>\n <div>\n  <br/>\n </div>\n</en-note>'
            dateStr=dateStr, # '2020-08-17T10:16:34'
            slug=curNote.attributes.sourceURL, # 'on_mac_pmset_is_used_set_gpu_graphics_card_switching_mode'
            categories=curCategoryList, # ['Mac']
            tags=curTagList, # ['切换', 'GPU', 'pmset', '显卡模式']
        )
去尝试发布,看看效果
结果报错了:
20201201 09:53:28 crifanWordpress.py:122  INFO    resp=<Response [400]>
20201201 09:53:50 crifanWordpress.py:254  INFO    isCreateOk=False, respInfo={'errCode': 400, 'errMsg': '{"code":"rest_invalid_param","message":"\\u65e0\\u6548\\u53c2\\u6570\\uff1acategories, tags","data":{"status":400,"params":{"categories":"categories[0]\\u7684\\u7c7b\\u578b\\u4e0d\\u662finteger\\u3002","tags":"tags[0]\\u7684\\u7c7b\\u578b\\u4e0d\\u662finteger\\u3002"}}}'}
去看看啥原因导致400
Unicode编码转换 – 站长工具
转码后:
{'errCode': 400, 'errMsg': '{"code":"rest_invalid_param","message":"无效参数:categories, tags","data":{"status":400,"params":{"categories":"categories[0]的类型不是integer。","tags":"tags[0]的类型不是integer。"}}}'}
无效参数:categories, tags
说是让categories和tags都是int值,而不是此处的字符串
-》说明此接口接受的都是WordPress内部的已有tag? 的id编号?
后来继续:
【已解决】给Python发布印象笔记帖子内容到WordPress文章时加上分类和标签
确认就是:
【总结】
在调用:
POST /wp-json/wp/v2/posts
创建WordPress的post帖子时,传入的category和tag
不是(之前参考php版本以为的)name的list
而是id的list,且id是int数值,是对应WordPress中的category或tag的id

举例:
categoryIdList=[1374]
tagIdList=[1367, 13224, 13225, 13226]
最后相关代码是:
        postDict = {
            "title": title, # '【记录】Mac中用pmset设置GPU显卡切换模式'
            "content": content, # '<html>\n <div>\n  折腾:\n </div>\n <div>\n  【已解决】Mac Pro 2018款发热量大很烫非常烫\n </div>\n <div>\n  期间,...performance graphic cards\n    </li>\n   </ul>\n  </ul>\n </ul>\n <div>\n  <br/>\n </div>\n</html>'
            # "date_gmt": dateStr,
            "date": dateStr, # '2020-08-17T10:16:34'
            "slug": slug, # 'on_mac_pmset_is_used_set_gpu_graphics_card_switching_mode'
            "status": status, # 'draft'
            "format": postFormat, # 'standard'
            "categories": categoryIdList, # [1374]
            "tags": tagIdList, # [1367, 13224, 13225, 13226]
            # TODO: featured_media, excerpt
        }
        logging.debug("postDict=%s", postDict)
        # postDict={'title': '【记录】Mac中用pmset设置GPU显卡切换模式', 'content': '<html>\n <div>\n  折腾:\n </div>\n <div>\。。。。<br/>\n </div>\n</html>', 'date': '2020-08-17T10:16:34', 'slug': 'on_mac_pmset_is_used_set_gpu_graphics_card_switching_mode', 'status': 'draft', 'format': 'standard', 'categories': [1374], 'tags': [1367, 13224, 13225, 13226]}
        createPostUrl = self.apiPosts
        resp = requests.post(
            createPostUrl,
            proxies=self.requestsProxies,
            headers=curHeaders,
            # data=json.dumps(postDict),
            json=postDict, # internal auto do json.dumps
        )
最新代码详见:
https://github.com/crifan/crifanLibPython/blob/master/crifanLib/crifanWordpress.py
对应的id,是从name中得到的
从WordPress中已有的tag和category中seach查询
查到了,就用已有的id
没查到,就新建一个category或tag,用新的id

完全的逻辑详见:
【已解决】给Python发布印象笔记帖子内容到WordPress文章时加上分类和标签

转载请注明:在路上 » 【已解决】Python调用WordPress的REST的接口发布帖子时如何加上目录categories和标签tags

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
92 queries in 0.185 seconds, using 23.39MB memory