Zac,
I would love to do this but I can't find any documentation on how to do
Oauth Echo with python-oauth2. I would gladly switch to python-ouath2 if I
could find some code showing How to use it to post a picture on twitpic :
http://dev.twitpic.com/docs/2/upload/

<http://dev.twitpic.com/docs/2/upload/>Any help would be greatly
appreciated.
Regards,
--yml

On Thu, Jun 3, 2010 at 7:41 PM, Zac Bowling <zbowl...@gmail.com> wrote:

> It may not help fix your problem but I would recommend upgrading to the
> python-oauth2 library. (Don't be confused by the name; it's not an oauth 2.0
> library, but just the next generation of the original oauth 1.0a library
> that Leah Culver wrote). There are bunch of little issues with the original
> one that don't follow the spec exactly that are fixed and it's not a
> difficult upgrade (as long as your are not hosting an OAuth server of your
> own because those interfaces changed considerably).
>
> http://github.com/zbowling/python-oauth2 (the fork I maintain with bunch
> of twitter related fixes and workarounds)
> or:
> http://github.com/simplegeo/python-oauth2 (the official upstream)
>
> Zac Bowling
> @zbowling
>
> On Jun 3, 2010, at 3:15 PM, Steve C wrote:
>
> > I just looked at your code briefly, but I believe the problem is this
> > line:
> >
> > oauth_request = TwitpicOAuthRequest(http_method="POST",
> > http_url=settings.TWITPIC_API_URL,
> >
> > The OAuth Request needs to be signed using the Twitter Endpoint
> > (https://api.twitter.com/1/account/verify_credentials.json), not the
> > Twitpic API URL.
> >
> > Try something like this:
> >
> > oauth_request = TwitpicOAuthRequest(http_method="GET",
> > http_url="https://api.twitter.com/1/account/verify_credentials.json";,
> >
> >
> > On Jun 3, 2:38 pm, yml <yann.ma...@gmail.com> wrote:
> >> I would greatly appreciate any help.
> >> Here it is the latest evolution of this piece of code :
> >>
> >> """
> >> 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="GET",
> >>
> >> #http_url=settings.TWITPIC_API_URL,
> >>
> >> http_url=settings.TWITTER_VERIFY_CREDENTIALS,
> >>                                           parameters=params)
> >>
> >> signature=oauth_request.sign_request(OAuthSignatureMethod_HMAC_SHA1(),
> >> consumer,
> >>                                     access_token)
> >>
> >>             headers = oauth_request.to_header()
> >>             headers['X-Auth-Service-Provider'] =
> >> settings.TWITTER_VERIFY_CREDENTIALS
> >>
> >>             #with multipart_encode
> >>             values = [
> >>                 MultipartParam('key',value=settings.TWITPIC_API_KEY),
> >>
> >> MultipartParam('message',value=form.cleaned_data['message']),
> >>                 MultipartParam('media',
> >>                                filename='copine_moi.jpg',
> >>                                filetype='image/jpeg',
> >>                                fileobj=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)
> >>             # Post to netcat -l -p 9000
> >>             #req = urllib2.Request("http://127.0.0.1:9000";, datagen,
> >> headers)
> >>
> >>             #with urlencode
> >>             #values = {}
> >>             #values['key'] = MultipartParam(settings.TWITPIC_API_KEY)
> >>             #values['message'] =
> >> MultipartParam(form.cleaned_data['message'])
> >>             #values['media'] = open("/home/yml/Desktop/
> >> copine_moi.jpg", "rb").read()
> >>             #data = urllib.urlencode(values)
> >>             #req = urllib2.Request(settings.TWITPIC_API_URL, data,
> >> 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))
> >> """
> >>
> >> On Jun 3, 11:20 am, yml <yann.ma...@gmail.com> wrote:
> >>
> >>
> >>
> >>> 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