2016-12-14 167 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

谢谢!会尝试一下 –