使用 Python-oauth2 在 python 中为 tumblr API 初始化 Oauth 客户端

2024-03-14

我是 Oauth 的新手。过去,对于用 Python 编写的 Twitter 应用程序,我使用 python-oauth2 库来初始化客户端,如下所示:

consumer = oauth.Consumer(key = CONSUMER_KEY, secret = CONSUMER_SECRET)
token = oauth.Token(key = ACCESS_KEY, secret = ACCESS_SECRET)
client = oauth.Client(consumer, token)

这很容易,因为 Twitter 提供了 CONSUMER 和 ACCESS 密钥和秘密。但现在我需要对 tumblr 做同样的事情。问题是 tumblr 只提供 CONSUMER_KEY、CONSUMER_SECRET 和这些 url:

Request-token URL   http://www.tumblr.com/oauth/request_token
Authorize URL       http://www.tumblr.com/oauth/authorize
Access-token URL    http://www.tumblr.com/oauth/access_token

使用这些数据我如何初始化客户端来访问 tumblr API?

UPD

jterrace 建议了我之前尝试使用的代码。问题在于oauth_callback。如果我没有指定任何内容,api 会返回错误“未指定 oauth_callback”,但如果我指定了一些 url,如“http://example.com/oauthcb/”并点击链接http://www.tumblr.com/oauth/authorize?oauth_token=9ygTF http://www.tumblr.com/oauth/authorize?oauth_token=9ygTF...,然后按“允许”按钮,tumblr 不会显示任何 PIN 代码页面,它会立即重定向到该回调 url,这是无用的,因为它是桌面应用程序。为什么不显示 PIN 码?

UPD 2

Tumblr API 不支持 PIN 码授权。使用 xAuth 代替 -


首先,导入oauth2模块 https://github.com/simplegeo/python-oauth2并设置服务的 URL 和消费者信息:

import oauth2

REQUEST_TOKEN_URL = 'http://www.tumblr.com/oauth/request_token'
AUTHORIZATION_URL = 'http://www.tumblr.com/oauth/authorize'
ACCESS_TOKEN_URL = 'http://www.tumblr.com/oauth/access_token'
CONSUMER_KEY = 'your_consumer_key'
CONSUMER_SECRET = 'your_consumer_secret'

consumer = oauth2.Consumer(CONSUMER_KEY, CONSUMER_SECRET)
client = oauth2.Client(consumer)

步骤 1:获取请求令牌。这是一个临时令牌,用于 让用户授权访问令牌并签署请求以获取 说访问令牌。

resp, content = client.request(REQUEST_TOKEN_URL, "GET")

request_token = dict(urlparse.parse_qsl(content))
print "Request Token:"
print "    - oauth_token        = %s" % request_token['oauth_token']
print "    - oauth_token_secret = %s" % request_token['oauth_token_secret']

第 2 步:重定向至提供商。由于这是一个 CLI 脚本,我们不 重定向。在 Web 应用程序中,您会将用户重定向到 URL 以下。

print "Go to the following link in your browser:"
print "%s?oauth_token=%s" % (AUTHORIZATION_URL, request_token['oauth_token'])

# After the user has granted access to you, the consumer, the provider will
# redirect you to whatever URL you have told them to redirect to. You can 
# usually define this in the oauth_callback argument as well.
oauth_verifier = raw_input('What is the PIN? ')

Step 3:一旦消费者将用户重定向回 oauth_callback 您可以请求用户已批准的访问令牌的 URL。您使用 请求令牌来签署此请求。完成此操作后,您扔掉 请求令牌并使用返回的访问令牌。你应该存储这个 访问令牌在安全的地方,例如数据库,以供将来使用。

token = oauth2.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
token.set_verifier(oauth_verifier)
client = oauth2.Client(consumer, token)

resp, content = client.request(ACCESS_TOKEN_URL, "POST")
access_token = dict(urlparse.parse_qsl(content))

print "Access Token:"
print "    - oauth_token        = %s" % access_token['oauth_token']
print "    - oauth_token_secret = %s" % access_token['oauth_token_secret']
print

现在您有了访问令牌,您可以用它调用受保护的方法。

EDIT:事实证明,tumblr 不支持 PIN 授权方法。相关帖子.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python-oauth2 在 python 中为 tumblr API 初始化 Oauth 客户端 的相关文章

