使用 flickrapi 重用 flickr Ubuntu 帐户

使用 flickrapi 重用 flickr Ubuntu 帐户

我正在尝试开发一个小型 Python 工具来与我的 flickr 帐户进行交互。我想保持简单,所以我决定使用我已经在系统中配置的 Flickr 帐户(在线帐户框架)。

我已经研究过应用程序开发人员的在线帐户教程并能够获取我的 Flickr 帐户详细信息。

当我尝试使用 flickrapi 模块时,出现了问题。我尝试了最新版本以及 13.04 中通过 apt 提供的版本。API 略有变化,但两次尝试都以一条消息结束,提示我有一个无效的 oauth 令牌。这是我尝试过的:

来自 flickrapi hg repo 的最新源代码

import flickrapi
flickr = flickrapi.FlickrAPI(u"d87224f0b467093b2a87fd788d950e27", u"4c7e48102c226509",
             token=flickrapi.auth.FlickrAccessToken(u"my_token", 
                       u"my_token_secret", u"write",
                       u'DarGad', u'dargad', u'user_nsid'))
flickr.test.login()

这导致:

ERROR:flickrapi.auth.OAuthFlickrInterface:do_request: Status code 400 received, content:
ERROR:flickrapi.auth.OAuthFlickrInterface:    oauth_problem=parameter_absent
ERROR:flickrapi.auth.OAuthFlickrInterface:    oauth_parameters_absent=oauth_token

来自 apt-get 的版本(1.2-3)

import flickrapi
flickr = flickrapi.FlickrAPI("d87224f0b467093b2a87fd788d950e27", "4c7e48102c226509", 
                             token="my_token")
flickr.test_login()

结果FlickrError: Error: 98: Invalid auth token。我还尝试了不同的FlickrAPI构造函数标志组合(例如store_tokencache),但没有成功。

我已经对 Twitter 使用了类似的方法(使用 apt 中的 python-twitter 模块),并且它与我已经配置的帐户完美兼容。

我猜问题出在 flickrapi 上,因为同样的方法也适用于 Shotwell 和 unity-photos-lens。我检查了它们的源代码,没有一个不使用 flickrapi(而且 Shotwell 甚至不是 Python 的)。

我将非常感激任何关于如何让 flickrapi 与在线账户框架配合使用的提示。或者也许有另一个 Python 模块可以与在线账户配合使用?我也试过了flickr.pypython-flickr-api但我的印象是,这两种方法都已经过时了——也没有成功。

答案1

看来我终于找到办法了。

正确的版本应使用来自源代码的版本。Ubuntu 13.04 附带的版本太旧,它使用以前的 flickr auth API。hg 的 2.0-beta 使用新的 oauth API。

问题在于FlickrAPI构造函数中提供的 token 未传递给内部OAuthFlickrInterface。为了解决这个问题,我只需要调用:

flickr = flickrapi.FlickrAPI(
                             # args same as before
                            )
flickr.token_valid()

如果此方法返回,True我们可以确保:

rsp = flickr.test.login()

这将执行 API 调用来检查令牌,但在执行此操作之前,它会将令牌对象作为副作用传递给 OAuthFlickrInterface。

我现在可以将 flickrapi 与我的 Ubuntu Flickr 帐户一起使用!

相关内容