利用 requests 库请求 Instagram 的 API 返回的是字符串,怎样转换成字典?

2017-09-21 06:13:28 +08:00
 MagaFun

最近在做一些 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。请问有什么解决的方法吗?先提前谢谢大家。

2437 次点击
所在节点    Python
7 条回复
Cooky
2017-09-21 06:38:21 +08:00
json.loads
janxin
2017-09-21 07:13:34 +08:00
mediaMe.json()
iyaozhen
2017-09-21 08:23:51 +08:00
你这代码写的有点看不懂呀。
getMe 是个死循环?
然后 getMe 是个迭代生成器,但遍历这个迭代器的之前又调用了下?
mec
2017-09-21 10:05:46 +08:00
response 对象不是有个 json 方法吗?
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 头)
timonwong
2017-09-21 11:23:10 +08:00
我纠正一下上面的第 4 点,Content-Type 里面有 charset 了,不用强设
MagaFun
2017-09-22 20:10:52 +08:00
@janxin 问题是 mediaMe 返回的是一个 Response 200,必须要用 mediaMe.content 才能解出数据来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392421

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX