Hello, I am in the process of writing a python web app that should enable the user to post picture to twitpic using the Oauth Echo authorization mechanism.
The application is already able to post tweet using the Oauth authentication so the access_token is available to us in the session. So my question to you guys is that it would be great if someone could point what is the issue in the code below or paste some sample code that upload a picture in python to twitpic. """" # OauthRequest is from the python-oauth lib # I overide the to_header method to return a dict with the right key. class TwitpicOAuthRequest(OAuthRequest): def to_header(self, realm='http://api.twitter.com/'): headers = super(TwitpicOAuthRequest, self).to_header(realm=realm) return {'X-Verify-Credentials-Authorization': headers['Authorization']} def post_photo(request): if request.method == 'POST': form = PhotoForm(request.POST, request.FILES) if not request.session.get('twitter_access_token'): return HttpResponse("Not authenticated") if form.is_valid(): access_token = request.session['twitter_access_token'] params = { 'oauth_consumer_key': settings.TWITTER_CONSUMER_KEY, 'oauth_signature_method':"HMAC-SHA1", 'oauth_token':access_token.key, 'oauth_timestamp':oauth.generate_timestamp(), 'oauth_nonce':oauth.generate_nonce(), 'oauth_version':'1.0' } consumer = oauth.OAuthConsumer(key=settings.TWITTER_CONSUMER_KEY, secret=settings.TWITTER_CONSUMER_SECRET) token = oauth.OAuthToken(key=access_token.key, secret=access_token.secret) oauth_request = TwitpicOAuthRequest(http_method="POST", http_url=settings.TWITPIC_API_URL, parameters=params) signature=oauth_request.build_signature(OAuthSignatureMethod_HMAC_SHA1(), consumer, access_token) headers = oauth_request.to_header() headers['X-Auth-Service-Provider'] = 'https:// api.twitter.com/1/account/verify_credentials.json' headers['X-Verify-Credentials-Authorization'] += ', oauth_signature="%s"' %signature values = {} values['key'] = settings.TWITPIC_API_KEY values['message'] = form.cleaned_data['message'] # the path to the file is hardcoded here in the future it will be taken from the from values['media'] = open("/home/yml/Desktop/copine_moi.jpg", "rb") register_openers() datagen, heads = multipart_encode(values) headers.update(heads) req = urllib2.Request(settings.TWITPIC_API_URL, datagen, headers) response = urllib2.urlopen(req) return HttpResponse("the photo is posted") else: form = PhotoForm(initial={"created_at":datetime.now()}) return render_to_response("twitter_integration/photo_form.html", {"form":form,}, context_instance=RequestContext(request)) """"