使用python调用新浪微博接口

微博很火啊,那python是不是可以调用微博的api做一个小应用呢?答案是:必须可以,哈哈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
使用python调用weibo api
  
 # 调用的url地址  此为获取某人的个人信息的api  http://open.weibo.com/wiki/2/users/show
 the_url= 'https://api.weibo.com/2/users/show.json?uid=105729xxxx&access_token=2.xxx__YJBzk8g4Ddfd33f10237XXXXX'
  
 http_body= None
  
 # 发送请求并读取返回 返回的内容是真个html源代码,或者json数据,可以通过文件输出或者包一层repr()来查看内容
 req= urllib2.Request(the_url, data=http_body)
  
 #当然也可以用此来发送请求,并读取返回的内容是真个html源代码,可以通过文件输出或者包一层repr()来查看内容
 req= urllib2.Request("http://www.baidu.com", data=http_body)
  
 resp= urllib2.urlopen(req)
 print repr(resp.read())
  
  
  
 import json
 # 原配json工具
 json.loads(resp.read(), object_hook=_obj_hook)
  
  
 io= StringIO('["streaming API"]')
 print io.getvalue()
 # 输出为 ["streaming API"] io输出为一个StringIO对象 <cStringIO.StringI object at 0x1006aed80>
  
 # 注 json工具 提供load和loads2个方法
 json.load(fp[, encoding[,cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[,**kw]]]]]]]])
  
 json.loads(s[, encoding[,cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[,**kw]]]]]]]])
  
 其中fp 按照官方的解释[http://docs.python.org/2/glossary.html#term-file-object]是面向文件的系统,或者那种提供.read(),.write()方法的对象,比如上面的StringIO
 s 为普通的str或者unicode,相应json数据于python数据的对应如下
  
 [http://docs.python.org/2/library/json.html?highlight=object_hook#json-to-py-table]
 JSON    Python
 object    dict
 array   list
 string   unicode
 number (int)   int,long
 number (real)   float
 true   True
 false   False
 null   None
  
 # 转换json数据
 如果json数据如此
 {
     "ip_limit":1000,
     "limit_time_unit":"HOURS",
     "remaining_ip_hits":1000,
     "remaining_user_hits":146,
     "reset_time":"2013-04-19 15:00:00",
     "reset_time_in_seconds":3286,
     "user_limit":150
 }
 # 关于 object_hook 非必选函数 用于替换原本钓鱼json.loads返回的一个dict,
 # json.loads返回的dict如果遇到一个不存在的量 比如"abc" 则会报错,
 # 于是用object_hook 返回一个自己定义的dict 让他在遇到"abc"这个不存在的变量时不直接反错
 # 而是try catch一下 返回None  更稳定
  
 def _parse_json(s):
     ' parse str into JsonDict '
  
     def _obj_hook(pairs):
         ' convert json object to python object '
         o= JsonDict()
         # print pairs['list_id']
         print 'text' in pairs
         if 'text' in pairs:
             # it can output utf8
             print pairs['text']
         # ---
         for k, vin pairs.iteritems():
             o[str(k)]= v
         return o
     #loads  is  different from load
     return json.loads(s, object_hook=_obj_hook)
  
 class JsonDict(dict):
     ' general json object that allows attributes to be bound to and also behaves like a dict '
  
     def __getattr__(self, attr):
         try:
             return self[attr]
         except KeyError:
             raise AttributeError(r"'JsonDict' object has no attribute '%s'" % attr)
  
     def __setattr__(self, attr, value):
         self[attr]= value
  
 # 此 JsonDict 是dict(字典对象)的子类 它重写了 取索引的方法 __getattr__ 和 __setattr__
  
 # 这里获取dict里的数据有个技巧 在获取JsonDict的对象时有2中方法
 d1= JsonDict();
  
 d1['a']= 'strra'
 print d1['a']
 print d1.get('a')
 # 此 aaaa 并不在dict中
 print d1.get('aaaa')  # None
 print d1['aaaa']  # key error~
  
 # 使用get获取dict里的数据 遇到空的数据的话 可以避免error的产生 自动转成None
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容