flickAPI: Как мне перечислить наборы для моей учетной записи пользователя? - PullRequest
2 голосов
/ 05 сентября 2011

Я хочу перечислить все наборы, созданные этим пользователем, вместе с идентификатором набора. Я использую 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!")

1 Ответ

2 голосов
/ 05 сентября 2011

Когда вы работаете с flickrapi в Python, часто полезно напечатать XML, который возвращается вызовами API, чтобы увидеть, что происходит.В вашем примере, если вы добавите:

 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

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...