0

我是python的初学者,我正在尝试编写一个调用微博(中文推特)API并接收json响应的程序。这只是一个基本的关键字搜索和获取搜索结果示例。

但问题是我不知道如何从 python 进行 api 调用,所以我不断收到错误消息。我尝试使用的 API 是http://open.weibo.com/wiki/2/search/topics 它是中文的,但基本上它说的是 api url,方法 - > GET,以及我需要的参数列表。我的猜测是我搞砸了参数,那个方法: GET 不应该被视为一个参数,而是以我不知道的其他方式。有人可以帮忙吗??

以下是我尝试过的。我只是粘贴相关部分,在这部分之前有一个api授权码。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# sudo pip install sinaweibopy

import sys
import urllib, urllib2
from weibo import APIClient
import webbrowser

APP_KEY = '1234' # there are real values here in the actual code
APP_SECRET = '1234'
CALLBACK_URL = 'http://111.111'

def get_auth():
# some code here, not pasted

def get_data():
access_token = '1234' 
expires_in = '1234'

# This works fine
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
client.set_access_token(access_token, expires_in)
r = client.statuses.user_timeline.get()
for st in r.statuses:
    print st.text.encode('utf-8')

# This doesn't work
# statuses = client.search.topics.get(q=u'eland')

# This also doesn't work
# url = 'https://api.weibo.com/2/search/topics.json'
# params = {'method': GET, 'source': APP_KEY, 'access_token': access_token, 'q': 'new balance', 'count' : 50}

# request = urllib2.Request(url, urllib.urlencode(params))
# response = urllib2.urlopen(request)

错误信息(网址调用):

Traceback (most recent call last):
File "weibopr.py", line 85, in <module>
elif opt == '2': get_data()
File "weibopr.py", line 57, in get_data
response = urllib2.urlopen(request)
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 448, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden
4

2 回答 2

0

发布您的确切错误响应,但您应该重试:

params = {'method': 'GET', 'source': APP_KEY, 'access_token': access_token, 'q': 'new balance', 'count' : 50}

你需要 GET 是 'GET'

于 2015-02-19T16:04:54.303 回答
0

我通过以下代码得到了我想要的东西。

url = 'https://api.weibo.com/2/statuses/public_timeline.json'
params = {'source': APP_KEY, 'access_token': access_token, 'count': 50}

# request public timeline
response = requests.get(url, params=params)
jres = response.json()

实际上,我想要的是 search.topics API,但事实证明我需要更高级别的授权才能调用该 API。

于 2015-02-20T15:40:31.263 回答