随机推荐

  • 每次运行后,Xcode 6 都会在 iOS8 模拟器中不断重命名我的应用程序目录。

    我正在运行 Xcode 6 Beta 5 但自从第一个 Beta 版以来这种情况就一直发生 每次运行后 我的应用程序在模拟器中的目录都会被重命名 我花了一段时间才弄清楚这一点 我用它来获取文档的目录引用 NSString folder NS
  • 当我尝试卸载包含 NSSM 服务的软件时,失败

    对于以下安装程序包 我有服务XXXService当我安装我的包时 成功安装并运行 但卸载失败并出现错误并恢复 我怀疑该服务仍在运行 阻止删除main exe file 请帮助完成卸载工作 重现此错误的完整最小源是可用的 https gith
  • 将 R 与 php 连接

    我正在尝试以 php localhost 方式运行 R 代码 所以我按照这个例子 https www r bloggers com integrating php and r https www r bloggers com integra
  • GGPlot2 中的 NLS 回归,绘制 y=Ax^b 趋势线误差

    我正在尝试在一组 3 个数据点上拟合基本幂趋势线 就像您在 Excel 中模拟 y Ax b 函数一样 我有一个非常简单的数据集加载到 LCurve data 中 如下所示 MDPT 4 10 9 51 6 曲线下面积 287069 4 2
  • Matlab 中的分组箱线图:通用函数

    在看到 SO 中这篇很棒的文章后 matlab绘制分组箱线图最有效的方法 https stackoverflow com questions 15971478 most efficient way of drawing grouped bo
  • 更改 bootstrap vue 选项卡标题的标题颜色

    I m using bootstrap vue js to create a tab The result is like this 我只想更改选项卡标题颜色 因为它使用我项目中的默认颜色 并来自 bootstrap vue js 官方链接
  • 提交时避免 PHP 中的竞争条件:请不要多次单击“提交”!

    不久前 在线应用程序曾经说过 不要多次点击提交 现在已经消失了 对吧 例如 在 PHP 中如何防范这种情况 我使用的一个解决方案是在会话中放置一个变量 这样您就不能每 10 秒多次提交到一个页面 这样数据库工作就完成了 因此可以进行正常检查
  • Automapper 地图自定义集合

    Hello 我有一个看起来像这样的列表 public class PagedList
  • 在 PHP 和 JavaScript 之间共享常量 [重复]

    这个问题在这里已经有答案了 可能的重复 将 PHP 字符串传递给 Javascript 变量 并转义换行符 https stackoverflow com questions 168214 pass a php string to a ja
  • 确保立即选择 iframe

    这可能是一个愚蠢的问题 但是当我使用 iframe 时 如果您单击该框架 则可以使用特定方面 由 iframe 使用的 html 文件中的事件侦听器控制 如果您在 iframe 外部单击 则会失去对这些控件和事件侦听器的访问权限 有没有办法
  • PHP 重写 url 并保留发布的数据

    我有一个 php 服务器 我想重写传入的 url 由于传入请求是发布请求 我还希望发布的数据在新的网址上传输 我已经成功地使用以下重写规则重定向网址 RewriteRule test http localhost index php dat
  • Android:将 RGB888 转换为 Y800

    我正在从 vuforia 获取作为 RGB888 bytes 捕获的图像 我想将其传递给 zbar 它期望格式为 Y800 我怎样才能做到这一点 i tried Image barcode new Image width height RG
  • useReducer 的initialState 类型为never?

    初始状态有错误 类型为 email string 的参数密码 字符串 有效 布尔值 不可分配给 never 类型的参数 ts 2345 function reducer state IState action IFluxAction con
  • 将 Selenium WebDriver 与 Tor 结合使用

    因为 Tor Browser Bundle 只是 Firefox 的补丁版本 所以似乎应该可以使用FirefoxDriver使用 Tor 浏览器 这是我到目前为止所尝试过的 String torPath C Users My User De
  • 类路径中的 Groovy 资源未加载

    今天是个好日子 我正在使用 spock 框架在我的 groovy 项目 IDE Intellij Idea 12 6 中进行测试 我的 spock 规范类将文件名传递给 groovy 对象进行处理 该文件肯定位于类路径中 但是当我尝试以这种
  • 如何用Java编写全屏模式?

    我希望我的应用程序具有全屏模式 最简单的方法是什么 我是否需要第三方库来实现此目的 或者 JDK 中是否已经提供了此功能 Try the 全屏独占模式API http java sun com docs books tutorial ext
  • 即使我在组件中添加了提供程序,角度 2 中也没有响应提供程序?

    错误 这是我收到的错误 即使我已将提供程序添加到我的组件中 我无法获取我的错误是什么 这是我的所有文件 应用程序组件 ts 应用程序组件 html carservice ts 我无法解决 EXCEPTION Error in 0 0 ORI
  • 在批次之间传递 LSTM 状态的最佳方式

    我正在尝试找到在批次之间传递 LSTM 状态的最佳方法 我已经搜索了所有内容 但找不到当前实施的解决方案 想象一下我有类似的东西 cells rnn LSTMCell size for size in 256 256 cells rnn M
  • 在 Linux C 控制台应用程序中模拟按键

    有没有办法用C语言在Linux中模拟按键 在我的具体情况下 我使用的是 Ubuntu 9 04 需要一个简单的应用程序 在启动时调用 暂停 按钮 这将使 Firefox 中的 iframe 使用 Javascript 进行刷新 我假设你的意
  • 使用 Python-oauth2 在 python 中为 tumblr API 初始化 Oauth 客户端

    我是 Oauth 的新手 过去 对于用 Python 编写的 Twitter 应用程序 我使用 python oauth2 库来初始化客户端 如下所示 consumer oauth Consumer key CONSUMER KEY sec