2016-12-14 448 views
0

noob問題系列...如何從Flickr Flickr的API的Python下載照片3

我是蟒蛇的新學員,最近想創建一個小的Python應用程序可以收集基於不同的Flickr照片搜索輸入。 (例如:如果我輸入「狗」,它會從Flickr下載所有的狗圖片)

我做了一些研究,並在網上發現,Flickr的API可能是最好的方式和方法flickr.photos.getSizes應我需要使用的那個。

不過,我有一些愚蠢的問題編碼時:

  1. 我申請我的Flickr API鍵和祕密,我只是不知道接下來做什麼用flickr.photos.getSizes在python下載照片。喜歡,如何在python中調用這個方法? (我注意到這種方法所需要的參數是密鑰和photo_id,如何基於搜索輸入「狗」獲得photo_ids)

  2. 然後我跟着從https://github.com/alexis-mignon/python-flickr-api/wiki/Tutorial的教程,但是當我進口flickr_api我收到錯誤消息:

    Could not load all modules 
    <class 'ImportError'> No module named 'objects' 
    Traceback (most recent call last): 
        File "D:/Agfa/Projects/Image/flickr.py", line 2, in <module> 
        import flickr_api 
        File "D:\Application\Anaconda3\lib\site-packages\flickr_api\__init__.py", line 32, in <module> 
        from auth import set_auth_handler 
    ImportError: cannot import name 'set_auth_handler' 
    

    然後我拿了一看_ 初始化 _.py:

    try: 
        from objects import * 
        import objects 
        import upload as Upload 
        from upload import upload, replace 
    except Exception as e: 
        print "Could not load all modules" 
        print type(e), e 
    
    from auth import set_auth_handler 
    from method_call import enable_cache, disable_cache 
    from keys import set_keys 
    from _version import __version__ 
    

    好像這個庫不支持Python 3中,但我不知道該怎麼辦。 (我不能安裝methond_call,鑰匙,_version上我的Python 3)想我會用flickrapi

謝謝你這麼多的時間和再次提前感謝。

+1

AHO​​I同胞pythonista,'flickr_api/__的init __ py'使用的python2方式定義'try:except:finally'如果你敢編輯它,那麼除了Exception之外重寫'except:e:',除了Exception:e,'至少try/except會適合python3。有一個py2to3工具,也應該這樣做。 – krysopath

+0

@krysopath嘿bro bro thx的提示,但我確實嘗試編輯語法,但python 3無法導入method_call,鍵和_version。 –

+1

k,兄弟:)我剛剛使用pythonanywhere.com並安裝了flickrapi與'pip3安裝flickrapi --user',並且可以'無需任何麻煩地導入flickrapi'。對__init__.py的快速檢查給了我印象,我們沒有使用相同的來源。我的是flickrapi-2.1.2,我沒有找到一個名爲flickr_api的模塊,用pip3 – krysopath

回答

1

我想,我終於得到了使用FlickrAPI的正確方法:

的方法有很多,但我想通了2:

def flickr_walk(keyward): 
    count = 0 
    photos = flickr.walk(text=keyward, 
       tag_mode='all', 
       tags=keyward, 
       extras='url_c', 
       per_page=100) 

    for photo in photos: 
     try: 
      url=photo.get('url_c') 
      urllib.request.urlretrieve(url, path+'\\' + str(count) +".jpg") 
     except Exception as e: 
      print('failed to download image') 

flickr.walk使用照片。搜索API,我可以使用API​​直接以及:

def flickr_search(keyward): 
    obj = flickr.photos.search(text=keyward, 
          tags=keyward, 
          extras='url_c', 
          per_page=5) 

    for photo in obj: 
     url=photo.get('url_c') 
     photos = ET.dump(obj) 
     print (photos) 

記得拿到鑰匙和祕密第一:

api_key = 'xxxxxxxxxxxxxxxx' 
api_secret = 'xxxxxxxxxxxxx' 

flickr=flickrapi.FlickrAPI(api_key,api_secret,cache=True) 
+0

這看起來像一個清潔的方式來做到這一點。 thx分享! – krysopath

1

我沒有任何線索爲什麼/如何。如果你想使用python3.5 +的flickr_api模塊,你需要修復的進口,像我一樣如下:

try: 
    from objects import * 
    import objects 
    import upload as Upload 
    from upload import upload, replace 
except Exception as e: 
    #print "Could not load all modules" 
    print(type(e), e) 

from .auth import set_auth_handler 
from .method_call import enable_cache, disable_cache 
from .keys import set_keys 
from ._version import __version__ 

此編輯後,它無法與另一個導入錯誤:

>>> import flickr_api 
<class 'SyntaxError'> invalid syntax (method_call.py, line 50) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/krysopath/.local/lib/python3.5/site-packages/flickr_api/__init__.py", line 32, in <module> 
    from .auth import set_auth_handler 
    File "/home/krysopath/.local/lib/python3.5/site-packages/flickr_api/auth.py", line 43, in <module> 
    import urlparse 
ImportError: No module named 'urlparse' 

所以你可以自己解決這個問題,如果你願意的話,只需沿着導入錯誤走,並添加一個點將它們轉換成絕對導入,即不會失敗。

我想,如果你想使用這個模塊,你必須先解決它...並有一個未知的回報。所以,如果你沒有投入大量資金,那麼使用其他模塊可能會更有效。

+0

謝謝!會嘗試一下 –