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

2010-06-07 Thread Steve C
If you were seeing a 400 Bad Req, you were most likely sending a bad
upload to the API. We only return a 400 Bad Req if the image is not
found, the multipart form-data is malformed, or if the image is >5MB.

If Twitpic is having a service outage you will always get a 50x error
(502 or 500). If Twitter is having an OAuth Echo outage, you will get
a 401 Unauthorized from the Twitpic API.

Steve Corona
Twitpic

On Jun 4, 3:48 pm, yml  wrote:
> 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  wrote:
>
>
>
> > 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  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  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  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 
> > >> 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

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

2010-06-04 Thread Steve C
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  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  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:

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

2010-06-03 Thread Steve C
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  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  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(r

[twitter-dev] Re: Serious @Anywhere Uncommanded redirect

2010-06-01 Thread Steve C
Thanks for posting this, I'm glad someone else is seeing the same
issue as us. Similarly, I was disappointed with the response from
Twitter- maybe I didn't explain the problem well enough.
Unfortunately, we had to pull @anywhere from Twitpic until they get
the issue resolved.

Steve Corona

On Jun 1, 11:11 pm, BevHoward  wrote:
> My users (none of them twitter users) are experiencing uncommanded
> redirects to (undefined) twitter pages when they go to sites such as
> washington post which, based on the limited information I have been
> able to glean, is running @anywhere
>
> I found one post at
>
> http://www.devcomments.com/Anywhere-auto-redirecting-users-to-twitter...
>
> where a twitter response indicates that the problem is "due to the
> users' browser"
>
> This seems to be a totally unethical response to a twitter process
> that hijacks non twitter users browsers and prevents them from
> accessing content they are attempting to access.
>
> Anyone at twitter care to comment on how _not twitter_ users are
> supposed to deal with these problems?
>
> Beverly Howard


[twitter-dev] Re: @Anywhere auto-redirecting users to twitter.com/undefined

2010-06-01 Thread Steve C
Right, I understand that it's not supported on older browsers but I
think that it's unacceptable behavior for @anywhere to redirect a user
from our site to a broken page on twitter.com. It seems like a defect,
even if the browser is not supported (it should just do nothing- not
cause issues). Is there anyway that @anywhere can do some browser
sniffing and cleanly exit out if the features you need are not
supported?

Thanks,

Steve Corona
Twitpic

On Jun 1, 9:57 am, Taylor Singletary 
wrote:
> Hi Steve,
>
> Sorry about the issues. @Anywhere supports the following browsers 
> (fromhttp://dev.twitter.com/anywhere/begin):
>
> Version 1 of @Anywhere supports the following browsers:
>
>    - Firefox 3.x
>    - Chrome 4
>    - Safari 4
>    - Opera 10
>    - Internet Explorer 6, 7, and 8
>
> Taylor Singletary
> Developer Advocate, Twitterhttp://twitter.com/episod
>
>
>
> On Tue, Jun 1, 2010 at 6:50 AM, Steve C  wrote:
> > We had some reports over the weekend of users using older browsers
> > (Firefox 2.0 was mentioned) being auto-redirected to "twitter.com/
> > undefined" due to @anywhere. Anyone else having the same issue?


[twitter-dev] @Anywhere auto-redirecting users to twitter.com/undefined

2010-06-01 Thread Steve C
We had some reports over the weekend of users using older browsers
(Firefox 2.0 was mentioned) being auto-redirected to "twitter.com/
undefined" due to @anywhere. Anyone else having the same issue?


[twitter-dev] Re: oAuth Echo Enabled Providers

2010-05-20 Thread Steve C
Hi Rich-

Nice catch! During one of our deployments today, we mistakingly
switched the OAuth Echo API to use Twitter's Non-SSL Endpoint. I just
pushed a fix for it- can you let me know if everything works correctly
for you again?

(Coincidently, the deployment that turned off SSL for the API was
turning SSL on for another part of the website. :P)

Thanks!

Steve Corona
Twitpic

On May 20, 6:44 pm, Rich  wrote:
> A bit more debugging and oAuth Echo only seems to be broken over SSL,
> change the realm, provider and signing request 
> tohttp://api.twitter.com/1/account/verify_credentials.jsoninstead 
> ofhttps://api.twitter.com/1/account/verify_credentials.jsonand it'll go
> through
>
> On May 20, 11:23 pm, Rich  wrote:
>
>
>
> > Scrap that, looks like oAuth echo is almost totally broken right now,
> > only Twitgoo seems to be working, both MobyPicture and TwitPic
> > constantly return a 401, and on the very odd occasion one does make it
> > through Twitter itself returns a 500 status error (even though it
> > actually posts the message)
>
> > On May 20, 11:00 pm, Rich  wrote:
>
> > > Look's like TwitPic's oAuth Echo has broken again, can anyone else
> > > confirm?
>
> > > On May 20, 9:49 pm, Justin Hart  wrote:
>
> > > > This is now active on Twitgoo. You can see the documentation 
> > > > here:http://twitgoo.com/docs/Content/Developer/upload.htm
>
> > > > On May 19, 9:05 am, Justin Hart  wrote:
>
> > > > > I am the lead dev on Twitgoo and I just built full echo support for
> > > > > 'upload' there.  Its on the beta site right now, so if you want to
> > > > > test, please contact me for the info, otherwise it should be out by
> > > > > the end of the week.  It will have full support of header, query
> > > > > string and multipart body parameters.
>
> > > > > On May 17, 2:47 pm, Rich  wrote:
>
> > > > > > With the impending switch off of Basic Auth, should we keep a list 
> > > > > > of
> > > > > > media providers and external services that have already made the
> > > > > > switch to oAuth Echo.
>
> > > > > > So far I've found and tested
>
> > > > > > TwitPic - full oAuth Echo support
> > > > > > TwitVid - oAuth Echo by sending as a URL parameter
>
> > > > > > I know MobyPicture intend to have oAuth Echo enabled this month.
>
> > > > > > Any others any one knows of?


[twitter-dev] Re: alert() in anywhere.js

2010-05-19 Thread Steve C
I am assuming they will create a dummy function that will be used
console.log is undefined- otherwise, you are very right.

On May 19, 3:03 pm, nischalshetty  wrote:
> One of us is crazy here. If I'm not wrong console.log belongs to
> firebug. Which means you will get a javascript error on ALL browsers
> which do not have firebug installed and running.
>
> -Nischal
>
> On May 19, 11:41 pm, Dan Webb  wrote:
>
>
>
> > On Wed, May 19, 2010 at 11:27 AM, Steve C  wrote:
> > > We just rolled out @anywhere yesterday and some of our users are
> > > experiencing similar issues.
>
> > >http://twitpic.com/1p00d6
>
> > We rolled out a fix at the weekend that we fixed all the browsers that
> > we test under but there are obviously still some browsers getting the
> > issue.  I think we'll use console.info to display these message
> > instead of an alert.  We wanted to let developers know that they
> > needed a clientID in the most noticable way but to avoid unintended
> > annoyance of users we'll move to console.log.
>
> > Thanks,
>
> > --
> > Dan Webb
> > Front-end Engineer, Platform
> > d...@twitter.com / @danwrong
> > +1 415 425 5631


[twitter-dev] Re: alert() in anywhere.js

2010-05-19 Thread Steve C
Thanks Dan- We appreciate you & your teams hard work.

On May 19, 2:53 pm, Dan Webb  wrote:
> On Wed, May 19, 2010 at 11:48 AM, Damon Clinkscales  wrote:
> > On Wed, May 19, 2010 at 1:41 PM, Dan Webb  wrote:
> >> On Wed, May 19, 2010 at 11:27 AM, Steve C  wrote:
> > Just wondering...does TwitPic have a bug or misconfiguration or is
> > this an @anywhere bug?
>
> Javascript errors at startup time (in these cases by browser bugs in
> certain browsers that we don't support) are causing the initialization
> to terminate early leaving the client ID unset.  We're going to ensure
> that unsupport browsers fail silently rather than triggering this
> alert.
>
> ETA for fix is within the hour.
>
> --
> Dan Webb
> Front-end Engineer, Platform
> d...@twitter.com / @danwrong
> +1 415 425 5631


[twitter-dev] Re: alert() in anywhere.js

2010-05-19 Thread Steve C
What is your ETA on rolling out the change? We are deciding on whether
we should disable @anywhere until alert() is removed.

On May 19, 2:41 pm, Dan Webb  wrote:
> On Wed, May 19, 2010 at 11:27 AM, Steve C  wrote:
> > We just rolled out @anywhere yesterday and some of our users are
> > experiencing similar issues.
>
> >http://twitpic.com/1p00d6
>
> We rolled out a fix at the weekend that we fixed all the browsers that
> we test under but there are obviously still some browsers getting the
> issue.  I think we'll use console.info to display these message
> instead of an alert.  We wanted to let developers know that they
> needed a clientID in the most noticable way but to avoid unintended
> annoyance of users we'll move to console.log.
>
> Thanks,
>
> --
> Dan Webb
> Front-end Engineer, Platform
> d...@twitter.com / @danwrong
> +1 415 425 5631


[twitter-dev] Re: alert() in anywhere.js

2010-05-19 Thread Steve C
We just rolled out @anywhere yesterday and some of our users are
experiencing similar issues.

http://twitpic.com/1p00d6

Steve

On May 14, 6:57 pm, Larry  wrote:
> I just came across a coworker's browser that triggered analert() call
> fromanywhere.js. While okay for development, the use ofalert() is
> not friendly for production websites. Could these be converted
> console.log() or some other benign mechanism?
>
> Grepping throughanywhere.js I found two instances ofalert():
>
> alert("To set up @anywhere, please provide a client ID");
>
> alert("No version matching "+Z);
>
> Cheers
> Larry