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))
""""

Reply via email to