当前位置 博文首页 > python使用xauth方式登录饭否网然后发消息

    python使用xauth方式登录饭否网然后发消息

    作者:admin 时间:2021-07-04 17:45

    开发环境:python版本2.X

    复制代码 代码如下:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # 适合python版本:2.X

    import sys, urllib, re
    import oauth.oauth as oauth
    from urllib2 import Request, urlopen

    status = 'hello world !' # send message

    consumer_key = '...'     # api key
    consumer_secret = '...'  # api secret

    access_token_url = 'http://fanfou.com/oauth/access_token'
    verify_url = 'http://api.fanfou.com/account/verify_credentials.xml'
    post_url = 'http://api.fanfou.com/statuses/update.xml'

    def request_to_header(request, realm=''):
         """Serialize as a header for an HTTPAuth request."""
         auth_header = 'OAuth realm="%s"' % realm
         # Add the oauth parameters.
         if request.parameters:
             for k, v in request.parameters.iteritems():
                 if k.startswith('oauth_') or k.startswith('x_auth_'):
                     auth_header += ', %s="%s"' % (k, oauth.escape(str(v)))
         return {'Authorization': auth_header}

    # get username and password from command line
    username = sys.argv[1]
    passwd = sys.argv[2]

    consumer = oauth.OAuthConsumer(consumer_key, consumer_secret)
    params = {}
    params["x_auth_username"] = username
    params["x_auth_password"] = passwd
    params["x_auth_mode"] = 'client_auth'
    request = oauth.OAuthRequest.from_consumer_and_token(consumer,
                                                         http_url=access_token_url,
                                                         parameters=params)
    signature_method = oauth.OAuthSignatureMethod_HMAC_SHA1()
    request.sign_request(signature_method, consumer, None)
    headers=request_to_header(request)

    resp = urlopen(Request(access_token_url, headers=headers))
    token = resp.read()
    print token # access_token got
    m = re.match(r'oauth_token=(?P<key>[^&]+)&oauth_token_secret=(?P<secret>[^&]+)', token)
    if m:
        oauth_token = oauth.OAuthToken(m.group('key'), m.group('secret'))
        params['status']=status
        request = oauth.OAuthRequest.from_consumer_and_token(consumer,
                                                             http_method='POST',
                                                             token=oauth_token,
                                                             http_url=post_url,
                                                             parameters=params)
        request.sign_request(signature_method, consumer, oauth_token)
        headers=request_to_header(request)
        resp = urlopen(Request(url=post_url, data=urllib.urlencode({'status':status}), headers=headers))
        print resp.read()

    jsjbwy
    下一篇:没有了