在python中使用python-instagram API订阅标记失败

时间:2014-05-07 05:55:23

标签: python instagram

我正在尝试使用python-instagram包装器为python订阅一个#标签。我以前使用cURL来执行身份验证握手,它工作正常。但是,我想使用所有包装器功能。

from instagram import client, subscriptions
from flask import Flask, request, render_template, session, redirect, abort, flash,     jsonify

app = Flask(__name__)

api = client.InstagramAPI(client_id="", client_secret="")

callback_url = 'http://localhost.com:515'
api.create_subscription(object='tag',object_id='bacon', aspect='media', callback_url=callback_url)

@app.route('/', methods=['GET'])
def handshake():
code = request.args.get('hub.challenge')
if code:
    return code 

if __name__ == '__main__':
    app.debug = True
app.run(host='localhost.com',port=515)

我得到的错误是: 回溯(最近一次调用最后一次):

  File "test.py", line 10, in <module>
    api.create_subscription(object='tag',object_id='bacon', aspect='media', callback_url=callback_url)
  File "/usr/local/lib/python2.7/dist-packages/instagram/bind.py", line 152, in _call
    return method.execute()
  File "/usr/local/lib/python2.7/dist-packages/instagram/bind.py", line 144, in execute
    content, next = self._do_api_request(url, method, body, headers)
  File "/usr/local/lib/python2.7/dist-packages/instagram/bind.py", line 100, in _do_api_request
    raise InstagramClientError('Unable to parse response, not valid JSON.')
instagram.bind.InstagramClientError: Unable to parse response, not valid JSON.

当我删除create_subscription行时似乎没问题,但是create_subscription方法做了一些奇怪的事情,我无法弄清楚是什么。最终目标是订阅标签并接收随标签张贴的新图片。

2 个答案:

答案 0 :(得分:0)

这可能是由于各种问题造成的:

  1. 确保您的callback_url已启动且可用于远程主机

  2. 调试握手()并确保返回值(放置打印件)

  3. 调试你的/usr/local/lib/python2.7/dist-packages/instagram/bind.py并看到带有错误信息的回复,这可能是答案))

  4. 让握手()接受来自Instagram的POST

  5. 在这种情况下,你可能应该使用经过身份验证的api

答案 1 :(得分:0)

文档错误。你需要像这样创建一个InstagramAPI实例:

client = InstagramAPI(access_token=my_access_token,
                      client_id=my_client_id,
                      client_secret=my_client_secret)

如果您需要进行身份验证,则必须这样做:

client = InstagramAPI(client_id=my_client_id,
                      client_secret=my_client_secret,
                      redirect_uri="http://localhost")
authurl = client.get_authorize_login_url(scope=["basic", "relationships", "likes", "public_content"]) # or whatever scopes you need