最近在做一些 Instagram 相关的项目,Python 上并没有可靠的 Instagram API,所以决定直接使用 requests 库。以下为代码段:
def getMe():
while True:
mediaMe = requests.get('https://api.instagram.com/v1/users/self/media/recent/?access_token={0}&count=1'.format(access_token))
print mediaMe.content
print type(mediaMe.content)
yield ast.literal_eval(mediaMe.content)
with open('instagram.log', 'a') as log:
getMe()
for line in getMe():
log.write(json.dumps(line))
log.write('\n')
print type(line)
然后问题出现了,mediaMe
返回的是一个类,mediaMe.content
返回的类型是一个字符串,这个字符串是被字符化的一个词典。尝试使用 ast.literal_eval(mediaMe.content)
转换为词典的时候,却提示 Malformed string
。请问有什么解决的方法吗?先提前谢谢大家。
1
Cooky 2017-09-21 06:38:21 +08:00 via Android
json.loads
|
2
janxin 2017-09-21 07:13:34 +08:00 via iPad 1
mediaMe.json()
|
3
iyaozhen 2017-09-21 08:23:51 +08:00 via Android
你这代码写的有点看不懂呀。
getMe 是个死循环? 然后 getMe 是个迭代生成器,但遍历这个迭代器的之前又调用了下? |
4
mec 2017-09-21 10:05:46 +08:00
response 对象不是有个 json 方法吗?
|
5
timonwong 2017-09-21 11:01:44 +08:00
1. response 有个 json() 方法
2. response 的 json() 方法调用 text 属性 3. text 属性,如果 response 没有 Content-Encoding 会执行一次巨慢的 chardet 4. 因此在调用 text/json() 之前,请 response.encoding = 'utf-8' ( instagram 的 API 不返回 Content-Encoding 头) |
6
timonwong 2017-09-21 11:23:10 +08:00
我纠正一下上面的第 4 点,Content-Type 里面有 charset 了,不用强设
|