I have just uploaded the same image using the web interface :
http://twitpic.com/1ttrlu
<http://twitpic.com/1ttrlu>do you have any recommendation ? On how to solve
this issue.
 <http://twitpic.com/1ttrlu>Regards,
--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 to netcat
>> > >             #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()
>> >
>> > >     return direct_to_template(request,
>> > >                               "twitter_integration/photo_form.html",
>> > >                               {"form":form,})
>> > > """
>> >
>> > > On Thu, Jun 3, 2010 at 10:48 PM, Zac Bowling <zbowl...@gmail.com>
>> wrote:
>> >
>> > >> Hi Yann,
>> >
>> > >> I don't see anything obvious that stands out as wrong to me in your
>> > >> implementation from just looking at it, but I'm not sure. I do have
>> OAuth
>> > >> Echo code working for Twitpic but using the OAuth2 library. If you
>> don't
>> > >> figure out an answer, you can hit me up off the list and I'll see if
>> I
>> > >> separate our version so it works independently and I'll post it on
>> gist for
>> > >> you.
>> >
>> > >> If you want to upgrade though to python-oauth2, the biggest change is
>> > >> swapping out your imports to use oauth2 instead of oauth and removing
>> the
>> > >> "OAuth" prefix on all the class names.
>> >
>> > >> For example:
>> > >>   import oauth
>> > >>   oauth.OAuthRequest(...)
>> > >>   oauth.OAuthToken(...)
>> >
>> > >> becomes:
>> > >>   import oauth2
>> > >>   oauth2.Request(...)
>> > >>   oauth2.Token(...)
>> >
>> > >> etc...
>> >
>> > >> Most of the API that you care about is identical from there. The
>> library
>> > >> has evolved a bit but it should be obvious and most of the public
>> methods
>> > >> remained the same. In my fork, I've fixed a few issues and added some
>> > >> changes to support XAuth and a few other minor issues (like forcing
>> > >> Authentication headers on POSTs for Twitter).
>> >
>> > >> Zac Bowling
>> > >> @zbowling
>> >
>> > >> On Jun 3, 2010, at 6:37 PM, Yann Malet wrote:
>> >
>> > >> 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),...
>> >
>> > read more ยป
>
>
>

Reply via email to