Created
September 26, 2011 16:30
-
-
Save velocityzen/1242662 to your computer and use it in GitHub Desktop.
Revisions
-
velocityzen revised this gist
Oct 5, 2011 . 1 changed file with 63 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,63 @@ import urlparse import oauth2 as oauth consumer_key = '' consumer_secret = '' request_token_url = 'http://www.tumblr.com/oauth/request_token' access_token_url = 'http://www.tumblr.com/oauth/access_token' authorize_url = 'http://www.tumblr.com/oauth/authorize' consumer = oauth.Consumer(consumer_key, consumer_secret) client = oauth.Client(consumer) # Step 1: Get a request token. This is a temporary token that is used for # having the user authorize an access token and to sign the request to obtain # said access token. resp, content = client.request(request_token_url, "GET") if resp['status'] != '200': raise Exception("Invalid response %s." % resp['status']) request_token = dict(urlparse.parse_qsl(content)) print "Request Token:" print " - oauth_token = %s" % request_token['oauth_token'] print " - oauth_token_secret = %s" % request_token['oauth_token_secret'] print # Step 2: Redirect to the provider. Since this is a CLI script we do not # redirect. In a web application you would redirect the user to the URL # below. print "Go to the following link in your browser:" print "%s?oauth_token=%s" % (authorize_url, request_token['oauth_token']) print # After the user has granted access to you, the consumer, the provider will # redirect you to whatever URL you have told them to redirect to. You can # usually define this in the oauth_callback argument as well. accepted = 'n' while accepted.lower() == 'n': accepted = raw_input('Have you authorized me? (y/n) ') oauth_verifier = raw_input('What is the PIN? ') # Step 3: Once the consumer has redirected the user back to the oauth_callback # URL you can request the access token the user has approved. You use the # request token to sign this request. After this is done you throw away the # request token and use the access token returned. You should store this # access token somewhere safe, like a database, for future use. token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret']) token.set_verifier(oauth_verifier) client = oauth.Client(consumer, token) resp, content = client.request(access_token_url, "POST") access_token = dict(urlparse.parse_qsl(content)) print "Access Token:" print " - oauth_token = %s" % access_token['oauth_token'] print " - oauth_token_secret = %s" % access_token['oauth_token_secret'] print print "You may now access protected resources using the access tokens above." print -
velocityzen revised this gist
Sep 27, 2011 . 1 changed file with 3 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -59,13 +59,14 @@ def createPhotoPost(self, id, post): OAUTH_TOKEN = '' OAUTH_TOKEN_SECRET = '' DIR = 'dir/with/pictures' FILE_MASK = '*.jpg' BLOG = 'blog here' api = TumblrAPIv2(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) for img in glob.glob( os.path.join(DIR, FILE_MASK) ): date = time.gmtime(os.path.getmtime(img)) post = { -
velocityzen revised this gist
Sep 26, 2011 . No changes.There are no files selected for viewing
-
velocityzen renamed this gist
Sep 26, 2011 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
velocityzen created this gist
Sep 26, 2011 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,92 @@ import glob import json import os import time import urllib2 import urlparse import oauth2 from poster.encode import multipart_encode from poster.streaminghttp import register_openers class APIError(StandardError): def __init__(self, msg, response=None): StandardError.__init__(self, msg) class TumblrAPIv2: def __init__(self, consumer_key, consumer_secret, oauth_token, oauth_token_secret): self.consumer = oauth2.Consumer(consumer_key, consumer_secret) self.token = oauth2.Token(oauth_token, oauth_token_secret) self.url = "http://api.tumblr.com" def parse_response(self, result): content = json.loads(result) if 400 <= int(content["meta"]["status"]) <= 600: raise APIError(content["meta"]["msg"], result) return content["response"] def createPhotoPost(self, id, post): url = self.url + "/v2/blog/%s/post" %id img_file = post['data'] del(post['data']) req = oauth2.Request.from_consumer_and_token(self.consumer, token=self.token, http_method="POST", http_url=url, parameters=post) req.sign_request(oauth2.SignatureMethod_HMAC_SHA1(), self.consumer, self.token) compiled_postdata = req.to_postdata() all_upload_params = urlparse.parse_qs(compiled_postdata, keep_blank_values=True) for key, val in all_upload_params.iteritems(): all_upload_params[key] = val[0] all_upload_params['data'] = open(img_file, 'rb') datagen, headers = multipart_encode(all_upload_params) request = urllib2.Request(url, datagen, headers) try: respdata = urllib2.urlopen(request).read() except urllib2.HTTPError, ex: return 'Received error code: ', ex.code return self.parse_response(respdata) register_openers() CONSUMER_KEY = '' CONSUMER_SECRET = '' OAUTH_TOKEN = '' OAUTH_TOKEN_SECRET = '' DIR = "dir/with/pictures" BLOG = 'blog here' api = TumblrAPIv2(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) for img in glob.glob( os.path.join(DIR, '*.JPG') ): date = time.gmtime(os.path.getmtime(img)) post = { 'type' : 'photo', 'date' : time.strftime ("%Y-%m-%d %H:%M:%S", date), 'data' : img, 'tags' : time.strftime ("%Y", date) + ", photo", 'caption' : time.strftime ("%B %d / %Y", date) } try: response = api.createPhotoPost(BLOG,post) if 'id' in response: print response['id'] os.remove(img) else: print response break except APIError: print "Error" break print "Done!"