我正在学习从Stocktwit的API获取数据,目前正在探索API的数据。我执行了以下代码来提取有关Apple股票的最新30条推文的信息:
import requests
a=requests.get('https://api.stocktwits.com/api/2/streams/symbol/AAPL.json')
a=a.json()
print(a.keys())
>> dict_keys(['cursor', 'messages', 'response', 'symbol'])
我可以看到Apple的股票字典中有四个键。但是我没有看到情绪的关键,这基本上就是我要找的:关键字"看涨"多少次?出现?这个词有多少次看跌"看跌"出现?
如果我直接从浏览器手动输入link,我可以手动查看多少次"看跌"并且"看涨"关键字出现在Apple的股票上。我怎么能用Python 3.5做到这一点?
编辑:我甚至尝试按照this的建议在字典键中查找我的关键字 帖子。
for bearish in a.keys():
print ("the key name is" + bearish + "and its value is" + a[bearish])
>> TypeError: Can't convert 'dict' object to str implicitly
答案 0 :(得分:1)
sentiment
隐藏在messages
:
from collections import Counter
sentiment_dict = Counter()
for message in a['messages']:
if 'entities' in message:
if 'sentiment' in message['entities']:
sentiment = message['entities']['sentiment']
if sentiment is not None:
sentiment = sentiment['basic']
sentiment_dict[sentiment] += 1
for key, value in sentiment_dict.items():
print "%s: %s" % (key, value)
<强>输出强>
Bearish: 4
Bullish: 8
我使用了Counter
,这是dict
的特化,用于计算情绪的频率。
注意强>
对于试图在JSON中查找字段的其他人,我建议
import json
print json.dumps(a, indent=4)
答案 1 :(得分:0)
看起来a[bearish]
可能是另一本字典。 print()
会自动插入空格,所以为什么不将print语句更改为
print ("the key name is", bearish, "and its value is", a[bearish])
这样可以更容易地调试这里发生的事情。
答案 2 :(得分:0)
您应该使用format()
代替+
来解决您的问题。
请查看以下内容以了解format()
的作用:
>>> my_dict = {'a': {'aa': 10}, 'b': {'bb': 20}}
>>>
>>> for key in my_dict.keys():
... print "key :" + key + " and value: " + my_dict[key]
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: cannot concatenate 'str' and 'dict' objects
>>>
>>> for key in my_dict.keys():
... print "key : {} and value: {}".format(key, my_dict[key])
...
key : a and value: {'aa': 10}
key : b and value: {'bb': 20}