Skip to content

Instantly share code, notes, and snippets.

@sonkm3
Created September 30, 2011 08:29
Show Gist options
  • Save sonkm3/1253099 to your computer and use it in GitHub Desktop.
Save sonkm3/1253099 to your computer and use it in GitHub Desktop.
python plurk wrapper
# -*- coding: utf-8 -*-
from cgi import parse_qs
from urllib import urlencode
import oauth2
OAUTH_REQUEST_TOKEN_URL = 'http://www.plurk.com/OAuth/request_token'
OAUTH_ACCESS_TOKEN_URL = 'http://www.plurk.com/OAuth/access_token'
OAUTH_AUTHORIZE_URL = 'http://www.plurk.com/OAuth/authorize?oauth_token=%s'
class Plurk:
def __init__(self, app_key, app_secret):
self.app_key = app_key
self.app_secret = app_secret
def set_oauth_token(self, oauth_token, oauth_token_secret):
self.oauth_token = oauth_token
self.oauth_token_secret = oauth_token_secret
def get_request_token(self):
consumer = oauth2.Consumer(self.app_key, self.app_secret)
client = oauth2.Client(consumer)
params = {
'oauth_signature_method': 'HMAC-SHA1',
'oauth_nonce': oauth2.generate_nonce(),
'oauth_timestamp': oauth2.generate_timestamp(),
}
req = oauth2.Request.from_consumer_and_token(consumer=consumer, http_method='POST', http_url=OAUTH_REQUEST_TOKEN_URL, parameters=params, is_form_encoded=True)
req.sign_request(oauth2.SignatureMethod_HMAC_SHA1(), consumer, None)
response, content = client.request(OAUTH_REQUEST_TOKEN_URL, method='POST', headers=req.to_header())
result = parse_qs(content)
oauth_token = result['oauth_token'][0]
oauth_token_secret = result['oauth_token_secret'][0]
authorize_url = OAUTH_AUTHORIZE_URL % oauth_token
return oauth_token, oauth_token_secret, authorize_url
def get_access_token(self, oauth_verifier):
consumer = oauth2.Consumer(self.app_key, self.app_secret)
token = oauth2.Token(self.oauth_token, self.oauth_token_secret)
client = oauth2.Client(consumer, token)
params = {
'oauth_signature_method': 'HMAC-SHA1',
'oauth_nonce': oauth2.generate_nonce(),
'oauth_timestamp': oauth2.generate_timestamp(),
'oauth_token': self.oauth_token,
'oauth_token_secret': self.oauth_token_secret,
'oauth_verifier': oauth_verifier,
}
req = oauth2.Request.from_consumer_and_token(consumer=consumer, token=token, http_method='POST', http_url=OAUTH_ACCESS_TOKEN_URL, parameters=params, is_form_encoded=True)
req.sign_request(oauth2.SignatureMethod_HMAC_SHA1(), consumer, token)
response, content = client.request(OAUTH_ACCESS_TOKEN_URL, method='POST', headers=req.to_header())
access_token = parse_qs(content)
oauth_access_token = access_token['oauth_token'][0]
oauth_access_token_secret = access_token['oauth_token_secret'][0]
return oauth_access_token, oauth_access_token_secret
def _get(self, url):
consumer = oauth2.Consumer(self.app_key, self.app_secret)
token = oauth2.Token(self.oauth_token, self.oauth_token_secret)
client = oauth2.Client(consumer, token)
params = {
'oauth_signature_method': 'HMAC-SHA1',
'oauth_nonce': oauth2.generate_nonce(),
'oauth_timestamp': oauth2.generate_timestamp(),
'oauth_token': self.oauth_token
}
req = oauth2.Request.from_consumer_and_token(consumer=consumer, token=token, http_method='GET', http_url=url, parameters=params)
req.sign_request(oauth2.SignatureMethod_HMAC_SHA1(), consumer, token)
response, content = client.request(url, method='GET', headers=req.to_header())
return content
def _post(self, url, body):
consumer = oauth2.Consumer(self.app_key, self.app_secret)
token = oauth2.Token(self.oauth_token, self.oauth_token_secret)
client = oauth2.Client(consumer, token)
params = {
'oauth_signature_method': 'HMAC-SHA1',
'oauth_nonce': oauth2.generate_nonce(),
'oauth_timestamp': oauth2.generate_timestamp(),
'oauth_token': self.oauth_token
}
body = urlencode(body)
req = oauth2.Request.from_consumer_and_token(consumer=consumer, token=token, http_method='POST', http_url=url, parameters=params, is_form_encoded=True)
req.sign_request(oauth2.SignatureMethod_HMAC_SHA1(), consumer, token)
response, content = client.request(url, method='POST', headers=req.to_header(), body=body)
return content
def call_api(self, url, data=None):
if data:
return self._post(url, data)
else:
return self._get(url)
@sonkm3
Copy link
Author

sonkm3 commented Sep 30, 2011

リクエストしてるところがコピペなのをなんとかしたい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment