1

地理に基づいて 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>

私がやりたいのは、利用可能な属性を調べて、必要なビットを抽出できるようにすることだけですが、これを返すメソッドがわかりません。次に何を試すことができますか?

4

2 に答える 2

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')"

- flickrapi ドキュメント

つまり、返された を取得しXML docてオブジェクトとして提供するElementTreeので、処理が簡単になります。(これがsetsオブジェクトです)。残念ながら、写真オブジェクトはそれを行うことができません。

ElementTree ドキュメント

したがって、属性の一般的なリストを取得するには、まず、渡されたツリーのルート ノードの メソッド.tagとメソッドを使用します。.attrib

rootElementTree docs の例のようにセットを使用できます:)

それが与える使用例は次のとおりです。

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 ...

-flickrapi ドキュメント


あなたが間接的に尋ねていたかもしれない別の質問:

一般に、Pythonclassを指定すると、次のことができます。

cls.__dict__

使用可能な属性の一部を取得します。

使用できる一般的な python オブジェクトが与えられた場合、vars(obj)またはdir(obj)

例えば:

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 を返します。

「1つを除いて。モジュールオブジェクトには、モジュールの名前空間を実装するために使用される辞書を返すdictと呼ばれる秘密の読み取り専用属性があります。名前dictは属性ですが、グローバル名ではありません。明らかに、これを使用すると、名前空間実装の抽象化に違反します、事後分析デバッガーなどに制限する必要があります。」- Python ドキュメント

dir戻り値

「引数がない場合は、現在のローカル スコープ内の名前のリストを返します。引数がある場合は、そのオブジェクトの有効な属性のリストを返そうとします。」ドキュメント

varsdict属性を返すだけです。

"モジュール、クラス、インスタンス、または dict 属性を持つその他のオブジェクトのdict属性を返します。

モジュールやインスタンスなどのオブジェクトには、更新可能なdict 属性があります。ただし、他のオブジェクトではdict属性に書き込み制限がある場合があり ます (たとえば、新しいスタイルのクラスは dictproxy を使用して辞書の直接更新を防ぎます)。" docs

オブジェクトを変更するために行うことができる狡猾な行為のために、実行時にオブジェクトに利用可能なすべてを提供できるものは何もないことに注意してください。

于 2013-07-30T19:16:02.323 に答える