我正在尝试创建一个简单的应用程序,列出根据地理位置发布到Flickr的最新照片。
我使用flickerapi创建了查询,但是在API注释中如何实际返回结果,以便我可以实际解析我真正想要的属性。
这是我的疑问:
import flickrapi
api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
flickr = flickrapi.FlickrAPI(api_key, format="etree")
flickr.photos_search(api_key = api_key, tags = "stoke", privacy_filter = 1, safe_search=1, lon="-2.1974224", lat="53.0232691", radius=32, sort= "date-posted-des")
它返回一个对象:
<Element 'rsp' at 0x1077a6b10>
我想要做的就是检查可用的属性,这样我就可以提取我想要的位 - 但是我看不到会返回这个的方法。
有人可以帮忙吗?
答案 0 :(得分:3)
在您的情况下,您可能需要的是:
"flickr = flickrapi.FlickrAPI(api_key) photos = flickr.photos_search(user_id='73509078@N00', per_page='10') sets = flickr.photosets_getList(user_id='73509078@N00')"
它的作用是获取返回的XML doc
并将其作为ElementTree
对象提供给您,以便更容易处理。 (这是sets
对象)。不幸的是,照片对象无法做到这一点。
因此,要获取一般属性列表,请首先使用传递给您的树的根节点的.tag
和.attrib
方法。
您可以在ElementTree文档的示例中将集合用作root
:)
使用它的一个例子是:
sets = flickr.photosets_getList(user_id='73509078@N00') sets.attrib['stat'] => 'ok' sets.find('photosets').attrib['cancreate'] => '1' set0 = sets.find('photosets').findall('photoset')[0] +-------------------------------+-----------+ | variable | value | +-------------------------------+-----------+ | set0.attrib['id'] | u'5' | | set0.attrib['primary'] | u'2483' | | set0.attrib['secret'] | u'abcdef' | | set0.attrib['server'] | u'8' | | set0.attrib['photos'] | u'4' | | set0.title[0].text | u'Test' | | set0.description[0].text | u'foo' | | set0.find('title').text | 'Test' | | set0.find('description').text | 'foo' | +-------------------------------+-----------+ ... and similar for set1 ...
您可能间接询问的另一个问题是:
一般情况下,您可以执行python class
:
cls.__dict__
获取可用属性的一些。
给定一般的python对象,您可以使用vars(obj)
或dir(obj)
e.g:
class meh():
def __init__(self):
self.cat = 'dinosaur'
self.number = 1
# some example methods - don't actually do this
# this is not a good use of a method
# or object-oriented programming in general
def add_number(self, i):
self.number+=i
j = meh()
print j.__dict__
{'number': 1, 'cat': 'dinosaur'}
这将返回用于对象的命名空间的dict:
“除了一件事。模块对象有一个秘密只读 名为 dict 的属性,它返回用于的字典 实现模块的命名空间;名称 dict 是一个属性 但不是全球名称。显然,使用这个违反了抽象 命名空间实现,应该限制在像 验尸调试员。“ - Python Docs
dir
返回
“不带参数,返回当前本地名称列表 范围。使用参数,尝试返回有效属性的列表 对于那个对象。“docs
和
vars
只返回 dict 属性:
“返回模块,类,实例或任何内容的 dict 属性 具有 dict 属性的其他对象。
模块和实例等对象具有可更新的 dict 属性;但是,其他对象可能会对其进行写入限制 dict 属性(例如,新式类使用dictproxy来阻止直接字典更新)。“docs
应该注意的是, nothing 可以在运行时为对象提供所有,因为您可以修改对象的狡猾的事情。
答案 1 :(得分:2)
如果您想查看给定对象的内容,我会建议以下其中一项:
vars(item) # To see all the variable associated with it
或
dir(item) # To see all of the methods associated with it
更准确地说dir()
返回范围内的所有变量,但是对于你的对象,并且假设函数是python中的对象,结果是相同的。
还有:
globals() # To see everything in global scope
和
locals() # To see everything in local scope.
虽然在您的具体情况下,我只会引用直接返回的Element对象的文档,但我发现vars()
和dir()
在日常编码中非常有用。
文档在这里:http://docs.python.org/2/library/xml.etree.elementtree.html