我希望列出此用户创建的所有集以及set id。我正在使用flickrApi和Python。这是我的代码。 setName在输出中返回“none”。 elm.get('title')返回“none”。
import flickrapi
api_key = 'APIKEY'
api_secret = 'APISECRET'
flickr = flickrapi.FlickrAPI(api_key, api_secret)
(token, frob) = flickr.get_token_part_one(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))
try:
favs = flickr.photosets_getList(user_id='51784048@N00')
#favs = flickr.favorites_getPublicList(user_id = '51784048@N00')
for elm in favs.getiterator():
print ("id: %s secret: %s setname: %s") %(elm.get('id'), elm.get('secret'), elm.get('title'))
except:
raise Exception("Some error encountered!")
答案 0 :(得分:2)
当您在Python中使用flickrapi
时,打印API调用返回的XML通常很有用,以便查看正在发生的事情。在您的示例中,如果添加:
from xml.etree import ElementTree
...在顶部,然后添加:
print ElementTree.tostring(favs)
...你会看到返回的结构是:
<rsp stat="ok">
<photosets page="1" pages="1" perpage="80" total="80">
<photoset .../>
<photoset .../>
<photoset .../>
<photoset ...>
</photosets>
</rsp>
在实际应用程序中,您需要检查返回状态并检查page
属性,但要快速找到您想要的内容,让我们看一下<photoset>
元素。要迭代它们,您可以将循环更改为:
for elm in favs.getchildren()[0]:
print ElementTree.tostring(elm)
然后,您将看到您必须导航的每个photoset
元素的结构。例如,一个是:
<photoset can_comment="1"
count_comments="0"
count_views="34"
date_create="1156703089"
date_update="1297462539"
farm="1"
id="72157594253605858"
needs_interstitial="0"
photos="73" primary="226222345"
secret="63fde66413"
server="62"
videos="0"
visibility_can_see_set="1">
<title>Birds</title>
<description />
</photoset>
...所以标题实际上存储在title
子元素中。从那里,您可以看到,为了获得您想要的信息,您可以这样做:
for elm in favs.getchildren()[0]:
title = elm.getchildren()[0].text
print ("id: %s secret: %s setname: %s") %(elm.get('id'), elm.get('secret'), title)
...产生输出:
id: 72157600139832705 secret: 4e884f3523 setname: French Creek State Park
id: 72157600047937451 secret: d3c84ed8df setname: Las Vegas
id: 72157594253605858 secret: 63fde66413 setname: Birds
等