我正在使用Python向文件輸出Twitter流(「https://stream.twitter.com/1.1/statuses/filter.json?track=term」)。但是,該文件是輸出的,而不是一個「JSON」,「實例」(見粗體相關部分):Streaming API狀態/ filter.json?跟蹤未提供JSON Python
import oauth2 as oauth
import urllib2 as urllib
import json
# Filled correctly, no authentication problem
api_key = "XXX"
api_secret = "XXX"
access_token_key = "XXX"
access_token_secret = "XXX"
_debug = 0
oauth_token = oauth.Token(key=access_token_key, secret=access_token_secret)
oauth_consumer = oauth.Consumer(key=api_key, secret=api_secret)
signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()
http_method = "GET"
http_handler = urllib.HTTPHandler(debuglevel=_debug)
https_handler = urllib.HTTPSHandler(debuglevel=_debug)
'''
Construct, sign, and open a twitter request
using the hard-coded credentials above.
'''
def twitterreq(url, method, parameters):
req = oauth.Request.from_consumer_and_token(oauth_consumer,
token=oauth_token,
http_method=http_method,
http_url=url,
parameters=parameters)
req.sign_request(signature_method_hmac_sha1, oauth_consumer, oauth_token)
headers = req.to_header()
if http_method == "POST":
encoded_post_data = req.to_postdata()
else:
encoded_post_data = None
url = req.to_url()
opener = urllib.OpenerDirector()
opener.add_handler(http_handler)
opener.add_handler(https_handler)
response = opener.open(url, encoded_post_data)
return response
**def fetchcontinuousstream():
# For streaming of tweets use
url = "https://stream.twitter.com/1.1/statuses/filter.json?track=term"
parameters = []
response = twitterreq(url, "GET", parameters)
print "Type of the response"
print type(response)
for line in response:
print type(line)
if __name__ == '__main__':
fetchcontinuousstream()**
結果是這樣的:
Type of the response
<type 'instance'>
<type 'str'>
所以基本上響應是一個實例,不是一個JSON/Dict,每一行只是一個字符串...
我該如何獲得JSON呢?
謝謝回答,如果我嘗試這個代碼: 'response = json.loads(twitterreq(url,「GET」,parameters))' 它不起作用: 'File「print.py」, line 64,in fetchcontinuousstream response = json.loads(twitterreq(url,「GET」,parameters)) 文件「/usr/lib/python2.7/json/__init__.py」,第326行,載入中 return _default_decoder .decode(s) 解壓縮文件「/usr/lib/python2.7/json/decoder.py」,第366行 obj,end = self.raw_decode(s,idx = _w(s,0).end ()) 類型錯誤:預期字符串或buffer' – user1064285 2014-09-19 14:25:46
如果我上線加負載()代替: '用於響應行: 鳴叫= json.loads(線)' 它不工作之一:在提取連續流 tweet = jso n.loads(line) 文件「/usr/lib/python2.7/json/__init__.py」,第326行,載入中 return _default_decoder.decode(s) 文件「/usr/lib/python2.7/ json/decoder.py「,第366行,解碼爲 obj,end = self.raw_decode(s,idx = _w(s,0).end()) 文件」/usr/lib/python2.7/json/解碼器.py「,第384行,在raw_decode中 raise ValueError(」沒有JSON對象可以被解碼「) ValueError:沒有JSON對象可以被解碼' – user1064285 2014-09-19 14:29:54
對不起,修復答案。 – 2014-09-19 16:11:12