python-wordpress-xmlrpc在python.8+出错

最近有个项目,需要批量抓取信息,存入wordpress数据库,用到了python-wordpress-xmlrpc模块,因为很早之前用过,感觉还不错,结果悲剧了.上来就报错:

from wordpress_xmlrpc import Client, methods
from wordpress_xmlrpc.methods.posts import GetPosts

#wordpress信息
url = 'http://localhost/wp611/xmlrpc.php' 
user = 'admin'
password = 'admin' 
client = Client(url, user, password)
posts = client.call(GetPosts())

错误信息如下:

Traceback (most recent call last):
  File "E:\Pyroot\wp\main.py", line 11, in <module>
    posts = client.call(GetPosts())
  File "E:\Pyroot\wp\venv\lib\site-packages\wordpress_xmlrpc\base.py", line 46, in call
    return method.process_result(raw_result)
  File "E:\Pyroot\wp\venv\lib\site-packages\wordpress_xmlrpc\base.py", line 128, in process_result
    elif isinstance(raw_result, collections.Iterable):
AttributeError: module 'collections' has no attribute 'Iterable'

一头雾水,不过已经有大神在此之前就遇到了这个问题,还帮我写了解决方案:

from wordpress_xmlrpc.base import XmlrpcMethod
from wordpress_xmlrpc.compat import xmlrpc_client, dict_type
import collections.abc

#创建新的my_process_result,替换掉原来的my_process_result
def my_process_result(self, raw_result):
    if self.results_class and raw_result:
        if isinstance(raw_result, dict_type):
            return self.results_class(raw_result)
        elif isinstance(raw_result, collections.abc.Iterable): 
            return [self.results_class(result) for result in raw_result]

    return raw_result

XmlrpcMethod.process_result = my_process_result

参考原文:https://qiita.com/yamayamato_4989/items/b9541e327d8cbb109e26

发布日期:2023-03-24 浏览次数:716

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注