[twitter-dev] Re: OAuth Echo problem in python

2010-06-04 Thread yml
At that point both services yfrog and twipic work fine. I hate to say
this but I am almost convince that the pain in the development process
comes from some outage in either twitpic or Twitter Oauth Echo
authentication.

for the sake of completeness of this thread here it is my 2 working
views : http://dpaste.com/203292/

Regards,
--yml

On Jun 4, 9:59 am, Yann Malet yann.ma...@gmail.com wrote:
 I have just uploaded the same image using the web interface 
 :http://twitpic.com/1ttrlu
 http://twitpic.com/1ttrludo you have any recommendation ? On how to solve
 this issue.
  http://twitpic.com/1ttrluRegards,
 --yml

 On Fri, Jun 4, 2010 at 9:56 AM, Yann Malet yann.ma...@gmail.com wrote:
  Steve,
  The image is only 33.7kb and it is  a jpg.
  Do you have any python sample code for the ?
  Regards,
  --yml

  On Fri, Jun 4, 2010 at 9:38 AM, Steve C st...@twitpic.com wrote:

  Twitpic will only 400 Bad Request you if it can't find the image in
  your multipart/form-
  data or if the image is invalid (not jpg/png/gif or 5MB in size).

  Thanks,

  Steve C
  Twitpic

  On Jun 4, 9:20 am, Yann Malet yann.ma...@gmail.com wrote:
   If I send this request to 127.0.0.1:9000 without the file here it is
  the
   string I can observe :

   
   (ve)y...@yml-laptop:jess3$ netcat -l -p 9000
   POST / HTTP/1.1
   Accept-Encoding: identity
   Content-Length: 377
   X-Auth-Service-Provider:
 https://api.twitter.com/1/account/verify_credentials.json
   Host: 127.0.0.1:9000
   User-Agent: Python-urllib/2.6
   Connection: close
   Content-Type: multipart/form-data;
  boundary=a45bd25da2844dac81003987b3c19e18
   X-Verify-Credentials-Authorization: OAuth realm=
 http://api.twitter.com/;,
   oauth_signature_method=HMAC-SHA1,
   oauth_consumer_key=y2hEqGNEmyjU2De3hNcg,
   oauth_token=90476798-5VZeNLpXUCaJ06UaWve2c4JVfdcJj5D4r21JxUFM,
   oauth_signature=NMPlU4cRYl0b6jbQJ1xGXaZ5%2FpM%3D

   --a45bd25da2844dac81003987b3c19e18
   Content-Disposition: form-data; name=key
   Content-Type: text/plain; charset=utf-8
   Content-Length: 32

   4bb040d1ec65427f8038cdd60a12cde2
   --a45bd25da2844dac81003987b3c19e18
   Content-Disposition: form-data; name=message
   Content-Type: text/plain; charset=utf-8
   Content-Length: 13

   copine et moi
   --a45bd25da2844dac81003987b3c19e18--
   ^C
   (ve)y...@yml-laptop:jess3$

   

   Does any one can spot the issue ?
   Regards,
   --yml

   On Fri, Jun 4, 2010 at 9:14 AM, Yann Malet yann.ma...@gmail.com
  wrote:
Hello Zac,

I rewrote everything in my app based on python-oauth2 :
   http://dpaste.com/203168/
The file is still hardcoded to ease the comprehension. I hope this
  will
help you to spot my issue.

The error message I get from twitpic is 400 bad request.
Regards,
--yml


class OAuthEchoRequest(oauth.Request):
     def to_header(self, realm='http://api.twitter.com/'):
        headers = super(OAuthEchoRequest, self).to_header(realm=realm)
        return {'X-Verify-Credentials-Authorization':
headers['Authorization']}

@login_required
def twitpic_upload_photo(request):
    if request.method == 'POST':
        form = PhotoForm(request.POST, request.FILES)
        if form.is_valid():
            profile = Profile.objects.get(user=request.user)
            token = oauth.Token(profile.oauth_token,
                               profile.oauth_secret)

            params = {
                'oauth_consumer_key': settings.TWITTER_CONSUMER_KEY,
                'oauth_signature_method':HMAC-SHA1,
                'oauth_token':token.key,
                 'oauth_timestamp':oauth.generate_timestamp(),
                'oauth_nonce':oauth.generate_nonce(),
                'oauth_version':'1.0'
            }

            oauth_echo_request = OAuthEchoRequest(method=GET,

 url=settings.TWITTER_VERIFY_CREDENTIALS,
                                          #parameters=params
                                          )

   signature=oauth_echo_request.sign_request(oauth.SignatureMethod_HMAC_SHA1()
  ,
consumer,
                                    token)

            headers = oauth_echo_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

[twitter-dev] OAuth Echo problem in python

2010-06-03 Thread yml
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))



[twitter-dev] Re: OAuth Echo problem in python

2010-06-03 Thread yml
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