weibo python api 初尝试

今天下载了新浪微博的api,python版本的。不过后来发现新浪平台上的python api 居然不是官方版本,而是由廖雪峰提供的。这个版本的python api只适合用于网站开发,不合适用于客户端开发。因为本来是不知道这些的,所以我在这两种方式上吃了一些苦头。

weibo的认证有两种方式,一种是使用pin码的认证方法,另一种是code码的认证方法。当然这两种都是oauth2认证。我就用实例来说明一下这两种方法。

第一种使用pin码的方法,适合用于客户端开发。先看看下面的程序:

auth = OAuthHandler(consumer_key, consumer_secret)
auth_url = auth.get_authorization_url()
webbrowser.open(auth_url)
print 'Please authorize: ' + auth_url
verifier = raw_input('PIN: ').strip()
auth.get_access_token(verifier)
api = API(self.auth)

代码中consumer_key 和 consumer_secret是你创建一个应用程序的时候新浪开放平台自动给你生成的app_key和app_secret。我们使用这两个常量创建了一个OAuthHandler,然后得到一个认证的地址。我使用webbrowser这个类来打开这个网址,需要填写你的用户名和密码后获得授权。

这一步的出现主要是为了让应用得不到用户的用户名和密码,用户只需要和新浪进行交互。在得到授权码也就是pin码之后,auth将使用这个pin码得到一个access token 和 token secret。这一步说明了用户信任这个应用。这样应用就能得到一个可以用于处理微博的api类。

这个类的方法可以用于信息的获取和上传。比如下面的代码:

def update(self, message):
    message = message.encoding('utf-8')
    result = self.api.update_status(message)
    print result.id, result.text

上面的代码就是用户发微博的代码了,只要是获得了api这个类,一切的信息交互就靠这个类了。

下面是示例代码:

#!/usr/bin/python
#coding=utf-8

from weibopy.auth import OAuthHandler, BasicAuthHandler
from weibopy.api import API
import webbrowser

class Test(unittest.TestCase):

    consumer_key= "984974179"
    consumer_secret ="37db179174e0a56c082b90ef1705a640"

    def auth(self):

        if len(self.consumer_key) == 0:
            print "Please set consumer_key£¡£¡£¡"
            return

        if len(self.consumer_key) == 0:
            print "Please set consumer_secret£¡£¡£¡"
            return

        self.auth = OAuthHandler(self.consumer_key, self.consumer_secret)
        auth_url = self.auth.get_authorization_url()
        webbrowser.open(auth_url)
        print 'Please authorize: ' + auth_url
        verifier = raw_input('PIN: ').strip()
        self.auth.get_access_token(verifier)
        self.api = API(self.auth)

    def update(self, message):
        message = message.encode("utf-8")
        status = self.api.update_status(status=message)
        print status.id, status.text

test = Test()
test.auth()
test.update("auth2-test")

详细的api请大家下载之后去好好看看weibopy.api这个模块,里面有很多方法用于与新浪的交互。

这种方法所需要的api文件我在新浪的官网上并没有下到,而是在google当中搜索weibopy后在某个人的github上下到的。

新浪官网上提供的api是用于网站开发的。在新浪api提供的链接上提供了一份使用文档。

这是上面的代码:

from weibo import APIClient

APP_KEY = '1234567' # app key
APP_SECRET = 'abcdefghijklmn' # app secret
CALLBACK_URL = 'http://www.example.com/callback' # callback url
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
url = client.get_authorize_url()

相信大家对这种访问方式都很熟悉,就是把自己的网页设置为回调网页,然后用get_authorize_url()这个函数得到新浪的认证网页并访问。

只要用户在新浪的认证网页上填写了正确的信息,认证网页就会跳回到你的回调网页上并返回一个code码。

# 获取URL参数code:
code = your.web.framework.request.get('code')
r = client.request_access_token(code)
access_token = r.access_token # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in  # token过期的UNIX时间:
# TODO: 在此可保存access token
client.set_access_token(access_token, expires_in)

我们可以看到,你还是需要得到access_token来完成client这个对象。当然在这之后,你得到了一个可以用于信息交互的client对象,所有的操作都是使用这个client对象进行的。

比如:

print client.get.statues__user_timeline()

这个函数就可以打印出用户最近发出的20条微博。

接下来的操作你需要去新浪api提供的链接上提供的使用文档上认真看看了。

说了这么多,你一定会觉得奇怪,是不是所有的认证方法都必须链接到新浪的认证网页上去啊。这样不是很麻烦吗!后来我在weibopy.auth这个模块中找到了一个BasicAuthHandler类,使用这个类,可以不需要经过新浪的认证网页。

self.auth = BasicAuthHandler(self.username, self.password)
self.api  = API(self.auth, source = self.app_key)

这个类需要你提过app_key,username和password来进行验证。不知道这种方法是不是oauth1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值